Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/gallery.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/js/vendor
diff options
context:
space:
mode:
authorOlivier Paroz <github@oparoz.com>2015-03-22 19:44:47 +0300
committerOlivier Paroz <github@oparoz.com>2015-03-22 19:44:47 +0300
commit5272c42058547c5a9411a0200f71a0394a6417ee (patch)
tree02ac697834c50ced8ab149d7f236edad0e4524bc /js/vendor
parentc7af20b4be55f86edce153a8e6ca6a4239a239d8 (diff)
Introducing album preferences via yaml file
Filling request #93 and #85 Partial solution for #91
Diffstat (limited to 'js/vendor')
-rw-r--r--js/vendor/bigshot/LICENSE.txt202
-rw-r--r--js/vendor/bigshot/README.txt64
-rw-r--r--js/vendor/bigshot/bigshot-compressed.js1
-rw-r--r--js/vendor/bigshot/bigshot-full-and-optional-compressed.js1
-rw-r--r--js/vendor/bigshot/bigshot-full-and-optional.js11936
-rw-r--r--js/vendor/bigshot/bigshot-full-compressed.js1
-rw-r--r--js/vendor/bigshot/bigshot-full.js11259
-rw-r--r--js/vendor/bigshot/bigshot.jarbin0 -> 67506 bytes
-rw-r--r--js/vendor/bigshot/bigshot.js2
-rw-r--r--js/vendor/bigshot/bigshot.php99
-rw-r--r--js/vendor/bigshot/doc/java/allclasses-frame.html45
-rw-r--r--js/vendor/bigshot/doc/java/allclasses-noframe.html45
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/AbstractCubicTransform.TransformedFace.html346
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/AbstractCubicTransform.html1089
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/AbstractSphericalCubicTransform.html412
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/CylindricalToCubic.html487
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/EquirectangularToCubic.html510
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.FastAcos.html306
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.FastAtan.html306
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.html351
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/Image.html850
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/ImageInsert.html651
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.DescriptorFormat.html360
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.FolderLayout.html360
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Format.html360
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.ImageFormat.html360
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.LevelNumbering.html345
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Preset.html345
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Transform.html375
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.html2953
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/MakeImagePyramid.html311
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/MathUtil.html266
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/Point2D.html411
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/Point3D.html537
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/Point3DTransform.html333
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/mp/ChildCallable.html300
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/mp/DefaultWorkSetFactory.html319
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/mp/ParallelFor.html214
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/mp/WorkSet.html376
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/mp/WorkSetFactory.html228
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/mp/package-frame.html26
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/mp/package-summary.html180
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/mp/package-tree.html133
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/package-frame.html44
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/package-summary.html290
-rw-r--r--js/vendor/bigshot/doc/java/bigshot/package-tree.html179
-rw-r--r--js/vendor/bigshot/doc/java/constant-values.html385
-rw-r--r--js/vendor/bigshot/doc/java/deprecated-list.html113
-rw-r--r--js/vendor/bigshot/doc/java/help-doc.html214
-rw-r--r--js/vendor/bigshot/doc/java/index-all.html1833
-rw-r--r--js/vendor/bigshot/doc/java/index.html33
-rw-r--r--js/vendor/bigshot/doc/java/overview-frame.html21
-rw-r--r--js/vendor/bigshot/doc/java/overview-summary.html148
-rw-r--r--js/vendor/bigshot/doc/java/overview-tree.html188
-rw-r--r--js/vendor/bigshot/doc/java/package-list2
-rw-r--r--js/vendor/bigshot/doc/java/resources/background.gifbin0 -> 2313 bytes
-rw-r--r--js/vendor/bigshot/doc/java/resources/tab.gifbin0 -> 291 bytes
-rw-r--r--js/vendor/bigshot/doc/java/resources/titlebar.gifbin0 -> 10701 bytes
-rw-r--r--js/vendor/bigshot/doc/java/resources/titlebar_end.gifbin0 -> 849 bytes
-rw-r--r--js/vendor/bigshot/doc/java/serialized-form.html126
-rw-r--r--js/vendor/bigshot/doc/java/stylesheet.css474
-rw-r--r--js/vendor/bigshot/doc/js/files.html1018
-rw-r--r--js/vendor/bigshot/doc/js/images/touch-ui.pngbin0 -> 97454 bytes
-rw-r--r--js/vendor/bigshot/doc/js/index.html712
-rw-r--r--js/vendor/bigshot/doc/js/symbols/_global_.html380
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.AbstractVRRenderer.html595
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.AdaptiveLODMonitor.html520
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.AdaptiveLODMonitorParameters.html808
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.ArchiveFileSystem.html452
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.Browser.html1081
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DTexturedQuad.html758
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DTexturedQuadScene.html562
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DVRRenderer.html504
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.CachingDataLoader.html441
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.DataLoader.html568
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.DeepZoomImageFileSystem.html452
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.DefaultDataLoader.html458
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.Event.html833
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.EventDispatcher.html665
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.FileSystem.html675
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.FolderFileSystem.html452
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.FullScreen.html656
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.HTMLDivElementLayer.html486
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.HTMLElementLayer.html474
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.HomogeneousPoint3D.html581
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.Hotspot.html584
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.HotspotLayer.html519
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.Image.html481
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.ImageBase.html2209
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.ImageEvent.html678
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.ImageParameters.html1220
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.ImageTileCache.html510
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.ImageVRTileCache.html464
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.LRUMap.html737
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.LabeledHotspot.html535
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.Layer.html676
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.LinkHotspot.html489
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.Object.html639
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.Point2D.html517
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.Point3D.html549
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.PointHotspot.html553
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.Rotation.html549
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.SimpleFileSystem.html459
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.SimpleImage.html487
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.TextureTileCache.html470
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.TexturedQuad.html430
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.TexturedQuadScene.html532
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.TileLayer.html465
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.TimedWeakReference.html657
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.TransformStack.html1006
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VREvent.html710
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRFace.html613
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRHotspot.html1053
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.RenderCause.html437
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.RenderState.html439
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.html2336
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRPanoramaParameters.html1592
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRPointHotspot.html491
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRRectangleHotspot.html491
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRRenderer.html1060
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.VRTileCache.html578
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.WebGL.html1089
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.WebGLTexturedQuad.html545
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.WebGLTexturedQuadScene.html556
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.WebGLUtil.html611
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.WebGLVRRenderer.html441
-rw-r--r--js/vendor/bigshot/doc/js/symbols/bigshot.html501
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__AbstractVRRenderer.js.html102
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__AdaptiveLODMonitor.js.html250
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__AdaptiveLODMonitorParameters.js.html126
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__ArchiveFileSystem.js.html134
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__Browser.js.html325
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DTexturedQuad.js.html137
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DTexturedQuadScene.js.html64
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DVRRenderer.js.html188
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__CachingDataLoader.js.html133
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__DataLoader.js.html49
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__DeepZoomImageFileSystem.js.html83
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__DefaultDataLoader.js.html99
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__Event.js.html100
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__EventDispatcher.js.html91
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__FileSystem.js.html93
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__FolderFileSystem.js.html90
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__FullScreen.js.html306
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__HTMLDivElementLayer.js.html106
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__HTMLElementLayer.js.html81
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__Hotspot.js.html85
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__HotspotLayer.js.html92
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__Image.js.html100
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__ImageBase.js.html1323
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__ImageEvent.js.html89
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__ImageParameters.js.html262
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__ImageTileCache.js.html276
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__ImageVRTileCache.js.html51
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__LRUMap.js.html113
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__LabeledHotspot.js.html72
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__Layer.js.html72
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__LinkHotspot.js.html49
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__Object.js.html100
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__PointHotspot.js.html74
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__SimpleFileSystem.js.html65
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__SimpleImage.js.html102
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__TextureTileCache.js.html213
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__TexturedQuad.js.html29
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__TexturedQuadScene.js.html41
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__TileLayer.js.html172
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__TimedWeakReference.js.html145
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__TransformStack.js.html165
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__VREvent.js.html99
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__VRFace.js.html332
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__VRHotspot.js.html290
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__VRPanorama.js.html1726
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__VRPanoramaParameters.js.html324
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__VRPointHotspot.js.html86
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__VRRectangleHotspot.js.html84
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__VRRenderer.js.html134
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__VRTileCache.js.html53
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__WebGL.js.html256
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLTexturedQuad.js.html71
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLTexturedQuadScene.js.html64
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLUtil.js.html105
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLVRRenderer.js.html171
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__bigshot.js.html130
-rw-r--r--js/vendor/bigshot/doc/js/symbols/src/src__js__types.js.html61
-rw-r--r--js/vendor/eventsource-polyfill/.bower.json43
-rw-r--r--js/vendor/eventsource-polyfill/LICENSE21
-rw-r--r--js/vendor/eventsource-polyfill/README.md75
-rw-r--r--js/vendor/eventsource-polyfill/bower.json29
-rw-r--r--js/vendor/eventsource-polyfill/dist/browserify-eventsource.js23
-rw-r--r--js/vendor/eventsource-polyfill/dist/eventsource.js621
-rw-r--r--js/vendor/github-markdown-css/.bower.json31
-rw-r--r--js/vendor/github-markdown-css/bower.json19
-rw-r--r--js/vendor/github-markdown-css/github-markdown.css664
-rw-r--r--js/vendor/github-markdown-css/license21
-rw-r--r--js/vendor/github-markdown-css/readme.md56
-rw-r--r--js/vendor/marked/.bower.json34
-rw-r--r--js/vendor/marked/LICENSE19
-rw-r--r--js/vendor/marked/Makefile12
-rw-r--r--js/vendor/marked/README.md406
-rw-r--r--js/vendor/marked/bin/marked187
-rw-r--r--js/vendor/marked/bower.json24
-rw-r--r--js/vendor/marked/component.json10
-rw-r--r--js/vendor/marked/doc/broken.md426
-rw-r--r--js/vendor/marked/doc/todo.md2
-rw-r--r--js/vendor/marked/index.js1
-rw-r--r--js/vendor/marked/lib/marked.js1272
-rw-r--r--js/vendor/marked/man/marked.188
-rw-r--r--js/vendor/marked/marked.min.js6
-rw-r--r--js/vendor/marked/package.json22
209 files changed, 100538 insertions, 1 deletions
diff --git a/js/vendor/bigshot/LICENSE.txt b/js/vendor/bigshot/LICENSE.txt
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/js/vendor/bigshot/LICENSE.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/js/vendor/bigshot/README.txt b/js/vendor/bigshot/README.txt
new file mode 100644
index 00000000..f6b5a646
--- /dev/null
+++ b/js/vendor/bigshot/README.txt
@@ -0,0 +1,64 @@
+Bigshot
+=======
+
+Legal
+-----
+Please see individual files for specific licenses. The Bigshot
+library itself is licensed under the Apache License version 2.0,
+but some runtime dependencies are MIT, MPL or BSD-like.
+
+
+Dependencies
+------------
+For 2D zoomable images, Bigshot has no dependencies.
+
+For VR panoramas using WebGL (the bigshot.VRPanorama class),
+Bigshot has a required dependency on Sylvester and glUtils -
+MIT and MPL, respectively. For debugging of WebGL rendering
+contexts, Bigshot requires the webgl-debug library, which
+is released under a BSD-like license (see the Chromium project).
+
+
+Files
+-----
+
+LICENSE.txt
+ - The Apache License, version 2.0.
+
+bigshot.jar
+ - Java JAR file with the MakeImagePyramid tool.
+ Execute:
+ java -jar bigshot.jar
+ for help.
+
+bigshot.js
+ - Uncompressed JavaScript library
+
+bigshot-compressed.js
+ - The Bigshot library, compressed using the YUI Compressor
+
+bigshot-full-compressed.js
+ - The Bigshot library, with required WebGL dependencies for
+ VR Panoramas, compressed using the YUI Compressor
+
+bigshot-full-and-optional-compressed.js
+ - The Bigshot library, with required and optional WebGL
+ dependencies for VR Panoramas, compressed using the YUI
+ Compressor
+
+bigshot.php
+ - PHP script to serve image data from .bigshot archives instead
+ of from a folder structure
+
+doc/js/
+ - JsDoc documentation for the JavaScript library
+
+
+Tutorial
+--------
+
+Please see:
+
+ http://code.google.com/p/bigshot/wiki/Tutorial
+
+For a nicely formatted tutorial. \ No newline at end of file
diff --git a/js/vendor/bigshot/bigshot-compressed.js b/js/vendor/bigshot/bigshot-compressed.js
new file mode 100644
index 00000000..69e83aae
--- /dev/null
+++ b/js/vendor/bigshot/bigshot-compressed.js
@@ -0,0 +1 @@
+if(!self.bigshot){bigshot={};bigshot.Object={extend:function(b,c){for(var a in c.prototype){if(b.prototype[a]){b.prototype[a]._super=c.prototype[a]}else{b.prototype[a]=c.prototype[a]}}},resolve:function(b){var e=b.split(".");var a=self;for(var d=0;d<e.length;++d){a=a[e[d]]}return a},validate:function(a,b){},alertr:function(b){var c="";for(var a in b){c+=a+":"+b[a]+"\n"}alert(c)},logr:function(b){var c="";for(var a in b){c+=a+":"+b[a]+"\n"}if(console){console.log(c)}}};bigshot.Browser=function(){this.requestAnimationFrameFunction=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){return setTimeout(b,0)}};bigshot.Browser.prototype={removeAllChildren:function(a){a.innerHTML=""},mouseEnter:function(b){var a=this.isAChildOf;return function(c){var d=c.relatedTarget;if(this===d||a(this,d)){return}b.call(this,c)}},isAChildOf:function(b,a){if(b===a){return false}while(a&&a!==b){a=a.parentNode}return a===b},unregisterListener:function(d,b,c,a){if(typeof(d.removeEventListener)!="undefined"){d.removeEventListener(b,c,a)}else{if(typeof(d.detachEvent)!="undefined"){d.detachEvent("on"+b,c)}}},registerListener:function(a,b,d,c){if(typeof a.addEventListener!="undefined"){if(b==="mouseenter"){a.addEventListener("mouseover",this.mouseEnter(d),c)}else{if(b==="mouseleave"){a.addEventListener("mouseout",this.mouseEnter(d),c)}else{a.addEventListener(b,d,c)}}}else{if(typeof a.attachEvent!="undefined"){a.attachEvent("on"+b,d)}else{a["on"+b]=d}}},stopEventBubbling:function(a){if(a){if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}}},stopEventBubblingHandler:function(){var a=this;return function(b){a.stopEventBubbling(b);return false}},stopMouseEventBubbling:function(a){this.registerListener(a,"mousedown",this.stopEventBubblingHandler(),false);this.registerListener(a,"mouseup",this.stopEventBubblingHandler(),false);this.registerListener(a,"mousemove",this.stopEventBubblingHandler(),false)},getElementSize:function(b){var a={};if(b.clientWidth){a.w=b.clientWidth}if(b.clientHeight){a.h=b.clientHeight}return a},browserIsViewporting:function(){if(window.innerWidth<=screen.width){return false}else{return true}},getDevicePixelScale:function(){if(this.browserIsViewporting()){return screen.width/window.innerWidth}else{return 1}},requestAnimationFrame:function(c,a){var b=this.requestAnimationFrameFunction;b(c,a)},getElementPosition:function(b){var a=new Object();a.x=0;a.y=0;var c=b;while(c){a.x+=c.offsetLeft;a.y+=c.offsetTop;if(c.clientLeft){a.x+=c.clientLeft}if(c.clientTop){a.y+=c.clientTop}if(c.x){a.x+=c.x}if(c.y){a.y+=c.y}c=c.offsetParent}return a},createXMLHttpRequest:function(){try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(a){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){}try{return new XMLHttpRequest()}catch(a){}alert("XMLHttpRequest not supported");return null},makeOpacityTransition:function(a,b){if(a.style.WebkitTransitionProperty!=undefined){a.style.opacity=1;a.style.WebkitTransitionProperty="opacity";a.style.WebkitTransitionTimingFunction="linear";a.style.WebkitTransitionDuration="1s";setTimeout(function(){a.addEventListener("webkitTransitionEnd",function(){b()});a.style.opacity=0},0)}else{a.style.opacity=0;b()}}};bigshot.EventDispatcher=function(){this.eventListeners={}};bigshot.EventDispatcher.prototype={addEventListener:function(a,b){if(this.eventListeners[a]==undefined){this.eventListeners[a]=new Array()}this.eventListeners[a].push(b)},removeEventListener:function(a,d){if(this.eventListeners[a]!=undefined){var c=this.eventListeners[a];for(var b=0;b<c.length;++b){if(c[b]===listener){c.splice(b,1);if(c.length==0){delete this.eventListeners[a]}break}}}},fireEvent:function(b,a){if(this.eventListeners[b]!=undefined){var d=this.eventListeners[b];for(var c=0;c<d.length;++c){d[c](a)}}}};bigshot.Event=function(b){this.bubbles=false;this.cancelable=false;this.currentTarget=null;this.defaultPrevented=false;this.target=null;this.timeStamp=new Date().getTime();this.type=null;this.isTrusted=false;for(var a in b){this[a]=b[a]}};bigshot.Event.prototype={preventDefault:function(){this.defaultPrevented=true}};bigshot.TimedWeakReference=function(b,c,a){this.object=null;this.hasObject=false;this.fnCreate=b;this.fnDispose=c;this.lastAccess=new Date().getTime();this.hasTimer=false;this.interval=a};bigshot.TimedWeakReference.prototype={dispose:function(){this.clear()},get:function(){if(!this.hasObject){this.hasObject=true;this.object=this.fnCreate();this.startTimer()}this.lastAccess=new Date().getTime();return this.object},clear:function(){if(this.hasObject){this.hasObject=false;this.fnDispose(this.object);this.object=null;this.stopTimer()}},stopTimer:function(){if(this.hasTimer){clearTimeout(this.timerId);this.hasTimer=false}},startTimer:function(){if(!this.hasTimer){var a=this;this.hasTimer=true;this.timerId=setTimeout(function(){a.hasTimer=false;a.update()},this.interval)}},update:function(){if(this.hasObject){var a=new Date().getTime();if(a-this.lastAccess>this.interval){this.clear()}else{this.startTimer()}}}};bigshot.ImageEvent=function(a){bigshot.Event.call(this,a)};bigshot.ImageEvent.prototype={};bigshot.Object.extend(bigshot.ImageEvent,bigshot.Event);bigshot.VREvent=function(a){bigshot.Event.call(this,a)};bigshot.VREvent.prototype={};bigshot.Object.extend(bigshot.VREvent,bigshot.Event);bigshot.FullScreen=function(a){this.container=a;this.isFullScreen=false;this.savedBodyStyle=null;this.savedParent=null;this.savedSize=null;this.expanderDiv=null;this.restoreSize=false;this.onCloseHandlers=new Array();this.onResizeHandlers=new Array();var b=function(d,e){for(var c=0;c<e.length;++c){if(d[e[c]]){return e[c]}}return null};this.requestFullScreen=b(a,["requestFullScreen","mozRequestFullScreen","webkitRequestFullScreen"]);this.cancelFullScreen=b(document,["cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen"]);this.restoreSize=this.requestFullScreen!=null};bigshot.FullScreen.prototype={browser:new bigshot.Browser(),getRootElement:function(){return this.div},addOnClose:function(a){this.onCloseHandlers.push(a)},onClose:function(){for(var a=0;a<this.onCloseHandlers.length;++a){this.onCloseHandlers[a]()}},addOnResize:function(a){this.onResizeHandlers.push(a)},onResize:function(){for(var a=0;a<this.onResizeHandlers.length;++a){this.onResizeHandlers[a]()}},open:function(){this.isFullScreen=true;if(this.requestFullScreen){return this.openRequestFullScreen()}else{return this.openCompat()}},openRequestFullScreen:function(){this.savedSize={width:this.container.style.width,height:this.container.style.height};this.container.style.width="100%";this.container.style.height="100%";var a=this;if(this.requestFullScreen=="mozRequestFullScreen"){var c=function(){a.container.removeEventListener("mozfullscreenerror",c);a.isFullScreen=false;a.exitFullScreenHandler();a.onClose()};this.container.addEventListener("mozfullscreenerror",c);var b=function(){if(document.mozFullScreenElement!==a.container){document.removeEventListener("mozfullscreenchange",b);a.exitFullScreenHandler()}else{a.onResize()}};document.addEventListener("mozfullscreenchange",b)}else{var b=function(){if(document.webkitCurrentFullScreenElement!==a.container){a.container.removeEventListener("webkitfullscreenchange",b);a.exitFullScreenHandler()}else{a.onResize()}};this.container.addEventListener("webkitfullscreenchange",b)}this.exitFullScreenHandler=function(){if(a.isFullScreen){a.isFullScreen=false;document[a.cancelFullScreen]();if(a.restoreSize){a.container.style.width=a.savedSize.width;a.container.style.height=a.savedSize.height}a.onResize();a.onClose()}};this.container[this.requestFullScreen]()},openCompat:function(){this.savedParent=this.container.parentNode;this.savedSize={width:this.container.style.width,height:this.container.style.height};this.savedBodyStyle=document.body.style.cssText;document.body.style.overflow="hidden";this.expanderDiv=document.createElement("div");this.expanderDiv.style.position="absolute";this.expanderDiv.style.top="0px";this.expanderDiv.style.left="0px";this.expanderDiv.style.width=Math.max(window.innerWidth,document.documentElement.clientWidth)+"px";this.expanderDiv.style.height=Math.max(window.innerHeight,document.documentElement.clientHeight)+"px";document.body.appendChild(this.expanderDiv);this.div=document.createElement("div");this.div.style.position="fixed";this.div.style.top=window.pageYOffset+"px";this.div.style.left=window.pageXOffset+"px";this.div.style.width=window.innerWidth+"px";this.div.style.height=window.innerHeight+"px";this.div.style.zIndex=9998;this.div.appendChild(this.container);document.body.appendChild(this.div);var c=this;var b=function(f){setTimeout(function(){c.div.style.width=window.innerWidth+"px";c.div.style.height=window.innerHeight+"px";setTimeout(function(){c.onResize()},1)},1)};var d=function(f){c.expanderDiv.style.width=Math.max(window.innerWidth,document.documentElement.clientWidth)+"px";c.expanderDiv.style.height=Math.max(window.innerHeight,document.documentElement.clientHeight)+"px";setTimeout(function(){c.div.style.top=window.pageYOffset+"px";c.div.style.left=window.pageXOffset+"px";c.div.style.width=window.innerWidth+"px";c.div.style.height=window.innerHeight+"px";setTimeout(function(){c.onResize()},1)},1)};var a=function(f){if(f.keyCode==27){c.exitFullScreenHandler()}};this.exitFullScreenHandler=function(){c.isFullScreen=false;c.browser.unregisterListener(document,"keydown",a);c.browser.unregisterListener(window,"resize",b);c.browser.unregisterListener(document.body,"orientationchange",d);if(c.restoreSize){c.container.style.width=c.savedSize.width;c.container.style.height=c.savedSize.height}document.body.style.cssText=c.savedBodyStyle;c.savedParent.appendChild(c.container);document.body.removeChild(c.div);document.body.removeChild(c.expanderDiv);c.onResize();c.onClose();setTimeout(function(){c.onResize()},1)};this.browser.registerListener(document,"keydown",a,false);this.browser.registerListener(window,"resize",b,false);this.browser.registerListener(document.body,"orientationchange",d,false);this.onResize();return this.exitFullScreenHandler},close:function(){this.exitFullScreenHandler()}};bigshot.DataLoader=function(){};bigshot.DataLoader.prototype={loadImage:function(a,b){},loadXml:function(a,b,c){}};bigshot.DefaultDataLoader=function(b,a){this.maxRetries=b;this.crossOrigin=a;if(!this.maxRetries){this.maxRetries=0}};bigshot.DefaultDataLoader.prototype={browser:new bigshot.Browser(),loadImage:function(a,d){var c=document.createElement("img");c.retries=0;if(this.crossOrigin!=null){c.crossOrigin=this.crossOrigin}var b=this;this.browser.registerListener(c,"load",function(){if(d){d(c)}},false);this.browser.registerListener(c,"error",function(){c.retries++;if(c.retries<=b.maxRetries){setTimeout(function(){c.src=a},c.retries*1000)}else{if(d){d(null)}}},false);c.src=a;return c},loadXml:function(c,a,f){for(var e=0;e<=this.maxRetries;++e){var d=this.browser.createXMLHttpRequest();d.open("GET",c,false);d.send(null);if(d.status==200){var b=d.responseXML;if(b!=null){if(f){f(b)}return b}}if(e==that.maxRetries){if(f){f(null)}return null}}}};bigshot.Object.validate("bigshot.DefaultDataLoader",bigshot.DataLoader);bigshot.CachingDataLoader=function(){this.cache={};this.requested={};this.requestedTiles={}};bigshot.CachingDataLoader.prototype={browser:new bigshot.Browser(),loadImage:function(a,d){if(this.cache[a]){if(d){d(this.cache[a])}return this.cache[a]}else{if(this.requested[a]){if(d){this.requested[a].push(d)}return this.requestedTiles[a]}else{var c=this;this.requested[a]=new Array();if(d){this.requested[a].push(d)}var b=document.createElement("img");this.requestedTiles[a]=b;this.browser.registerListener(b,"load",function(){var f=c.requested[a];delete c.requested[a];delete c.requestedTiles[a];c.cache[a]=b;for(var e=0;e<f.length;++e){f[e](b)}},false);b.src=a;return b}}},loadXml:function(a,c,f){if(this.cache[a]){if(f){f(this.cache[a])}return this.cache[a]}else{if(this.requested[a]&&c){if(f){this.requested[a].push(f)}}else{var e=this.browser.createXMLHttpRequest();if(!this.requested[a]){this.requested[a]=new Array()}if(c){if(f){this.requested[a].push(f)}}var d=this;var b=function(){if(d.requested[a]){var g=null;if(e.status==200){g=e.responseXML}var k=d.requested[a];delete d.requested[a];d.cache[a]=g;for(var j=0;j<k.length;++j){k[j](g)}}return g};if(c){e.onreadystatechange=function(){if(e.readyState==4){b()}};e.open("GET",a,true);e.send()}else{e.open("GET",a,false);e.send();return b()}}}}};bigshot.Object.validate("bigshot.CachingDataLoader",bigshot.DataLoader);bigshot.Hotspot=function(a,e,b,d){var c=document.createElement("div");c.style.position="absolute";c.style.overflow="visible";this.element=c;this.x=a;this.y=e;this.w=b;this.h=d};bigshot.Hotspot.prototype={browser:new bigshot.Browser(),layout:function(c,e,d){var g=this.x*d+c;var f=this.y*d+e;var a=this.w*d;var b=this.h*d;this.element.style.top=f+"px";this.element.style.left=g+"px";this.element.style.width=a+"px";this.element.style.height=b+"px"},getElement:function(){return this.element}};bigshot.PointHotspot=function(a,i,b,e,f,g,c){bigshot.Hotspot.call(this,a,i,b,e);this.xo=f;this.yo=g;if(c){var d=this.getElement();d.style.backgroundImage="url('"+c+"')";d.style.backgroundRepeat="no-repeat"}};bigshot.PointHotspot.prototype={getLabel:function(){return this.label},layout:function(a,c,b){var e=this.x*b+a+this.xo;var d=this.y*b+c+this.yo;this.element.style.top=d+"px";this.element.style.left=e+"px";this.element.style.width=this.w+"px";this.element.style.height=this.h+"px"}};bigshot.Object.extend(bigshot.PointHotspot,bigshot.Hotspot);bigshot.Layer=function(){};bigshot.Layer.prototype={getContainer:function(){},setMaxTiles:function(a,b){},resize:function(a,b){},layout:function(g,e,f,a,d,c,i,b){}};bigshot.LabeledHotspot=function(a,e,b,c,d){bigshot.Hotspot.call(this,a,e,b,c);this.label=document.createElement("div");this.label.style.position="relative";this.label.style.display="inline-block";this.getElement().appendChild(this.label);this.label.innerHTML=d;this.labelSize=this.browser.getElementSize(this.label)};bigshot.LabeledHotspot.prototype={getLabel:function(){return this.label},layout:function(c,e,d){this.layout._super.call(this,c,e,d);var a=this.w*d;var b=this.h*d;this.label.style.top=(b+4)+"px";this.label.style.left=((a-this.labelSize.w)/2)+"px"}};bigshot.Object.extend(bigshot.LabeledHotspot,bigshot.Hotspot);bigshot.LinkHotspot=function(a,f,b,d,e,c){bigshot.LabeledHotspot.call(this,a,f,b,d,e);this.browser.registerListener(this.getElement(),"click",function(){document.location.href=c})};bigshot.Object.extend(bigshot.LinkHotspot,bigshot.LabeledHotspot);bigshot.HotspotLayer=function(a){this.image=a;this.hotspots=new Array();this.browser=new bigshot.Browser();this.container=a.createLayerContainer();this.parentContainer=a.getContainer();this.resize(0,0)};bigshot.HotspotLayer.prototype={getContainer:function(){return this.container},resize:function(a,b){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px"},layout:function(k,d,j,e,a,l,b,g){var c=Math.pow(2,this.image.getZoom());d-=b*e;j-=b*a;for(var f=0;f<this.hotspots.length;++f){this.hotspots[f].layout(d,j,c)}},setMaxTiles:function(b,a){},addHotspot:function(a){this.container.appendChild(a.getElement());this.hotspots.push(a)}};bigshot.Object.validate("bigshot.HotspotLayer",bigshot.Layer);bigshot.TileLayer=function(d,c,a,b,e){this.rows=new Array();this.browser=new bigshot.Browser();this.container=d.createLayerContainer();this.parentContainer=d.getContainer();this.parameters=c;this.w=a;this.h=b;this.imageTileCache=e;this.resize(a,b);return this};bigshot.TileLayer.prototype={getContainer:function(){return this.container},resize:function(a,d){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px";this.pixelWidth=this.parentContainer.clientWidth;this.pixelHeight=this.parentContainer.clientHeight;this.w=a;this.h=d;this.rows=new Array();this.browser.removeAllChildren(this.container);for(var f=0;f<d;++f){var g=new Array();for(var i=0;i<a;++i){var b=document.createElement("div");b.style.position="absolute";b.style.overflow="hidden";b.style.width=this.container.clientWidth+"px";b.style.height=this.container.clientHeight+"px";var e=document.createElement("div");e.style.position="relative";e.style.border="hidden";e.style.visibility="hidden";e.bigshotData={visible:false};g.push(e);this.container.appendChild(b);b.appendChild(e)}this.rows.push(g)}},layout:function(a,p,d,z,f,m,o,e){a=Math.min(0,Math.ceil(a));this.imageTileCache.resetUsed();var g=d;var b=0;for(var k=0;k<this.h;++k){var i=p;for(var s=0;s<this.w;++s){var v=this.rows[k][s];var j=v.bigshotData;if(i+m<0||i>this.pixelWidth||g+m<0||g>this.pixelHeight){if(j.visible){j.visible=false;v.style.visibility="hidden"}}else{b++;v.style.left=i+"px";v.style.top=g+"px";v.style.width=m+"px";v.style.height=m+"px";v.style.opacity=e;if(!j.visible){j.visible=true;v.style.visibility="visible"}var u=s+z;var t=k+f;if(this.parameters.wrapX){if(u<0||u>=this.imageTileCache.maxTileX){u=(u+this.imageTileCache.maxTileX)%this.imageTileCache.maxTileX}}if(this.parameters.wrapY){if(t<0||t>=this.imageTileCache.maxTileY){t=(t+this.imageTileCache.maxTileY)%this.imageTileCache.maxTileY}}var n=u+"_"+t+"_"+a;var q=u<0||u>=this.imageTileCache.maxTileX||t<0||t>=this.imageTileCache.maxTileY;if(q){if(!j.isOutside){var l=this.imageTileCache.getImage(u,t,a);this.browser.removeAllChildren(v);v.appendChild(l);j.image=l}j.isOutside=true;j.imageKey="EMPTY";j.image.style.width=m+"px";j.image.style.height=m+"px"}else{var l=this.imageTileCache.getImage(u,t,a);j.isOutside=false;if(j.imageKey!==n||j.isPartial){this.browser.removeAllChildren(v);v.appendChild(l);j.image=l;j.imageKey=n;j.isPartial=l.isPartial}j.image.style.width=m+"px";j.image.style.height=m+"px"}}i+=o}g+=o}},setMaxTiles:function(b,a){this.imageTileCache.setMaxTiles(b,a)}};bigshot.Object.validate("bigshot.TileLayer",bigshot.Layer);bigshot.LRUMap=function(){this.keyToTime={};this.counter=0;this.size=0};bigshot.LRUMap.prototype={access:function(a){this.remove(a);this.keyToTime[a]=this.counter;++this.counter;++this.size},remove:function(a){if(this.keyToTime[a]){delete this.keyToTime[a];--this.size;return true}else{return false}},getSize:function(){return this.size},leastUsed:function(){var b=this.counter+1;var c=null;for(var a in this.keyToTime){if(this.keyToTime[a]<b){b=this.keyToTime[a];c=a}}return c}};bigshot.ImageTileCache=function(d,a,c){var b=this;this.parameters=c;this.fullImage=null;c.dataLoader.loadImage(c.fileSystem.getPosterFilename(),function(e){b.fullImage=e;if(a){a()}});this.maxCacheSize=512;this.maxTileX=0;this.maxTileY=0;this.cachedImages={};this.requestedImages={};this.usedImages={};this.lastOnLoadFiredAt=0;this.imageRequests=0;this.lruMap=new bigshot.LRUMap();this.onLoaded=d;this.browser=new bigshot.Browser();this.partialImageSize=c.tileSize/4;this.POSTER_ZOOM_LEVEL=Math.log(c.posterSize/Math.max(c.width,c.height))/Math.log(2)};bigshot.ImageTileCache.prototype={resetUsed:function(){this.usedImages={}},setMaxTiles:function(b,a){this.maxTileX=b;this.maxTileY=a},getPartialImage:function(c,b,d){var a=this.getPartialImageFromDownsampled(c,b,d,0,0,this.parameters.tileSize,this.parameters.tileSize);if(a==null){a=this.getPartialImageFromPoster(c,b,d)}return a},getPartialImageFromPoster:function(d,c,e){if(this.fullImage&&this.fullImage.complete){var a=this.fullImage.width/this.parameters.width;var b=a*this.parameters.tileSize/Math.pow(2,e);x0=Math.floor(b*d);y0=Math.floor(b*c);w=Math.floor(b);h=Math.floor(b);return this.createPartialImage(this.fullImage,this.fullImage.width,x0,y0,w,h)}else{return null}},createPartialImage:function(f,k,b,p,q,g){var c=document.createElement("canvas");if(!c.width){return null}c.width=this.partialImageSize;c.height=this.partialImageSize;var r=c.getContext("2d");var d=f.width/k;var o=Math.floor(b*d);var n=Math.floor(p*d);var a=this.partialImageSize;var l=this.partialImageSize;q*=d;if(o+q>=f.width){var i=q;q=f.width-o;a*=q/i}g*=d;if(n+g>=f.height){var m=g;g=f.height-n;l*=g/m}try{r.drawImage(f,o,n,q,g,-0.1,-0.1,a+0.2,l+0.2)}catch(j){return null}return c},getPartialImageFromDownsampled:function(a,j,d,b,f,g,e){if(d<this.POSTER_ZOOM_LEVEL||d<this.parameters.minZoom){return null}var i=this.getImageKey(a,j,d);var c=this.cachedImages[i];if(c==null){this.requestImage(a,j,d)}if(c){return this.createPartialImage(c,this.parameters.tileSize,b,f,g,e)}else{g/=2;e/=2;b/=2;f/=2;if((a%2)==1){b+=this.parameters.tileSize/2}if((j%2)==1){f+=this.parameters.tileSize/2}a=Math.floor(a/2);j=Math.floor(j/2);--d;return this.getPartialImageFromDownsampled(a,j,d,b,f,g,e)}},getEmptyImage:function(){var a=document.createElement("img");if(this.parameters.emptyImage){a.src=this.parameters.emptyImage}else{a.src="data:image/gif,GIF89a%01%00%01%00%80%00%00%00%00%00%FF%FF%FF!%F9%04%00%00%00%00%00%2C%00%00%00%00%01%00%01%00%00%02%02D%01%00%3B"}return a},getImage:function(e,d,f){if(e<0||d<0||e>=this.maxTileX||d>=this.maxTileY){return this.getEmptyImage()}var b=this.getImageKey(e,d,f);this.lruMap.access(b);if(this.cachedImages[b]){if(this.usedImages[b]){var c=this.parameters.dataLoader.loadImage(this.getImageFilename(e,d,f));c.isPartial=false;return c}else{this.usedImages[b]=true;var a=this.cachedImages[b];return a}}else{this.requestImage(e,d,f);var a=this.getPartialImage(e,d,f);if(a!=null){a.isPartial=true;this.cachedImages[b]=a}else{a=this.getEmptyImage();if(a!=null){a.isPartial=true}}return a}},requestImage:function(d,c,e){var a=this.getImageKey(d,c,e);if(!this.requestedImages[a]){this.imageRequests++;var b=this;this.requestedImages[a]=true;this.parameters.dataLoader.loadImage(this.getImageFilename(d,c,e),function(f){delete b.requestedImages[a];b.imageRequests--;f.isPartial=false;b.cachedImages[a]=f;b.fireOnLoad()})}},fireOnLoad:function(){var a=new Date();if(this.imageRequests==0||a.getTime()>(this.lastOnLoadFiredAt+50)){this.purgeCache();this.lastOnLoadFiredAt=a.getTime();this.onLoaded()}},purgeCache:function(){for(var a=0;a<4;++a){if(this.lruMap.getSize()>this.maxCacheSize){var b=this.lruMap.leastUsed();this.lruMap.remove(b);delete this.cachedImages[b]}}},getImageKey:function(b,a,c){return"I"+b+"_"+a+"_"+c},getImageFilename:function(c,a,d){var b=this.parameters.fileSystem.getImageFilename(c,a,d);return b}};bigshot.ImageParameters=function(b){this.posterSize=0;this.emptyImage=null;this.suffix=null;this.width=0;this.height=0;this.container=null;this.minZoom=0;this.maxZoom=0;this.tileSize=0;this.overlap=0;this.wrapX=false;this.wrapY=false;this.basePath=null;this.fileSystemType="folder";this.fileSystem=null;this.dataLoader=new bigshot.DefaultDataLoader();this.touchUI=false;this.fling=true;this.maxTextureMagnification=1;if(b){for(var a in b){this[a]=b[a]}}this.merge=function(d,e){for(var c in d){if(e||!this[c]){this[c]=d[c]}}};return this};bigshot.ImageBase=function(b){bigshot.EventDispatcher.call(this);this.parameters=b;this.flying=0;this.container=b.container;this.x=b.width/2;this.y=b.height/2;this.zoom=0;this.width=b.width;this.height=b.height;this.minZoom=b.minZoom;this.maxZoom=b.maxZoom;this.tileSize=b.tileSize;this.overlap=0;this.imageTileCache=null;this.dragStart=null;this.dragged=false;this.layers=new Array();this.fullScreenHandler=null;this.currentGesture=null;var a=this;this.onresizeHandler=function(f){a.onresize()};var d=function(e){if(e.preventDefault){e.preventDefault()}return false};var c=function(e){if(e.clientX){return e}else{return{clientX:e.changedTouches[0].clientX,clientY:e.changedTouches[0].clientY,changedTouches:e.changedTouches}}};this.setupLayers();this.resize();this.allListeners={DOMMouseScroll:function(f){a.mouseWheel(f);return d(f)},mousewheel:function(f){a.mouseWheel(f);return d(f)},dblclick:function(f){a.mouseDoubleClick(f);return d(f)},mousedown:function(f){a.dragMouseDown(f);return d(f)},gesturestart:function(f){a.gestureStart(f);return d(f)},gesturechange:function(f){a.gestureChange(f);return d(f)},gestureend:function(f){a.gestureEnd(f);return d(f)},touchstart:function(f){a.dragMouseDown(c(f));return d(f)},mouseup:function(f){a.dragMouseUp(f);return d(f)},touchend:function(f){a.dragMouseUp(c(f));return d(f)},mousemove:function(f){a.dragMouseMove(f);return d(f)},mouseout:function(f){return d(f)},touchmove:function(f){a.dragMouseMove(c(f));return d(f)}};this.addEventListeners();this.browser.registerListener(window,"resize",a.onresizeHandler,false);this.zoomToFit()};bigshot.ImageBase.prototype={browser:new bigshot.Browser(),addEventListeners:function(){for(var a in this.allListeners){this.browser.registerListener(this.container,a,this.allListeners[a],false)}},removeEventListeners:function(){for(var a in this.allListeners){this.browser.unregisterListener(this.container,a,this.allListeners[a],false)}},setupLayers:function(){},getTextureStretch:function(){var a=Math.log(this.parameters.maxTextureMagnification/this.browser.getDevicePixelScale())/Math.LN2;return a},clampXY:function(j,g){var e=this.container.clientWidth;var d=this.container.clientHeight;var f=Math.pow(2,this.zoom);var b=e/f;var a=d/f;var i=function(m,o,n){var l=m/2;l=Math.min(o/2,l);if(n<l){n=l}var k=o-m/2;k=Math.max(o/2,k);if(n>k){n=k}return n};var c={};if(j!=null){c.x=i(b,this.width,j)}if(g!=null){c.y=i(a,this.height,g)}return c},layout:function(){var o=this.container.clientWidth;var c=this.container.clientHeight;var p=Math.min(this.maxZoom,Math.max(this.zoom-this.getTextureStretch(),this.minZoom));var l=Math.min(0,Math.ceil(p));var e=Math.pow(2,l);var m=this.clampXY(this.x,this.y);if(!this.parameters.wrapY){this.y=m.y}if(!this.parameters.wrapX){this.x=m.x}var u=this.tileSize/e;var j=Math.pow(2,this.zoom-l);var d=this.tileSize*j;var n=this.width/u;var k=this.height/u;var g=this.x/u;var f=this.y/u;var b=g-(o/2)/d;var a=f-(c/2)/d;var s=Math.floor(b);var r=Math.floor(a);var v=Math.round((b-s)*d);var t=Math.round((a-r)*d);for(var q=0;q<this.layers.length;++q){this.layers[q].layout(p,-v-d,-t-d,s-1,r-1,Math.ceil(d),Math.ceil(d),1)}},resize:function(){var c=Math.ceil(2*this.container.clientWidth/this.tileSize)+2;var a=Math.ceil(2*this.container.clientHeight/this.tileSize)+2;for(var b=0;b<this.layers.length;++b){this.layers[b].resize(c,a)}},createLayerContainer:function(){var a=document.createElement("div");a.style.position="absolute";a.style.overflow="hidden";return a},getContainer:function(){return this.container},addLayer:function(a){this.container.appendChild(a.getContainer());this.layers.push(a)},clampZoom:function(a){return Math.min(this.maxZoom,Math.max(a,this.minZoom))},setZoom:function(c,e){this.zoom=this.clampZoom(c);var g=Math.ceil(this.zoom-this.getTextureStretch());var b=Math.pow(2,g);var f=Math.ceil(b*this.width/this.tileSize);var d=Math.ceil(b*this.height/this.tileSize);for(var a=0;a<this.layers.length;++a){this.layers[a].setMaxTiles(f,d)}if(e){this.layout()}},setMaxZoom:function(a){this.maxZoom=a},getMaxZoom:function(){return this.maxZoom},setMinZoom:function(a){this.minZoom=a},getMinZoom:function(){return this.minZoom},adjustCoordinateForZoom:function(e,a,d,c){var b=Math.pow(2,d)/Math.pow(2,c);return a+(e-a)*b},gestureStart:function(a){this.currentGesture={startZoom:this.zoom,scale:a.scale}},gestureEnd:function(a){this.currentGesture=null;if(this.dragStart){this.dragStart.hadGesture=true}},gestureChange:function(d){if(this.currentGesture){if(this.dragStart){this.dragStart.hadGesture=true}var c=this.clampZoom(this.currentGesture.startZoom+Math.log(d.scale)/Math.log(2));var e=this.getZoom();if(this.currentGesture.clientX!==undefined&&this.currentGesture.clientY!==undefined){var b=this.clientToImage(this.currentGesture.clientX,this.currentGesture.clientY);var a=this.adjustCoordinateForZoom(this.x,b.x,e,c);var f=this.adjustCoordinateForZoom(this.y,b.y,e,c);this.moveTo(a,f,c)}else{this.setZoom(c);this.layout()}}},dragMouseDown:function(a){this.dragStart={x:a.clientX,y:a.clientY};this.dragLast={clientX:a.clientX,clientY:a.clientY,dx:0,dy:0,dt:1000000,time:new Date().getTime()};this.dragged=false},dragMouseMove:function(a){if(this.currentGesture!=null&&a.changedTouches!=null&&a.changedTouches.length>0){var e=0;var d=0;for(var j=0;j<a.changedTouches.length;++j){e+=a.changedTouches[j].clientX;d+=a.changedTouches[j].clientY}this.currentGesture.clientX=e/a.changedTouches.length;this.currentGesture.clientY=d/a.changedTouches.length}if(this.currentGesture==null&&this.dragStart!=null){var k={x:a.clientX-this.dragStart.x,y:a.clientY-this.dragStart.y};if(k.x!=0||k.y!=0){this.dragged=true}var c=Math.pow(2,this.zoom);var g=k.x/c;var f=k.y/c;this.dragStart={x:a.clientX,y:a.clientY};var b=new Date().getTime()-this.dragLast.time;if(b>20){this.dragLast={dx:this.dragLast.clientX-a.clientX,dy:this.dragLast.clientY-a.clientY,dt:b,clientX:a.clientX,clientY:a.clientY,time:new Date().getTime()}}this.moveTo(this.x-g,this.y-f)}},dragMouseUp:function(a){if(this.currentGesture==null&&!this.dragStart.hadGesture&&this.dragStart!=null){this.dragStart=null;if(!this.dragged){this.mouseClick(a)}else{var e=Math.pow(2,this.zoom);var j=this.dragLast.dx/e;var i=this.dragLast.dy/e;var d=Math.sqrt(j*j+i*i);var c=this.dragLast.dt;var b=new Date().getTime()-this.dragLast.time;this.dragLast=null;var g=c>0?(d/c):0;if(g>0.05&&b<250&&c>20&&this.parameters.fling){var f=new Date().getTime();j/=c;i/=c;this.flyTo(this.x+j*250,this.y+i*250,this.zoom)}}}},mouseDoubleClick:function(b){var a=this.createImageEventData({type:"dblclick",clientX:b.clientX,clientY:b.clientY});this.fireEvent("dblclick",a);if(!a.defaultPrevented){this.flyTo(a.imageX,a.imageY,this.zoom+0.5)}},getZoom:function(){return this.zoom},moveTo:function(a,d,b,c){this.stopFlying();if(a!=null||d!=null){this.setPosition(a,d,false)}if(b!=null){this.setZoom(b,false)}if(c==undefined||c==true){this.layout()}},setPosition:function(a,d,c){var b=this.clampXY(a,d);if(a!=null){if(this.parameters.wrapX){if(a<0||a>=this.width){a=(a+this.width)%this.width}}else{a=b.x}this.x=Math.max(0,Math.min(this.width,a))}if(d!=null){if(this.parameters.wrapY){if(d<0||d>=this.height){d=(d+this.height)%this.height}}else{d=b.y}this.y=Math.max(0,Math.min(this.height,d))}if(c!=false){this.layout()}},fitZoom:function(c,a){var b=a/c;return Math.log(b)/Math.LN2},getZoomToFitValue:function(){return Math.min(this.fitZoom(this.parameters.width,this.container.clientWidth),this.fitZoom(this.parameters.height,this.container.clientHeight))},getZoomToFillValue:function(){return Math.max(this.fitZoom(this.parameters.width,this.container.clientWidth),this.fitZoom(this.parameters.height,this.container.clientHeight))},zoomToFit:function(){this.moveTo(null,null,this.getZoomToFitValue())},zoomToFill:function(){this.moveTo(null,null,this.getZoomToFillValue())},zoomToFitHeight:function(){this.moveTo(null,null,this.fitZoom(this.parameters.height,this.container.clientHeight))},zoomToFitWidth:function(){this.moveTo(null,null,this.fitZoom(this.parameters.width,this.container.clientWidth))},flyZoomToFitHeight:function(){this.flyTo(null,this.parameters.height/2,this.fitZoom(this.parameters.height,this.container.clientHeight))},flyZoomToFitWidth:function(){this.flyTo(this.parameters.width/2,null,this.fitZoom(this.parameters.width,this.container.clientWidth))},flyZoomToFit:function(){this.flyTo(this.parameters.width/2,this.parameters.height/2,this.getZoomToFitValue())},clientToImage:function(c,a){var b=Math.pow(2,this.zoom);return{x:(c-this.container.clientWidth/2)/b+this.x,y:(a-this.container.clientHeight/2)/b+this.y}},mouseWheelHandler:function(g,d){var e=false;if(g>0){e=0.5}else{if(g<0){e=-0.5}}if(e){var b=this.clientToImage(d.clientX,d.clientY);var c=Math.min(this.maxZoom,Math.max(this.getZoom()+e,this.minZoom));var a=this.adjustCoordinateForZoom(this.x,b.x,this.getZoom(),c);var f=this.adjustCoordinateForZoom(this.y,b.y,this.getZoom(),c);this.flyTo(a,f,c,true)}},mouseWheel:function(a){var b=0;if(!a){a=window.event}if(a.wheelDelta){b=a.wheelDelta/120;if(window.opera){b=-b}}else{if(a.detail){b=-a.detail}}if(b){this.mouseWheelHandler(b,a)}if(a.preventDefault){a.preventDefault()}a.returnValue=false},onresize:function(){this.resize();this.layout()},getX:function(){return this.x},getY:function(){return this.y},stopFlying:function(){this.flying++},flyTo:function(m,l,q,e){var g=this;m=m!=null?m:this.x;l=l!=null?l:this.y;q=q!=null?q:this.zoom;e=e!=null?e:false;var d=this.x;var c=this.y;var o=this.zoom;var n=this.clampXY(m,l);var k=this.parameters.wrapX?m:n.x;var i=this.parameters.wrapY?l:n.y;var b=Math.min(this.maxZoom,Math.max(q,this.minZoom));this.flying++;var a=this.flying;var f=new Date().getTime();var p=function(z,x,t,s,r){var y=(x-z);var v=-y*Math.pow(2,-t*s);var u=t*r;if(y<0){v=Math.max(0,v-u)}else{v=Math.min(0,v+u)}return x+v};var j=function(){if(g.flying==a){var u=(new Date().getTime()-f)/1000;var r=p(d,k,u,e?10:4,e?0.2:1);var x=p(c,i,u,e?10:4,e?0.2:1);var v=p(o,b,u,10,0.2);var s=true;var t=Math.min(Math.pow(2,g.getZoom()),1);if(Math.abs(r-k)<(0.5*t)){r=k}else{s=false}if(Math.abs(x-i)<(0.5*t)){x=i}else{s=false}if(Math.abs(v-b)<0.02){v=b}else{s=false}g.setPosition(r,x,false);g.setZoom(v,false);g.layout();if(!s){g.browser.requestAnimationFrame(j,g.container)}}};this.browser.requestAnimationFrame(j,this.container)},rectVisibleAtZoomLevel:function(a,b){return Math.min(this.fitZoom(a,this.container.clientWidth),this.fitZoom(b,this.container.clientHeight))},getTouchAreaBaseSize:function(){var a=((this.container.clientWidth+this.container.clientHeight)/2)*0.2;return Math.min(a,Math.min(this.container.clientWidth,this.container.clientHeight)/6)},createImageEventData:function(b){var a=this.browser.getElementPosition(this.container);b.localX=b.clientX-a.x;b.localY=b.clientY-a.y;var c=Math.pow(2,this.zoom);b.imageX=(b.localX-this.container.clientWidth/2)/c+this.x;b.imageY=(b.localY-this.container.clientHeight/2)/c+this.y;b.target=this;b.currentTarget=this;return new bigshot.ImageEvent(b)},mouseClick:function(b){var a=this.createImageEventData({type:"click",clientX:b.clientX,clientY:b.clientY});this.fireEvent("click",a)},showTouchUI:function(f,g){if(!f){f=2500}if(!g){g=1000}var a=this.getTouchAreaBaseSize();var m=this.getTouchAreaBaseSize();var e=this.container.clientWidth/2;var d=this.container.clientHeight/2;var n=document.createElement("div");n.style.position="absolute";n.style.zIndex="9999";n.style.opacity=0.9;n.style.width=this.container.clientWidth+"px";n.style.height=this.container.clientHeight+"px";var b=document.createElement("div");b.style.position="absolute";var l=document.createElement("div");l.style.position="relative";l.style.background="black";l.style.textAlign="center";l.style.top=(d-m)+"px";l.style.left=(e-m)+"px";l.style.width=(2*m)+"px";l.style.height=(2*m)+"px";n.appendChild(b);b.appendChild(l);l.innerHTML="<span style='display:inline-box; position:relative; vertical-align:middle; font-size: 20pt; top: 10pt; color:white'>ZOOM IN</span>";var c=document.createElement("div");c.style.position="absolute";var k=document.createElement("div");k.style.position="relative";k.style.border=a+"px solid black";k.style.top="0px";k.style.left="0px";k.style.textAlign="center";k.style.width=this.container.clientWidth+"px";k.style.height=this.container.clientHeight+"px";k.style.MozBoxSizing=k.style.boxSizing=k.style.WebkitBoxSizing="border-box";k.innerHTML="<span style='position:relative; font-size: 20pt; top: -25pt; color:white'>ZOOM OUT</span>";c.appendChild(k);n.appendChild(c);this.container.appendChild(n);var j=this;var i=0.9;var p=g/50;if(p<1){p=1}var o=function(){i=i-(0.9/p);if(i<0){j.container.removeChild(n)}else{n.style.opacity=i;setTimeout(o,50)}};setTimeout(o,f)},exitFullScreen:function(){if(this.fullScreenHandler){this.removeEventListeners();this.fullScreenHandler.close();this.addEventListeners();this.fullScreenHandler=null;return}},fullScreen:function(a){if(this.fullScreenHandler){return}var c=document.createElement("div");c.style.position="absolute";c.style.fontSize="16pt";c.style.top="128px";c.style.width="100%";c.style.color="white";c.style.padding="16px";c.style.zIndex="9999";c.style.textAlign="center";c.style.opacity="0.75";c.innerHTML="<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";var b=this;this.fullScreenHandler=new bigshot.FullScreen(this.container);this.fullScreenHandler.restoreSize=true;this.fullScreenHandler.addOnResize(function(){if(b.fullScreenHandler&&b.fullScreenHandler.isFullScreen){b.container.style.width=window.innerWidth+"px";b.container.style.height=window.innerHeight+"px"}b.onresize()});this.fullScreenHandler.addOnClose(function(){if(c.parentNode){try{div.removeChild(c)}catch(d){}}b.fullScreenHandler=null});if(a){this.fullScreenHandler.addOnClose(function(){a()})}this.removeEventListeners();this.fullScreenHandler.open();this.addEventListeners();if(this.fullScreenHandler.getRootElement()){this.fullScreenHandler.getRootElement().appendChild(c);setTimeout(function(){var e=0.75;var d=function(){e-=0.02;if(c.parentNode){if(e<=0){try{div.removeChild(c)}catch(f){}}else{c.style.opacity=e;setTimeout(d,20)}}};setTimeout(d,20)},3500)}return function(){b.fullScreenHandler.close()}},dispose:function(){this.browser.unregisterListener(window,"resize",this.onresizeHandler,false);this.removeEventListeners()}};bigshot.Object.extend(bigshot.ImageBase,bigshot.EventDispatcher);bigshot.Image=function(a){bigshot.setupFileSystem(a);a.merge(a.fileSystem.getDescriptor(),false);bigshot.ImageBase.call(this,a)};bigshot.Image.prototype={setupLayers:function(){var a=this;this.thisTileCache=new bigshot.ImageTileCache(function(){a.layout()},null,this.parameters);this.addLayer(new bigshot.TileLayer(this,this.parameters,0,0,this.thisTileCache))}};bigshot.Object.extend(bigshot.Image,bigshot.ImageBase);bigshot.HTMLElementLayer=function(d,b,c,a){this.hotspots=new Array();this.browser=new bigshot.Browser();this.image=d;this.container=d.createLayerContainer();this.parentContainer=d.getContainer();this.element=b;this.parentContainer.appendChild(b);this.w=c;this.h=a;this.resize(0,0)};bigshot.HTMLElementLayer.prototype={getContainer:function(){return this.container},resize:function(a,b){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px"},layout:function(i,d,g,e,a,j,b,f){var c=Math.pow(2,this.image.getZoom());d-=b*e;g-=b*a;this.element.style.top=g+"px";this.element.style.left=d+"px";this.element.style.width=(this.w*c)+"px";this.element.style.height=(this.h*c)+"px"},setMaxTiles:function(b,a){}};bigshot.Object.validate("bigshot.HTMLElementLayer",bigshot.Layer);bigshot.HTMLDivElementLayer=function(e,b,c,a,f,d){this.wrapX=f;this.wrapY=d;this.hotspots=new Array();this.browser=new bigshot.Browser();this.image=e;this.container=e.createLayerContainer();this.parentContainer=e.getContainer();this.element=b;this.parentContainer.appendChild(b);this.w=c;this.h=a;this.resize(0,0)};bigshot.HTMLDivElementLayer.prototype={getContainer:function(){return this.container},resize:function(a,b){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px"},layout:function(m,e,l,f,a,n,b,j){var d=Math.pow(2,this.image.getZoom());e-=b*f;l-=b*a;var c=(this.w*d);var k=(this.h*d);this.element.style.backgroundSize=c+"px "+k+"px";var i="0px";var g="0px";if(this.wrapY){this.element.style.top="0px";this.element.style.height=(this.parentContainer.clientHeight)+"px";g=l+"px"}else{this.element.style.top=l+"px";this.element.style.height=k+"px"}if(this.wrapX){this.element.style.left="0px";this.element.style.width=(this.parentContainer.clientWidth)+"px";i=e+"px"}else{this.element.style.left=e+"px";this.element.style.width=c+"px"}this.element.style.backgroundPosition=i+" "+g},setMaxTiles:function(b,a){}};bigshot.Object.validate("bigshot.HTMLDivElementLayer",bigshot.Layer);bigshot.SimpleImage=function(a,b){a.merge({fileSystem:null,fileSystemType:"simple",maxTextureMagnification:1,tileSize:1024},true);if(b){a.merge({width:b.width,height:b.height});this.imgElement=b}else{if(a.width==0||a.height==0){throw new Error("No imgElement and missing width or height in ImageParameters")}}bigshot.setupFileSystem(a);bigshot.ImageBase.call(this,a)};bigshot.SimpleImage.prototype={setupLayers:function(){if(!this.imgElement){this.imgElement=document.createElement("div");this.imgElement.style.backgroundImage="url('"+this.parameters.basePath+"')";this.imgElement.style.position="absolute";if(!this.parameters.wrapX&&!this.parameters.wrapY){this.imgElement.style.backgroundRepeat="no-repeat"}else{if(this.parameters.wrapX&&!this.parameters.wrapY){this.imgElement.style.backgroundRepeat="repeat-x"}else{if(!this.parameters.wrapX&&this.parameters.wrapY){this.imgElement.style.backgroundRepeat="repeat-y"}else{if(this.parameters.wrapX&&this.parameters.wrapY){this.imgElement.style.backgroundRepeat="repeat"}}}}}this.addLayer(new bigshot.HTMLDivElementLayer(this,this.imgElement,this.parameters.width,this.parameters.height,this.parameters.wrapX,this.parameters.wrapY))}};bigshot.Object.extend(bigshot.SimpleImage,bigshot.ImageBase);bigshot.FileSystem=function(){};bigshot.FileSystem.prototype={getFilename:function(a){},getImageFilename:function(b,a,c){},setPrefix:function(a){},getDescriptor:function(){},getPosterFilename:function(){}};bigshot.setupFileSystem=function(a){if(!a.fileSystem){if(a.fileSystemType=="archive"){a.fileSystem=new bigshot.ArchiveFileSystem(a)}else{if(a.fileSystemType=="dzi"){a.fileSystem=new bigshot.DeepZoomImageFileSystem(a)}else{if(a.fileSystemType=="simple"){a.fileSystem=new bigshot.SimpleFileSystem(a)}else{a.fileSystem=new bigshot.FolderFileSystem(a)}}}}};bigshot.SimpleFileSystem=function(a){this.parameters=a};bigshot.SimpleFileSystem.prototype={getDescriptor:function(){return{}},getPosterFilename:function(){return null},getFilename:function(a){return null},getImageFilename:function(b,a,c){return null},getPrefix:function(){return""},setPrefix:function(a){this.prefix=a}};bigshot.Object.validate("bigshot.SimpleFileSystem",bigshot.FileSystem);bigshot.FolderFileSystem=function(a){this.prefix=null;this.suffix="";this.parameters=a};bigshot.FolderFileSystem.prototype={getDescriptor:function(){this.browser=new bigshot.Browser();var b=this.browser.createXMLHttpRequest();b.open("GET",this.getFilename("descriptor"),false);b.send(null);var c={};if(b.status==200){var d=b.responseText.split(":");for(var a=0;a<d.length;a+=2){if(d[a]=="suffix"){c[d[a]]=d[a+1]}else{c[d[a]]=parseInt(d[a+1])}}this.suffix=c.suffix;return c}else{throw new Error("Unable to find descriptor.")}},getPosterFilename:function(){return this.getFilename("poster"+this.suffix)},setPrefix:function(a){this.prefix=a},getPrefix:function(){if(this.prefix){return this.prefix+"/"}else{return""}},getFilename:function(a){return this.parameters.basePath+"/"+this.getPrefix()+a},getImageFilename:function(c,b,d){var a=(-d)+"/"+c+"_"+b+this.suffix;return this.getFilename(a)}};bigshot.Object.validate("bigshot.FolderFileSystem",bigshot.FileSystem);bigshot.DeepZoomImageFileSystem=function(a){this.prefix="";this.suffix="";this.DZ_NAMESPACE="http://schemas.microsoft.com/deepzoom/2009";this.fullZoomLevel=0;this.posterName="";this.parameters=a};bigshot.DeepZoomImageFileSystem.prototype={getDescriptor:function(){var e={};var b=this.parameters.dataLoader.loadXml(this.parameters.basePath+this.prefix+".xml",false);var d=b.getElementsByTagName("Image")[0];var c=b.getElementsByTagName("Size")[0];e.width=parseInt(c.getAttribute("Width"));e.height=parseInt(c.getAttribute("Height"));e.tileSize=parseInt(d.getAttribute("TileSize"));e.overlap=parseInt(d.getAttribute("Overlap"));e.suffix="."+d.getAttribute("Format");e.posterSize=e.tileSize;this.suffix=e.suffix;this.fullZoomLevel=Math.ceil(Math.log(Math.max(e.width,e.height))/Math.LN2);e.minZoom=-this.fullZoomLevel;var a=Math.ceil(Math.log(e.tileSize)/Math.LN2);this.posterName=this.getImageFilename(0,0,a-this.fullZoomLevel);return e},setPrefix:function(a){this.prefix=a},getPosterFilename:function(){return this.posterName},getFilename:function(a){return this.parameters.basePath+this.prefix+"/"+a},getImageFilename:function(d,c,e){var a=this.fullZoomLevel+e;var b=a+"/"+d+"_"+c+this.suffix;return this.getFilename(b)}};bigshot.ArchiveFileSystem=function(d){this.indexSize=0;this.offset=0;this.index={};this.prefix="";this.suffix="";this.parameters=d;var a=new bigshot.Browser();var c=a.createXMLHttpRequest();c.open("GET",this.parameters.basePath+"&start=0&length=24&type=text/plain",false);c.send(null);if(c.status==200){if(c.responseText.substring(0,7)!="BIGSHOT"){alert('"'+this.parameters.basePath+'" is not a valid bigshot file');return}this.indexSize=parseInt(c.responseText.substring(8),16);this.offset=this.indexSize+24;c.open("GET",this.parameters.basePath+"&type=text/plain&start=24&length="+this.indexSize,false);c.send(null);if(c.status==200){var e=c.responseText.split(":");for(var b=0;b<e.length;b+=3){this.index[e[b]]={start:parseInt(e[b+1])+this.offset,length:parseInt(e[b+2])}}}else{alert('The index of "'+this.parameters.basePath+'" could not be loaded: '+c.status)}}else{alert('The header of "'+this.parameters.basePath+'" could not be loaded: '+c.status)}};bigshot.ArchiveFileSystem.prototype={getDescriptor:function(){this.browser=new bigshot.Browser();var b=this.browser.createXMLHttpRequest();b.open("GET",this.getFilename("descriptor"),false);b.send(null);var c={};if(b.status==200){var d=b.responseText.split(":");for(var a=0;a<d.length;a+=2){if(d[a]=="suffix"){c[d[a]]=d[a+1]}else{c[d[a]]=parseInt(d[a+1])}}this.suffix=c.suffix;return c}else{throw new Error("Unable to find descriptor.")}},getPosterFilename:function(){return this.getFilename("poster"+this.suffix)},getFilename:function(a){a=this.getPrefix()+a;if(!this.index[a]&&console){console.log("Can't find "+a)}var b=this.parameters.basePath+"&start="+this.index[a].start+"&length="+this.index[a].length;if(a.substring(a.length-4)==".jpg"){b=b+"&type=image/jpeg"}else{if(a.substring(a.length-4)==".png"){b=b+"&type=image/png"}else{b=b+"&type=text/plain"}}return b},getImageFilename:function(c,b,d){var a=(-d)+"/"+c+"_"+b+this.suffix;return this.getFilename(a)},getPrefix:function(){if(this.prefix){return this.prefix+"/"}else{return""}},setPrefix:function(a){this.prefix=a}};bigshot.Object.validate("bigshot.ArchiveFileSystem",bigshot.FileSystem);bigshot.VRTileCache=function(){};bigshot.VRTileCache.prototype={getTexture:function(b,a,c){},purge:function(){},dispose:function(){}};bigshot.ImageVRTileCache=function(c,a,b){this.imageTileCache=new bigshot.ImageTileCache(c,a,b);this.imageTileCache.setMaxTiles(999999,999999)};bigshot.ImageVRTileCache.prototype={getTexture:function(c,b,d){var a=this.imageTileCache.getImage(c,b,d);return a},purge:function(){this.imageTileCache.resetUsed()},dispose:function(){}};bigshot.Object.validate("bigshot.ImageVRTileCache",bigshot.VRTileCache);bigshot.TextureTileCache=function(d,a,c,b){this.parameters=c;this.webGl=b;this.fullImage=c.dataLoader.loadImage(c.fileSystem.getPosterFilename(),a);this.maxTextureCacheSize=512;this.maxImageCacheSize=2048;this.cachedTextures={};this.cachedImages={};this.requestedImages={};this.lastOnLoadFiredAt=0;this.imageRequests=0;this.partialImageSize=c.tileSize/8;this.imageLruMap=new bigshot.LRUMap();this.textureLruMap=new bigshot.LRUMap();this.onLoaded=d;this.browser=new bigshot.Browser();this.disposed=false};bigshot.TextureTileCache.prototype={getPartialTexture:function(b,o,e){if(this.fullImage.complete){var c=document.createElement("canvas");if(!c.width){return null}c.width=this.partialImageSize;c.height=this.partialImageSize;var n=c.getContext("2d");var p=this.parameters.posterSize/Math.max(this.parameters.width,this.parameters.height);var l=Math.floor(p*this.parameters.width);var d=Math.floor(p*this.parameters.height);var m=p*(this.parameters.tileSize-this.parameters.overlap)/Math.pow(2,e);var j=Math.floor(m*b);var i=Math.floor(m*o);var k=Math.floor(m);var f=Math.floor(m);var a=this.partialImageSize+2;var g=this.partialImageSize+2;if(j+k>l){k=l-j;a=this.partialImageSize*(k/Math.floor(m))}if(i+f>d){f=d-i;g=this.partialImageSize*(f/Math.floor(m))}n.drawImage(this.fullImage,j,i,k,f,-1,-1,a,g);return this.webGl.createImageTextureFromImage(c,this.parameters.textureMinFilter,this.parameters.textureMagFilter)}else{return null}},setCachedTexture:function(b,a){if(this.cachedTextures[b]!=null){this.webGl.deleteTexture(this.cachedTextures[b])}this.cachedTextures[b]=a},getTexture:function(d,c,e){var b=this.getImageKey(d,c,e);this.textureLruMap.access(b);this.imageLruMap.access(b);if(this.cachedTextures[b]){return this.cachedTextures[b]}else{if(this.cachedImages[b]){this.setCachedTexture(b,this.webGl.createImageTextureFromImage(this.cachedImages[b],this.parameters.textureMinFilter,this.parameters.textureMagFilter));return this.cachedTextures[b]}else{this.requestImage(d,c,e);var a=this.getPartialTexture(d,c,e);if(a){this.setCachedTexture(b,a)}return a}}},requestImage:function(d,c,e){var a=this.getImageKey(d,c,e);if(!this.requestedImages[a]){this.imageRequests++;var b=this;this.parameters.dataLoader.loadImage(this.getImageFilename(d,c,e),function(g){if(b.disposed){return}b.cachedImages[a]=g;b.setCachedTexture(a,b.webGl.createImageTextureFromImage(g,b.parameters.textureMinFilter,b.parameters.textureMagFilter));delete b.requestedImages[a];b.imageRequests--;var f=new Date();if(b.imageRequests==0||f.getTime()>(b.lastOnLoadFiredAt+50)){b.lastOnLoadFiredAt=f.getTime();b.onLoaded()}});this.requestedImages[a]=true}},purge:function(){var a=this;this.purgeCache(this.textureLruMap,this.cachedTextures,this.maxTextureCacheSize,function(b){a.webGl.deleteTexture(a.cachedTextures[b])});this.purgeCache(this.imageLruMap,this.cachedImages,this.maxImageCacheSize,function(b){})},purgeCache:function(b,c,a,e){for(var d=0;d<64;++d){if(b.getSize()>a){var f=b.leastUsed();b.remove(f);if(e){e(f)}delete c[f]}else{break}}},getImageKey:function(b,a,c){return"I"+b+"_"+a+"_"+c},getImageFilename:function(c,a,d){var b=this.parameters.fileSystem.getImageFilename(c,a,d);return b},dispose:function(){this.disposed=true;for(var a in this.cachedTextures){this.webGl.deleteTexture(this.cachedTextures[a])}}};bigshot.Object.validate("bigshot.TextureTileCache",bigshot.VRTileCache);bigshot.VRFace=function(b,j,g,d,m,l,e){var i=this;this.owner=b;this.key=j;this.topLeft=g;this.width=d;this.u=m;this.v=l;this.updated=false;this.parameters=new Object();for(var f in this.owner.getParameters()){this.parameters[f]=this.owner.getParameters()[f]}bigshot.setupFileSystem(this.parameters);this.parameters.fileSystem.setPrefix("face_"+j);this.parameters.merge(this.parameters.fileSystem.getDescriptor(),false);this.tileCache=b.renderer.createTileCache(function(){i.updated=true;b.renderUpdated(bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE)},e,this.parameters);this.fullSize=this.parameters.width;this.overlap=this.parameters.overlap;this.tileSize=this.parameters.tileSize;this.minDivisions=0;var c=Math.log(this.fullSize-this.overlap)/Math.LN2;var a=Math.log(this.tileSize-this.overlap)/Math.LN2;this.maxDivisions=Math.floor(c-a);this.maxTesselation=this.parameters.maxTesselation>=0?this.parameters.maxTesselation:this.maxDivisions};bigshot.VRFace.prototype={browser:new bigshot.Browser(),dispose:function(){this.tileCache.dispose()},pt3dMultAdd:function(d,b,c){return{x:d.x*b+c.x,y:d.y*b+c.y,z:d.z*b+c.z}},pt3dMult:function(b,a){return{x:b.x*a,y:b.y*a,z:b.z*a}},generateFace:function(g,e,d,b,a,c){d*=this.tileSize/(this.tileSize-this.overlap);var f=this.tileCache.getTexture(b,a,-this.maxDivisions+c);g.addQuad(this.owner.renderer.createTexturedQuad(e,this.pt3dMult(this.u,d),this.pt3dMult(this.v,d),f))},VISIBLE_NONE:0,VISIBLE_SOME:1,VISIBLE_ALL:2,pointInRect:function(b,c,a){return(b.x>=c.x&&b.y>=c.y&&b.x<a.x&&b.y<a.y)},intersectWithView:function intersectWithView(x){var d=0;var c=[];var m=x.length;for(var r=0;r<m;++r){if(x[r]==null){d++}else{c.push(x[r])}}if(d==4){return this.VISIBLE_NONE}var v=c[0].x;var t=c[0].y;var u=v;var s=t;var l=0;var j=0;var k=this.viewportWidth;var g=this.viewportHeight;var a=0;var b=c.length;for(var r=1;r<b;++r){var f=c[r].x;var e=c[r].y;v=v<f?v:f;t=t<e?t:e;u=u>f?u:f;s=s>e?s:e}var q=v>l?v:l;var p=t>j?t:j;var o=u<k?u:k;var n=s<g?s:g;if(q<=o&&p<=n){return this.VISIBLE_SOME}return this.VISIBLE_NONE},screenDistance:function screenDistance(b,a){if(b==null||a==null){return 0}return Math.max(Math.abs(b.x-a.x),Math.abs(b.y-a.y))},transformToScreen:function transformToScreen(a){return this.owner.renderer.transformToScreen(a)},generateSubdivisionFace:function generateSubdivisionFace(p,m,l,b,u,s,y){if(!y){y=new Array(4);y[0]=this.transformToScreen(m);var k=this.pt3dMultAdd(this.u,l,m);y[1]=this.transformToScreen(k);var n=this.pt3dMultAdd(this.v,l,m);y[3]=this.transformToScreen(n);var e=this.pt3dMultAdd(this.v,l,k);y[2]=this.transformToScreen(e)}var x=this.intersectWithView(y);if(x==this.VISIBLE_NONE){return}var j=0;for(var o=0;o<y.length;++o){var g=(o+1)%4;j=Math.max(this.screenDistance(y[o],y[g]),j)}j*=this.owner.browser.getDevicePixelScale();if(b<this.minDivisions||((j>this.owner.maxTextureMagnification*(this.tileSize-this.overlap))&&b<this.maxDivisions&&b<this.maxTesselation)){var t=this.pt3dMultAdd({x:this.u.x+this.v.x,y:this.u.y+this.v.y,z:this.u.z+this.v.z},l/2,m);var r=this.pt3dMultAdd(this.u,l/2,m);var f=this.pt3dMultAdd(this.v,l/2,m);var q=this.transformToScreen(t);var v=this.transformToScreen(f);var d=this.transformToScreen(r);var c=this.transformToScreen(this.pt3dMultAdd(this.u,l,f));var a=this.transformToScreen(this.pt3dMultAdd(this.v,l,r));this.generateSubdivisionFace(p,m,l/2,b+1,u*2,s*2,[y[0],d,q,v]);this.generateSubdivisionFace(p,r,l/2,b+1,u*2+1,s*2,[d,y[1],c,q]);this.generateSubdivisionFace(p,f,l/2,b+1,u*2,s*2+1,[v,q,a,y[3]]);this.generateSubdivisionFace(p,t,l/2,b+1,u*2+1,s*2+1,[q,c,y[2],a])}else{this.generateFace(p,m,l,u,s,b)}},isUpdated:function(){return this.updated},render:function(a){this.updated=false;this.viewportWidth=this.owner.renderer.getViewportWidth();this.viewportHeight=this.owner.renderer.getViewportHeight();this.generateSubdivisionFace(a,this.topLeft,this.width,0,0,0)},endRender:function(){this.tileCache.purge()}};bigshot.WebGLUtil={debug:false,contextNames:["webgl","experimental-webgl"],createContext0:function(a,b){var c=this.debug?WebGLDebugUtils.makeDebugContext(a.getContext(b)):a.getContext(b);return c},createContext:function(a){for(var b=0;b<this.contextNames.length;++b){try{var d=this.createContext0(a,this.contextNames[b]);if(d){return d}}catch(c){}}throw new Error("Could not initialize WebGL.")},isWebGLSupported:function(){var a=document.createElement("canvas");if(!a.width){return false}try{this.createContext(a);return true}catch(b){return false}}};bigshot.TransformStack=function(){this.mvMatrix=null;this.mvMatrixStack=[];this.reset()};bigshot.TransformStack.prototype={push:function(a){if(a){this.mvMatrixStack.push(a.dup());this.mvMatrix=a.dup();return mvMatrix}else{this.mvMatrixStack.push(this.mvMatrix.dup());return mvMatrix}},pop:function(){if(this.mvMatrixStack.length==0){throw new Error("Invalid popMatrix!")}this.mvMatrix=this.mvMatrixStack.pop();return mvMatrix},reset:function(){this.mvMatrix=Matrix.I(4)},multiply:function(a){this.mvMatrix=a.x(this.mvMatrix)},translate:function(b){var a=Matrix.Translation($V([b.x,b.y,b.z])).ensure4x4();this.multiply(a)},rotate:function(c,b){var d=c*Math.PI/180;var a=Matrix.Rotation(d,$V([b.x,b.y,b.z])).ensure4x4();this.multiply(a)},rotateX:function(a){this.rotate(a,{x:1,y:0,z:0})},rotateY:function(a){this.rotate(a,{x:0,y:1,z:0})},rotateZ:function(a){this.rotate(a,{x:0,y:0,z:1})},perspective:function(d,c,b,e){var a=makePerspective(d,c,b,e);this.multiply(a)},matrix:function(){return this.mvMatrix}};bigshot.WebGL=function(a){this.canvas=a;this.gl=bigshot.WebGLUtil.createContext(this.canvas);this.mvMatrix=new bigshot.TransformStack();this.pMatrix=new bigshot.TransformStack();this.shaderProgram=null;this.onresize()};bigshot.WebGL.prototype={onresize:function(){this.gl.viewportWidth=this.canvas.width;this.gl.viewportHeight=this.canvas.height},fragmentShader:"#ifdef GL_ES\n precision highp float;\n#endif\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void) {\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n}\n",vertexShader:"attribute vec3 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void) {\n gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n vTextureCoord = aTextureCoord;\n}",createShader:function(c,a){var b=this.gl.createShader(a);this.gl.shaderSource(b,c);this.gl.compileShader(b);if(!this.gl.getShaderParameter(b,this.gl.COMPILE_STATUS)){alert(this.gl.getShaderInfoLog(b));return null}return b},createFragmentShader:function(a){return this.createShader(a,this.gl.FRAGMENT_SHADER)},createVertexShader:function(a){return this.createShader(a,this.gl.VERTEX_SHADER)},initShaders:function(){this.shaderProgram=this.gl.createProgram();this.gl.attachShader(this.shaderProgram,this.createVertexShader(this.vertexShader));this.gl.attachShader(this.shaderProgram,this.createFragmentShader(this.fragmentShader));this.gl.linkProgram(this.shaderProgram);if(!this.gl.getProgramParameter(this.shaderProgram,this.gl.LINK_STATUS)){throw new Error("Could not initialise shaders");return}this.gl.useProgram(this.shaderProgram);this.shaderProgram.vertexPositionAttribute=this.gl.getAttribLocation(this.shaderProgram,"aVertexPosition");this.gl.enableVertexAttribArray(this.shaderProgram.vertexPositionAttribute);this.shaderProgram.textureCoordAttribute=this.gl.getAttribLocation(this.shaderProgram,"aTextureCoord");this.gl.enableVertexAttribArray(this.shaderProgram.textureCoordAttribute);this.shaderProgram.pMatrixUniform=this.gl.getUniformLocation(this.shaderProgram,"uPMatrix");this.shaderProgram.mvMatrixUniform=this.gl.getUniformLocation(this.shaderProgram,"uMVMatrix");this.shaderProgram.samplerUniform=this.gl.getUniformLocation(this.shaderProgram,"uSampler")},setMatrixUniforms:function(){this.gl.uniformMatrix4fv(this.shaderProgram.pMatrixUniform,false,new Float32Array(this.pMatrix.matrix().flatten()));this.gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,false,new Float32Array(this.mvMatrix.matrix().flatten()))},createImageTextureFromImage:function(d,a,c){var b=this.gl.createTexture();this.handleImageTextureLoaded(this,b,d,a,c);return b},createImageTextureFromSource:function(e,a,d){var f=new Image();var c=this.gl.createTexture();var b=this;f.onload=function(){b.handleImageTextureLoaded(b,c,f,a,d)};f.src=e;return c},handleImageTextureLoaded:function(c,b,e,a,d){c.gl.bindTexture(c.gl.TEXTURE_2D,b);c.gl.texImage2D(c.gl.TEXTURE_2D,0,c.gl.RGBA,c.gl.RGBA,c.gl.UNSIGNED_BYTE,e);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MAG_FILTER,d?d:c.gl.NEAREST);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MIN_FILTER,a?a:c.gl.NEAREST);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_S,c.gl.CLAMP_TO_EDGE);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_T,c.gl.CLAMP_TO_EDGE);if(a==c.gl.NEAREST_MIPMAP_NEAREST||a==c.gl.LINEAR_MIPMAP_NEAREST||a==c.gl.NEAREST_MIPMAP_LINEAR||a==c.gl.LINEAR_MIPMAP_LINEAR){c.gl.generateMipmap(c.gl.TEXTURE_2D)}c.gl.bindTexture(c.gl.TEXTURE_2D,null)},deleteTexture:function(a){this.gl.deleteTexture(a)},dispose:function(){delete this.canvas;delete this.gl}};bigshot.VRRenderer=function(){};bigshot.VRRenderer.prototype={createTileCache:function(c,a,b){},createTexturedQuadScene:function(){},createTexturedQuad:function(d,b,a,c){},getViewportWidth:function(){},getViewportHeight:function(){},transformToWorld:function(a){},transformWorldToScreen:function(a){},transformToScreen:function(a){},dispose:function(){},beginRender:function(b,a,d,c){},endRender:function(){},onresize:function(){},resize:function(a,b){},getElement:function(){}};bigshot.AbstractVRRenderer=function(){};bigshot.AbstractVRRenderer.prototype={transformToWorld:function transformToWorld(a){var b=this.mvMatrix.matrix().xPoint3Dhom1(a);return b},transformWorldToScreen:function transformWorldToScreen(d){if(d.z>0){return null}var a=this.pMatrix.matrix().xPoint3Dhom(d);if(Math.abs(a.w)<Sylvester.precision){return null}var i=a.x;var f=a.y;var e=a.z;var c=this.getViewportWidth();var g=this.getViewportHeight();var b={x:(c/2)*i/e+c/2,y:-(g/2)*f/e+g/2};return b},transformToScreen:function transformToScreen(a){var d=this.mvpMatrix.xPoint3Dhom(a);if(d.z<0){return null}var e=d.w;if(Math.abs(d.w)<Sylvester.precision){return null}var i=d.x;var f=d.y;var c=this.getViewportWidth();var g=this.getViewportHeight();var b={x:(c/2)*i/e+c/2,y:-(g/2)*f/e+g/2};return b}};bigshot.CSS3DVRRenderer=function(a){this.container=a;this.canvasOrigin=document.createElement("div");this.canvasOrigin.style.WebkitTransformOrigin="0px 0px 0px";this.canvasOrigin.style.WebkitTransformStyle="preserve-3d";this.canvasOrigin.style.WebkitPerspective="600px";this.canvasOrigin.style.position="relative";this.canvasOrigin.style.left="50%";this.canvasOrigin.style.top="50%";this.container.appendChild(this.canvasOrigin);this.viewport=document.createElement("div");this.viewport.style.WebkitTransformOrigin="0px 0px 0px";this.viewport.style.WebkitTransformStyle="preserve-3d";this.canvasOrigin.appendChild(this.viewport);this.world=document.createElement("div");this.world.style.WebkitTransformOrigin="0px 0px 0px";this.world.style.WebkitTransformStyle="preserve-3d";this.viewport.appendChild(this.world);this.browser.removeAllChildren(this.world);this.view=null;this.mvMatrix=new bigshot.TransformStack();this.yaw=0;this.pitch=0;this.fov=0;this.pMatrix=new bigshot.TransformStack();this.onresize=function(){};this.viewportSize=null};bigshot.CSS3DVRRenderer.prototype={browser:new bigshot.Browser(),dispose:function(){},createTileCache:function(c,a,b){return new bigshot.ImageVRTileCache(c,a,b)},createTexturedQuadScene:function(){return new bigshot.CSS3DTexturedQuadScene(this.world,128,this.view)},createTexturedQuad:function(d,b,a,c){return new bigshot.CSS3DTexturedQuad(d,b,a,c)},getElement:function(){return this.container},supportsUpdate:function(){return false},getViewportWidth:function(){if(this.viewportSize){return this.viewportSize.w}return this.browser.getElementSize(this.container).w},getViewportHeight:function(){if(this.viewportSize){return this.viewportSize.h}return this.browser.getElementSize(this.container).h},onresize:function(){},resize:function(a,b){if(this.container.style.width!=""){this.container.style.width=a+"px"}if(this.container.style.height!=""){this.container.style.height=b+"px"}},beginRender:function(e,c,j,g){this.viewportSize=this.browser.getElementSize(this.container);this.yaw=e.y;this.pitch=e.p;this.fov=c;var b=0.5*c*Math.PI/180;var a=this.getViewportHeight()/2;var f=a/Math.tan(b);this.mvMatrix.reset();this.view=j;this.mvMatrix.translate(this.view);this.mvMatrix.rotateZ(g.r);this.mvMatrix.rotateX(g.p);this.mvMatrix.rotateY(g.y);this.mvMatrix.rotateY(this.yaw);this.mvMatrix.rotateX(this.pitch);this.pMatrix.reset();this.pMatrix.perspective(this.fov,this.getViewportWidth()/this.getViewportHeight(),0.1,100);this.mvpMatrix=this.pMatrix.matrix().multiply(this.mvMatrix.matrix());this.canvasOrigin.style.WebkitPerspective=f+"px";for(var d=this.world.children.length-1;d>=0;--d){this.world.children[d].inWorld=1}this.world.style.WebkitTransform="rotate3d(1,0,0,"+(-e.p)+"deg) rotate3d(0,1,0,"+e.y+"deg) rotate3d(0,1,0,"+(g.y)+"deg) rotate3d(1,0,0,"+(-g.p)+"deg) rotate3d(0,0,1,"+(-g.r)+"deg) ";this.world.style.WebkitTransformStyle="preserve-3d";this.world.style.WebKitBackfaceVisibility="hidden";this.viewport.style.WebkitTransform="translateZ("+f+"px)"},endRender:function(){for(var a=this.world.children.length-1;a>=0;--a){var b=this.world.children[a];if(!b.inWorld||b.inWorld!=2){delete b.inWorld;this.world.removeChild(b)}}this.viewportSize=null}};bigshot.Object.extend(bigshot.CSS3DVRRenderer,bigshot.AbstractVRRenderer);bigshot.Object.validate("bigshot.CSS3DVRRenderer",bigshot.VRRenderer);bigshot.CSS3DTexturedQuad=function(d,b,a,c){this.p=d;this.u=b;this.v=a;this.image=c};bigshot.CSS3DTexturedQuad.prototype={crossProduct:function crossProduct(d,c){return{x:d.y*c.z-d.z*c.y,y:d.z*c.x-d.x*c.z,z:d.x*c.y-d.y*c.x}},vecToStr:function vecToStr(a){return(a.x)+","+(a.y)+","+(a.z)},quadTransform:function quadTransform(c,d,b){var a=this.crossProduct(d,b);var e="matrix3d("+this.vecToStr(d)+",0,"+this.vecToStr(b)+",0,"+this.vecToStr(a)+",0,"+this.vecToStr(c)+",1)";return e},norm:function norm(a){return Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z)},render:function render(e,i,a){var d=i/(this.image.width-1);var g=i*1;var f=this.p;var c=this.u;var b=this.v;this.image.style.position="absolute";if(!this.image.inWorld||this.image.inWorld!=1){e.appendChild(this.image)}this.image.inWorld=2;this.image.style.WebkitTransformOrigin="0px 0px 0px";this.image.style.WebkitTransform=this.quadTransform({x:(f.x+a.x)*g,y:(-f.y+a.y)*g,z:(f.z+a.z)*g},{x:c.x*d,y:-c.y*d,z:c.z*d},{x:b.x*d,y:-b.y*d,z:b.z*d})}};bigshot.CSS3DTexturedQuadScene=function(b,c,a){this.quads=new Array();this.world=b;this.scale=c;this.view=a};bigshot.CSS3DTexturedQuadScene.prototype={addQuad:function(a){this.quads.push(a)},render:function(){for(var a=0;a<this.quads.length;++a){this.quads[a].render(this.world,this.scale,this.view)}}};bigshot.TexturedQuadScene=function(){};bigshot.TexturedQuadScene.prototype={addQuad:function(a){},render:function(){}};bigshot.WebGLVRRenderer=function(a){this.container=a;this.canvas=document.createElement("canvas");this.canvas.width=480;this.canvas.height=480;this.canvas.style.position="absolute";this.container.appendChild(this.canvas);this.webGl=new bigshot.WebGL(this.canvas);this.webGl.initShaders();this.webGl.gl.clearColor(0,0,0,1);this.webGl.gl.blendFunc(this.webGl.gl.ONE,this.webGl.gl.ZERO);this.webGl.gl.enable(this.webGl.gl.BLEND);this.webGl.gl.disable(this.webGl.gl.DEPTH_TEST);this.webGl.gl.clearDepth(1);var b=this;this.buffers=new bigshot.TimedWeakReference(function(){return b.setupBuffers()},function(c){b.disposeBuffers(c)},1000)};bigshot.WebGLVRRenderer.prototype={createTileCache:function(c,a,b){return new bigshot.TextureTileCache(c,a,b,this.webGl)},createTexturedQuadScene:function(){return new bigshot.WebGLTexturedQuadScene(this.webGl,this.buffers)},setupBuffers:function(){var c=this.webGl.gl.createBuffer();var a=this.webGl.gl.createBuffer();this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER,a);var d=[0,0,1,0,1,1,0,1];this.webGl.gl.bufferData(this.webGl.gl.ARRAY_BUFFER,new Float32Array(d),this.webGl.gl.STATIC_DRAW);var b=this.webGl.gl.createBuffer();this.webGl.gl.bindBuffer(this.webGl.gl.ELEMENT_ARRAY_BUFFER,b);var e=[0,2,1,0,3,2];this.webGl.gl.bufferData(this.webGl.gl.ELEMENT_ARRAY_BUFFER,new Uint16Array(e),this.webGl.gl.STATIC_DRAW);this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER,a);this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.textureCoordAttribute,2,this.webGl.gl.FLOAT,false,0,0);this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER,c);this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.vertexPositionAttribute,3,this.webGl.gl.FLOAT,false,0,0);return{vertexPositionBuffer:c,textureCoordBuffer:a,vertexIndexBuffer:b}},dispose:function(){this.buffers.dispose();this.container.removeChild(this.canvas);delete this.canvas;this.webGl.dispose();delete this.webGl},disposeBuffers:function(a){this.webGl.gl.deleteBuffer(a.vertexPositionBuffer);this.webGl.gl.deleteBuffer(a.vertexIndexBuffer);this.webGl.gl.deleteBuffer(a.textureCoordBuffer)},getElement:function(){return this.canvas},supportsUpdate:function(){return false},createTexturedQuad:function(d,b,a,c){return new bigshot.WebGLTexturedQuad(d,b,a,c)},getViewportWidth:function(){return this.webGl.gl.viewportWidth},getViewportHeight:function(){return this.webGl.gl.viewportHeight},beginRender:function(b,a,d,c){this.webGl.gl.viewport(0,0,this.webGl.gl.viewportWidth,this.webGl.gl.viewportHeight);this.webGl.pMatrix.reset();this.webGl.pMatrix.perspective(a,this.webGl.gl.viewportWidth/this.webGl.gl.viewportHeight,0.1,100);this.webGl.mvMatrix.reset();this.webGl.mvMatrix.translate(d);this.webGl.mvMatrix.rotateZ(c.r);this.webGl.mvMatrix.rotateX(c.p);this.webGl.mvMatrix.rotateY(c.y);this.webGl.mvMatrix.rotateY(b.y);this.webGl.mvMatrix.rotateX(b.p);this.mvMatrix=this.webGl.mvMatrix;this.pMatrix=this.webGl.pMatrix;this.mvpMatrix=this.pMatrix.matrix().multiply(this.mvMatrix.matrix())},endRender:function(){},resize:function(a,b){this.canvas.width=a;this.canvas.height=b;if(this.container.style.width!=""){this.container.style.width=a+"px"}if(this.container.style.height!=""){this.container.style.height=b+"px"}},onresize:function(){this.webGl.onresize()}};bigshot.Object.extend(bigshot.WebGLVRRenderer,bigshot.AbstractVRRenderer);bigshot.Object.validate("bigshot.WebGLVRRenderer",bigshot.VRRenderer);bigshot.TexturedQuad=function(){};bigshot.WebGLTexturedQuad=function(d,b,a,c){this.p=d;this.u=b;this.v=a;this.texture=c};bigshot.WebGLTexturedQuad.prototype={render:function(e,d,a,c){e.gl.bindBuffer(e.gl.ARRAY_BUFFER,d);var b=[this.p.x,this.p.y,this.p.z,this.p.x+this.u.x,this.p.y+this.u.y,this.p.z+this.u.z,this.p.x+this.u.x+this.v.x,this.p.y+this.u.y+this.v.y,this.p.z+this.u.z+this.v.z,this.p.x+this.v.x,this.p.y+this.v.y,this.p.z+this.v.z];e.gl.bufferData(e.gl.ARRAY_BUFFER,new Float32Array(b),e.gl.STATIC_DRAW);e.gl.activeTexture(e.gl.TEXTURE0);e.gl.bindTexture(e.gl.TEXTURE_2D,this.texture);e.gl.uniform1i(e.shaderProgram.samplerUniform,0);e.gl.bindBuffer(e.gl.ELEMENT_ARRAY_BUFFER,c);e.gl.drawElements(e.gl.TRIANGLES,6,e.gl.UNSIGNED_SHORT,0);e.gl.bindTexture(e.gl.TEXTURE_2D,null)}};bigshot.WebGLTexturedQuadScene=function(b,a){this.quads=new Array();this.webGl=b;this.buffers=a};bigshot.WebGLTexturedQuadScene.prototype={addQuad:function(a){this.quads.push(a)},render:function(){var a=this.buffers.get();var f=a.vertexPositionBuffer;var c=a.textureCoordBuffer;var e=a.vertexIndexBuffer;this.webGl.setMatrixUniforms();for(var d=0;d<this.quads.length;++d){this.quads[d].render(this.webGl,f,c,e)}}};bigshot.VRPanoramaParameters=function(b){this.posterSize=0;this.emptyImage=null;this.suffix=null;this.width=0;this.height=0;this.container=null;this.maxTesselation=-1;this.tileSize=0;this.overlap=0;this.basePath=null;this.fileSystemType="folder";this.fileSystem=null;this.dataLoader=new bigshot.DefaultDataLoader();this.maxTextureMagnification=1;this.textureMagFilter=null;this.textureMinFilter=null;this.minFov=2;this.maxFov=90;this.minPitch=-90;this.maxPitch=90;this.minYaw=-360;this.maxYaw=720;this.yawOffset=0;this.pitchOffset=0;this.rollOffset=0;this.onload=null;this.renderer=null;this.fling=true;this.flingScale=0.004;if(b){for(var a in b){this[a]=b[a]}}this.merge=function(d,e){for(var c in d){if(e||!this[c]){this[c]=d[c]}}};return this};bigshot.VRPanorama=function(d){bigshot.EventDispatcher.call(this);var c=this;this.parameters=d;this.maxTextureMagnification=d.maxTextureMagnification;this.container=d.container;this.browser=new bigshot.Browser();this.dragStart=null;this.dragDistance=0;this.hotspots=[];this.disposed=false;this.transformOffsets={y:d.yawOffset,p:d.pitchOffset,r:d.rollOffset};this.state={rotation:{p:0,y:0,r:0},fov:45,translation:{x:0,y:0,z:0}};this.renderer=null;if(this.parameters.renderer){if(this.parameters.renderer=="css"){this.renderer=new bigshot.CSS3DVRRenderer(this.container)}else{if(this.parameters.renderer=="webgl"){this.renderer=new bigshot.WebGLVRRenderer(this.container)}else{throw new Error("Unknown renderer: "+this.parameters.renderer)}}}else{this.renderer=bigshot.WebGLUtil.isWebGLSupported()?new bigshot.WebGLVRRenderer(this.container):new bigshot.CSS3DVRRenderer(this.container)}this.renderListeners=new Array();this.renderables=new Array();this.idleCounter=0;this.maxIdleCounter=-1;this.smoothrotatePermit=0;var f=function(g){if(g.preventDefault){g.preventDefault()}return false};this.fullScreenHandler=null;this.renderAsapPermitTaken=false;this.sizeContainer=null;var a={facesLeft:6,faceLoaded:function(){this.facesLeft--;if(this.facesLeft==0){if(c.parameters.onload){c.parameters.onload()}}}};var b=function(){a.faceLoaded()};this.vrFaces=new Array();this.vrFaces[0]=new bigshot.VRFace(this,"f",{x:-1,y:1,z:-1},2,{x:1,y:0,z:0},{x:0,y:-1,z:0},b);this.vrFaces[1]=new bigshot.VRFace(this,"b",{x:1,y:1,z:1},2,{x:-1,y:0,z:0},{x:0,y:-1,z:0},b);this.vrFaces[2]=new bigshot.VRFace(this,"l",{x:-1,y:1,z:1},2,{x:0,y:0,z:-1},{x:0,y:-1,z:0},b);this.vrFaces[3]=new bigshot.VRFace(this,"r",{x:1,y:1,z:-1},2,{x:0,y:0,z:1},{x:0,y:-1,z:0},b);this.vrFaces[4]=new bigshot.VRFace(this,"u",{x:-1,y:1,z:1},2,{x:1,y:0,z:0},{x:0,y:0,z:-1},b);this.vrFaces[5]=new bigshot.VRFace(this,"d",{x:-1,y:-1,z:-1},2,{x:1,y:0,z:0},{x:0,y:0,z:1},b);var e=function(g){if(g.clientX){return g}else{return{clientX:g.changedTouches[0].clientX,clientY:g.changedTouches[0].clientY}}};this.lastTouchStartAt=-1;this.allListeners={mousedown:function(g){c.smoothRotate();c.resetIdle();c.dragMouseDown(g);return f(g)},mouseup:function(g){c.resetIdle();c.dragMouseUp(g);return f(g)},mousemove:function(g){c.resetIdle();c.dragMouseMove(g);return f(g)},gesturestart:function(g){c.gestureStart(g);return f(g)},gesturechange:function(g){c.gestureChange(g);return f(g)},gestureend:function(g){c.gestureEnd(g);return f(g)},DOMMouseScroll:function(g){c.resetIdle();c.mouseWheel(g);return f(g)},mousewheel:function(g){c.resetIdle();c.mouseWheel(g);return f(g)},dblclick:function(g){c.mouseDoubleClick(g);return f(g)},touchstart:function(g){c.smoothRotate();c.lastTouchStartAt=new Date().getTime();c.resetIdle();c.dragMouseDown(e(g));return f(g)},touchend:function(i){c.resetIdle();var g=c.dragMouseUp(e(i));if(!g&&(c.lastTouchStartAt>new Date().getTime()-350)){c.mouseDoubleClick(e(i))}c.lastTouchStartAt=-1;return f(i)},touchmove:function(g){if(c.dragDistance>24){c.lastTouchStartAt=-1}c.resetIdle();c.dragMouseMove(e(g));return f(g)}};this.addEventListeners();this.onresizeHandler=function(g){c.onresize()};this.browser.registerListener(window,"resize",this.onresizeHandler,false);this.browser.registerListener(document.body,"orientationchange",this.onresizeHandler,false);this.setPitch(0);this.setYaw(0);this.setFov(45)};bigshot.VRPanorama.DRAG_GRAB="grab";bigshot.VRPanorama.DRAG_PAN="pan";bigshot.VRPanorama.ONRENDER_BEGIN=0;bigshot.VRPanorama.ONRENDER_END=1;bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE=0;bigshot.VRPanorama.prototype={addHotspot:function(a){this.hotspots.push(a)},getParameters:function(){return this.parameters},setTranslation:function(a,c,b){this.state.translation.x=a;this.state.translation.y=c;this.state.translation.z=b},getTranslation:function(){return this.state.translation},setFov:function(a){a=Math.min(this.parameters.maxFov,a);a=Math.max(this.parameters.minFov,a);this.state.fov=a},getFov:function(){return this.state.fov},screenToPolar:function(g,e){var c=this.screenToRayDelta(g,e);var f=$V([c.x,c.y,c.z,1]);f=Matrix.RotationX(this.getPitch()*Math.PI/180).ensure4x4().x(f);f=Matrix.RotationY(-this.getYaw()*Math.PI/180).ensure4x4().x(f);var l=f.e(1);var k=f.e(2);var j=f.e(3);var d=Math.sqrt(l*l+j*j);var a=Math.atan2(l,-j)*180/Math.PI;var i=Math.atan2(k,d)*180/Math.PI;var b={};b.yaw=(a+360)%360;b.pitch=i;return b},snapPitch:function(a){a=Math.min(this.parameters.maxPitch,a);a=Math.max(this.parameters.minPitch,a);return a},setPitch:function(a){this.state.rotation.p=this.snapPitch(a)},circleDistance:function(d,c){if(c>d){var b=(c-d);var a=((c-360)-d);return Math.abs(b)<Math.abs(a)?b:a}else{var b=(c-d);var a=(360-d)+c;return Math.abs(b)<Math.abs(a)?b:a}},circleSnapTo:function(d,e,c){var b=this.circleDistance(d,e);var a=this.circleDistance(d,c);return Math.abs(b)<Math.abs(a)?e:c},snapYaw:function(a){a%=360;if(a<0){a+=360}if(this.parameters.minYaw<this.parameters.maxYaw){if(a>this.parameters.maxYaw||a<this.parameters.minYaw){a=circleSnapTo(a,this.parameters.minYaw,this.parameters.maxYaw)}}else{if(a>this.parameters.minYaw){}else{if(a>this.parameters.maxYaw){a=circleSnapTo(a,this.parameters.minYaw,this.parameters.maxYaw)}else{}}}return a},setYaw:function(a){this.state.rotation.y=this.snapYaw(a)},getYaw:function(){return this.state.rotation.y},getPitch:function(){return this.state.rotation.p},dispose:function(){this.disposed=true;this.browser.unregisterListener(window,"resize",this.onresizeHandler,false);this.browser.unregisterListener(document.body,"orientationchange",this.onresizeHandler,false);this.removeEventListeners();for(var a=0;a<this.vrFaces.length;++a){this.vrFaces[a].dispose()}this.renderer.dispose()},createVREventData:function(b){var a=this.browser.getElementPosition(this.container);b.localX=b.clientX-a.x;b.localY=b.clientY-a.y;b.ray=this.screenToRay(b.localX,b.localY);var c=this.screenToPolar(b.localX,b.localY);b.yaw=c.yaw;b.pitch=c.pitch;b.target=this;b.currentTarget=this;return new bigshot.VREvent(b)},beginRender:function(b,a){this.onrender(bigshot.VRPanorama.ONRENDER_BEGIN,b,a);this.renderer.beginRender(this.state.rotation,this.state.fov,this.state.translation,this.transformOffsets)},addRenderListener:function(a){var b=new Array();b=b.concat(this.renderListeners);b.push(a);this.renderListeners=b},removeRenderListener:function(b){var c=new Array();c=c.concat(this.renderListeners);for(var a=0;a<c.length;++a){if(c[a]===b){c.splice(a,1);break}}this.renderListeners=c},onrender:function(d,c,b){var e=this.renderListeners;for(var a=0;a<e.length;++a){e[a](d,c,b)}},endRender:function(c,b){for(var a in this.vrFaces){this.vrFaces[a].endRender()}this.renderer.endRender();this.onrender(bigshot.VRPanorama.ONRENDER_END,c,b)},addRenderable:function(a){var b=new Array();b.concat(this.renderables);b.push(a);this.renderables=b},removeRenderable:function(b){var c=new Array();c.concat(this.renderables);for(var a=0;a<c.length;++a){if(c[a]==listener){c.splice(a,1);break}}this.renderables=c},render:function(d,c){if(!this.disposed){this.beginRender(d,c);var e=this.renderer.createTexturedQuadScene();for(var b in this.vrFaces){this.vrFaces[b].render(e)}for(var a=0;a<this.renderables.length;++a){this.renderables[a](this.renderer,e)}e.render();for(var a=0;a<this.hotspots.length;++a){this.hotspots[a].layout()}this.endRender(d,c)}},renderUpdated:function(d,c){if(!this.disposed&&this.renderer.supportsUpdate()){this.beginRender(d,c);var e=this.renderer.createTexturedQuadScene();for(var b in this.vrFaces){if(this.vrFaces[b].isUpdated()){this.vrFaces[b].render(e)}}e.render();for(var a=0;a<this.hotspots.length;++a){this.hotspots[a].layout()}this.endRender(d,c)}else{this.render(d,c)}},dragMode:bigshot.VRPanorama.DRAG_GRAB,setDragMode:function(a){this.dragMode=a},addEventListeners:function(){for(var a in this.allListeners){this.browser.registerListener(this.container,a,this.allListeners[a],false)}},removeEventListeners:function(){for(var a in this.allListeners){this.browser.unregisterListener(this.container,a,this.allListeners[a],false)}},dragMouseDown:function(a){this.dragStart={clientX:a.clientX,clientY:a.clientY};this.dragLast={clientX:a.clientX,clientY:a.clientY,dx:0,dy:0,dt:1000000,time:new Date().getTime()};this.dragDistance=0},dragMouseUp:function(i){if(this.dragStart==null||this.dragLast==null){this.dragStart=null;this.dragLast=null;return}this.dragStart=null;var l=this.dragLast.dx;var k=this.dragLast.dy;var d=Math.sqrt(l*l+k*k);var c=this.dragLast.dt;var b=new Date().getTime()-this.dragLast.time;this.dragLast=null;var j=c>0?(d/c):0;if(j>0.05&&b<250&&c>20&&this.parameters.fling){var f=this.state.fov/this.renderer.getViewportHeight();var g=new Date().getTime();var a=this.parameters.flingScale;l/=c;k/=c;this.smoothRotate(function(n){var m=new Date().getTime()-g;var e=Math.pow(2,-m*a);var o=(l*n*f)*e;return e>0.01?o:null},function(n){var m=new Date().getTime()-g;var e=Math.pow(2,-m*a);var o=(k*n*f)*e;return e>0.01?o:null},function(){return null});return true}else{this.smoothRotate();return false}},dragMouseMove:function(d){if(this.dragStart!=null&&this.currentGesture==null){if(this.dragMode==bigshot.VRPanorama.DRAG_GRAB){this.smoothRotate();var f=this.state.fov/this.renderer.getViewportHeight();var b=d.clientX-this.dragStart.clientX;var a=d.clientY-this.dragStart.clientY;this.dragDistance+=b+a;this.setYaw(this.getYaw()-b*f);this.setPitch(this.getPitch()-a*f);this.renderAsap();this.dragStart=d;var c=new Date().getTime()-this.dragLast.time;if(c>20){this.dragLast={dx:this.dragLast.clientX-d.clientX,dy:this.dragLast.clientY-d.clientY,dt:c,clientX:d.clientX,clientY:d.clientY,time:new Date().getTime()}}}else{var f=0.1*this.state.fov/this.renderer.getViewportHeight();var b=d.clientX-this.dragStart.clientX;var a=d.clientY-this.dragStart.clientY;this.dragDistance=b+a;this.smoothRotate(function(){return b*f},function(){return a*f})}}},onMouseDoubleClick:function(c,a,d){var b=this.createVREventData({type:"dblclick",clientX:c.clientX,clientY:c.clientY});this.fireEvent("dblclick",b);if(!b.defaultPrevented){this.smoothRotateToXY(a,d)}},mouseDoubleClick:function(a){var b=this.browser.getElementPosition(this.container);this.onMouseDoubleClick(a,a.clientX-b.x,a.clientY-b.y)},gestureStart:function(a){this.currentGesture={startFov:this.getFov(),scale:a.scale}},gestureEnd:function(a){this.currentGesture=null},gestureChange:function(a){if(this.currentGesture){var b=this.currentGesture.startFov/a.scale;this.setFov(b);this.renderAsap()}},setMaxTextureMagnification:function(a){this.maxTextureMagnification=a},getMaxTextureMagnification:function(){return this.maxTextureMagnification},getMinFovFromViewportAndImage:function(){var a=this.renderer.getViewportHeight()/2;var f=this.vrFaces[0].parameters.height;for(var c in this.vrFaces){f=Math.min(f,this.vrFaces[c].parameters.height)}var b=this.maxTextureMagnification*f/2;var d=a/b;var e=Math.atan(d)*180/Math.PI;return e*2},screenToRay:function(a,d){var c=this.screenToRayDelta(a,d);var b=this.renderer.transformToWorld(c);b=Matrix.RotationY(-this.transformOffsets.y*Math.PI/180).ensure4x4().xPoint3Dhom1(b);b=Matrix.RotationX(-this.transformOffsets.p*Math.PI/180).ensure4x4().xPoint3Dhom1(b);b=Matrix.RotationZ(-this.transformOffsets.r*Math.PI/180).ensure4x4().xPoint3Dhom1(b);return b},screenToRayDelta:function(j,i){var g=this.renderer.getViewportHeight()/2;var d=this.renderer.getViewportWidth()/2;var j=(j-d);var i=(i-g);var e=Math.tan((this.state.fov/2)*Math.PI/180);var f=e*this.renderer.getViewportWidth()/this.renderer.getViewportHeight();var c=j*f/d;var b=i*e/g;var a=-1;return{x:c,y:b,z:a}},smoothRotateToXY:function(a,c){var b=this.screenToPolar(a,c);this.smoothRotateTo(this.snapYaw(b.yaw),this.snapPitch(b.pitch),this.getFov(),this.state.fov/200)},ease:function(f,e,c,a){var b=c*40;if(!a){a=c/5}var d=c/1000;var g=f-e;if(g>b){g=-c}else{if(g<-b){g=c}else{if(Math.abs(g)<a){g=-g}else{if(Math.abs(g)<d){g=0}else{g=-(c*g)/(b)}}}}return g},resetIdle:function(){this.idleCounter=0},idleTick:function(){if(this.maxIdleCounter<0){return}++this.idleCounter;if(this.idleCounter==this.maxIdleCounter){this.autoRotate()}var a=this;setTimeout(function(){a.idleTick()},1000)},autoRotateWhenIdle:function(a){this.maxIdleCounter=a;this.idleCounter=0;if(a<0){return}else{if(this.maxIdleCounter>0){var b=this;setTimeout(function(){b.idleTick()},1000)}}},autoRotate:function(){var b=this;var d=this.state.fov/400;var c=d;var a=c;this.smoothRotate(function(){var e=b.getYaw()+a;if(b.parameters.minYaw<b.parameters.maxYaw){if(e>b.parameters.maxYaw||e<b.parameters.minYaw){a=-a}}else{if(e>b.parameters.minYaw){}else{if(e>b.parameters.maxYaw){a=-a}else{}}}return a},function(){return b.ease(b.getPitch(),0,c)},function(){return b.ease(b.getFov(),45,0.1)})},smoothRotateTo:function(e,d,a,c){var b=this;this.smoothRotate(function(){var g=b.circleDistance(e,b.getYaw());var f=-b.ease(0,g,c);return Math.abs(f)>0.01?f:null},function(){var f=b.ease(b.getPitch(),d,c);return Math.abs(f)>0.01?f:null},function(){var f=b.ease(b.getFov(),a,c);return Math.abs(f)>0.01?f:null})},smoothRotate:function(c,g,f){++this.smoothrotatePermit;var d=this.smoothrotatePermit;if(!g&&!c&&!f){return}var e=this;var b={dy:c,dp:g,df:f,t:new Date().getTime()};var a=function(){if(e.smoothrotatePermit==d){var i=new Date().getTime();var k=i-b.t;b.t=i;var j=false;if(b.dy){var l=b.dy(k);if(l!=null){j=true;e.setYaw(e.getYaw()+l)}else{b.dy=null}}if(b.dp){var l=b.dp(k);if(l!=null){j=true;e.setPitch(e.getPitch()+l)}else{b.dp=null}}if(b.df){var l=b.df(k);if(l!=null){j=true;e.setFov(e.getFov()+l)}else{b.df=null}}e.render();if(j){e.browser.requestAnimationFrame(a,e.renderer.getElement())}}};a()},mouseWheel:function(a){var b=0;if(!a){a=window.event}if(a.wheelDelta){b=a.wheelDelta/120;if(window.opera){b=-b}}else{if(a.detail){b=-a.detail}}if(b){this.mouseWheelHandler(b)}if(a.preventDefault){a.preventDefault()}a.returnValue=false},mouseWheelHandler:function(c){var a=this;var b=null;if(c>0){if(this.getFov()>this.parameters.minFov){b=this.getFov()*0.9}}if(c<0){if(this.getFov()<this.parameters.maxFov){b=this.getFov()/0.9}}if(b!=null){this.smoothRotate(null,null,function(){var d=(b-a.getFov())/1.5;return Math.abs(d)>0.01?d:null})}},fullScreen:function(a){if(this.fullScreenHandler){return}var d=document.createElement("div");d.style.position="absolute";d.style.fontSize="16pt";d.style.top="128px";d.style.width="100%";d.style.color="white";d.style.padding="16px";d.style.zIndex="9999";d.style.textAlign="center";d.style.opacity="0.75";d.innerHTML="<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";var c=this;this.fullScreenHandler=new bigshot.FullScreen(this.container);this.fullScreenHandler.restoreSize=this.sizeContainer==null;this.fullScreenHandler.addOnResize(function(){c.onresize()});this.fullScreenHandler.addOnClose(function(){if(d.parentNode){try{div.removeChild(d)}catch(e){}}c.fullScreenHandler=null});if(a){this.fullScreenHandler.addOnClose(function(){a()})}this.removeEventListeners();this.fullScreenHandler.open();this.addEventListeners();var b=function(){c.render()};setTimeout(b,1000);setTimeout(b,2000);setTimeout(b,3000);if(this.fullScreenHandler.getRootElement()){this.fullScreenHandler.getRootElement().appendChild(d);setTimeout(function(){var f=0.75;var e=function(){f-=0.02;if(d.parentNode){if(f<=0){d.style.display="none";try{div.removeChild(d)}catch(g){}}else{d.style.opacity=f;setTimeout(e,20)}}};setTimeout(e,20)},3500)}return function(){c.removeEventListeners();c.fullScreenHandler.close();c.addEventListeners()}},onresize:function(){if(this.fullScreenHandler==null||!this.fullScreenHandler.isFullScreen){if(this.sizeContainer){var a=this.browser.getElementSize(this.sizeContainer);this.renderer.resize(a.w,a.h)}}else{this.container.style.width=window.innerWidth+"px";this.container.style.height=window.innerHeight+"px";var a=this.browser.getElementSize(this.container);this.renderer.resize(a.w,a.h)}this.renderer.onresize();this.renderAsap()},renderAsap:function(){if(!this.renderAsapPermitTaken&&!this.disposed){this.renderAsapPermitTaken=true;var a=this;this.browser.requestAnimationFrame(function(){a.renderAsapPermitTaken=false;a.render()},this.renderer.getElement())}},autoResizeContainer:function(a){this.sizeContainer=a}};bigshot.Object.extend(bigshot.VRPanorama,bigshot.EventDispatcher);bigshot.VRHotspot=function(a){this.panorama=a;this.clippingStrategy=bigshot.VRHotspot.CLIP_ADJUST(a)};bigshot.VRHotspot.CLIP_FRACTION=function(b,a){return function(f){var g={x0:Math.max(f.x,0),y0:Math.max(f.y,0),x1:Math.min(f.x+f.w,b.renderer.getViewportWidth()),y1:Math.min(f.y+f.h,b.renderer.getViewportHeight())};var e=f.w*f.h;var d=(g.x1-g.x0);var c=(g.y1-g.y0);if(d>0&&c>0){var i=d*c;return(i/e)>=a}else{return false}}};bigshot.VRHotspot.CLIP_CENTER=function(a){return function(b){var d={x:b.x+b.w/2,y:b.y+b.h/2};return d.x>=0&&d.x<a.renderer.getViewportWidth()&&d.y>=0&&d.y<a.renderer.getViewportHeight()}};bigshot.VRHotspot.CLIP_ADJUST=function(a){return function(b){if(b.x<0){b.w-=-b.x;b.x=0}if(b.y<0){b.h-=-b.y;b.y=0}if(b.x+b.w>a.renderer.getViewportWidth()){b.w=a.renderer.getViewportWidth()-b.x-1}if(b.y+b.h>a.renderer.getViewportHeight()){b.h=a.renderer.getViewportHeight()-b.y-1}return b.w>0&&b.h>0}};bigshot.VRHotspot.CLIP_ZOOM=function(a,c,b){return function(d){if(d.x>=0&&d.y>=0&&(d.x+c.w)<a.renderer.getViewportWidth()&&(d.y+c.h)<a.renderer.getViewportHeight()){d.w=c.w;d.h=c.h;return true}var f=0;if(d.x<0){f=Math.max(-d.x,f)}if(d.y<0){f=Math.max(-d.y,f)}if(d.x+c.w>a.renderer.getViewportWidth()){f=Math.max(d.x+c.w-a.renderer.getViewportWidth(),f)}if(d.y+c.h>a.renderer.getViewportHeight()){f=Math.max(d.y+c.h-a.renderer.getViewportHeight(),f)}f/=a.renderer.getViewportHeight();if(f>b){return false}var e=1/(1+f);d.w=c.w*e;d.h=c.w*e;if(d.x<0){d.x=0}if(d.y<0){d.y=0}if(d.x+d.w>a.renderer.getViewportWidth()){d.x=a.renderer.getViewportWidth()-d.w}if(d.y+d.h>a.renderer.getViewportHeight()){d.y=a.renderer.getViewportHeight()-d.h}return true}};bigshot.VRHotspot.CLIP_FADE=function(a,b){return function(c){var d=Math.min(c.x,c.y,a.renderer.getViewportWidth()-(c.x+c.w),a.renderer.getViewportHeight()-(c.y+c.h));if(d<=0){return false}else{if(d<=b){c.opacity=(d/b);return true}else{c.opacity=1;return true}}}};bigshot.VRHotspot.prototype={layout:function(){},rotate:function(d,c,b){var e=d*Math.PI/180;var a=Matrix.Rotation(e,$V([c.x,c.y,c.z])).ensure4x4();return a.xPoint3Dhom1(b)},toVector:function(c,b){var a={x:0,y:0,z:-1};a=this.rotate(-b,{x:1,y:0,z:0},a);a=this.rotate(-c,{x:0,y:1,z:0},a);return a},toScreen:function(b){var a=this.panorama.renderer.transformToScreen(b);return a},clip:function(a){return this.clippingStrategy(a)}};bigshot.VRPointHotspot=function(c,e,d,b,a,f){bigshot.VRHotspot.call(this,c);this.element=b;this.offsetX=a;this.offsetY=f;this.point=this.toVector(e,d)};bigshot.VRPointHotspot.prototype={layout:function(){var b=this.toScreen(this.point);var c=false;if(b!=null){var a=this.panorama.browser.getElementSize(this.element);b.w=a.w;b.h=a.h;b.x+=this.offsetX;b.y+=this.offsetY;if(this.clip(b)){this.element.style.top=(b.y)+"px";this.element.style.left=(b.x)+"px";this.element.style.width=(b.w)+"px";this.element.style.height=(b.h)+"px";if(b.opacity){this.element.style.opacity=b.opacity}this.element.style.visibility="inherit";c=true}}if(!c){this.element.style.visibility="hidden"}}};bigshot.Object.extend(bigshot.VRPointHotspot,bigshot.VRHotspot);bigshot.Object.validate("bigshot.VRPointHotspot",bigshot.VRHotspot);bigshot.VRRectangleHotspot=function(d,f,b,e,a,c){bigshot.VRHotspot.call(this,d);this.element=c;this.point0=this.toVector(f,b);this.point1=this.toVector(e,a)};bigshot.VRRectangleHotspot.prototype={layout:function(){var a=this.toScreen(this.point0);var d=this.toScreen(this.point1);var c=false;if(a!=null&&d!=null){var b={x:a.x,y:a.y,opacity:1,w:d.x-a.x,h:d.y-a.y};if(this.clip(b)){this.element.style.top=(b.y)+"px";this.element.style.left=(b.x)+"px";this.element.style.width=(b.w)+"px";this.element.style.height=(b.h)+"px";this.element.style.visibility="inherit";c=true}}if(!c){this.element.style.visibility="hidden"}}};bigshot.Object.extend(bigshot.VRRectangleHotspot,bigshot.VRHotspot);bigshot.Object.validate("bigshot.VRRectangleHotspot",bigshot.VRHotspot);bigshot.AdaptiveLODMonitorParameters=function(b){this.vrPanorama=null;this.targetFps=30;this.tolerance=0.3;this.rate=0.1;this.minMag=1.5;this.maxMag=16;this.hqRenderMag=1.5;this.hqRenderDelay=2000;this.hqRenderInterval=1000;if(b){for(var a in b){this[a]=b[a]}}this.merge=function(d,e){for(var c in d){if(e||!this[c]){this[c]=d[c]}}};return this};bigshot.AdaptiveLODMonitor=function(b){this.setParameters(b);this.currentAdaptiveMagnification=b.vrPanorama.getMaxTextureMagnification();this.frames=0;this.samples=0;this.renderTimeTotal=0;this.renderTimeLast=0;this.samplesLast=0;this.startTime=0;this.lastRender=0;this.hqRender=false;this.hqMode=false;this.hqRenderWaiting=false;this.enabled=true;var a=this;this.listenerFunction=function(e,d,c){a.listener(e,d,c)}};bigshot.AdaptiveLODMonitor.prototype={averageRenderTime:function(){if(this.samples>0){return this.renderTimeTotal/this.samples}else{return -1}},setParameters:function(a){this.parameters=a;this.targetTime=1000/this.parameters.targetFps;this.lowerTime=this.targetTime/(1+this.parameters.tolerance);this.upperTime=this.targetTime*(1+this.parameters.tolerance)},setEnabled:function(a){this.enabled=a},averageRenderTimeLast:function(){if(this.samples>0){return this.renderTimeLast/this.samplesLast}else{return -1}},getListener:function(){return this.listenerFunction},increaseDetail:function(){this.currentAdaptiveMagnification=Math.max(this.parameters.minMag,this.currentAdaptiveMagnification/(1+this.parameters.rate))},decreaseDetail:function(){this.currentAdaptiveMagnification=Math.min(this.parameters.maxMag,this.currentAdaptiveMagnification*(1+this.parameters.rate))},sample:function(){var b=new Date().getTime()-this.startTime;this.samples++;this.renderTimeTotal+=b;this.samplesLast++;this.renderTimeLast+=b;if(this.samplesLast>4){var a=this.renderTimeLast/this.samplesLast;if(a<this.lowerTime){this.increaseDetail()}else{if(a>this.upperTime){this.decreaseDetail()}}this.samplesLast=0;this.renderTimeLast=0}},hqRenderTick:function(){if(this.lastRender<new Date().getTime()-this.parameters.hqRenderDelay){this.hqRender=true;this.hqMode=true;if(this.enabled){this.parameters.vrPanorama.setMaxTextureMagnification(this.parameters.hqRenderMag);this.parameters.vrPanorama.render()}this.hqRender=false;this.hqRenderWaiting=false}else{var a=this;setTimeout(function(){a.hqRenderTick()},this.parameters.hqRenderInterval)}},listener:function(d,c,b){if(!this.enabled){return}if(this.hqRender){return}if(this.hqMode&&c==bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE){this.parameters.vrPanorama.setMaxTextureMagnification(this.parameters.minMag);return}else{this.hqMode=false}this.parameters.vrPanorama.setMaxTextureMagnification(this.currentAdaptiveMagnification);this.frames++;if((this.frames<20||this.frames%5==0)&&d==bigshot.VRPanorama.ONRENDER_BEGIN){this.startTime=new Date().getTime();this.lastRender=this.startTime;var a=this;setTimeout(function(){a.sample()},1);if(!this.hqRenderWaiting){this.hqRenderWaiting=true;setTimeout(function(){a.hqRenderTick()},this.parameters.hqRenderInterval)}}}}}; \ No newline at end of file
diff --git a/js/vendor/bigshot/bigshot-full-and-optional-compressed.js b/js/vendor/bigshot/bigshot-full-and-optional-compressed.js
new file mode 100644
index 00000000..e56c7015
--- /dev/null
+++ b/js/vendor/bigshot/bigshot-full-and-optional-compressed.js
@@ -0,0 +1 @@
+var Sylvester={version:"0.1.3",precision:0.000001};function Vector(){}Vector.prototype={e:function(a){return(a<1||a>this.elements.length)?null:this.elements[a-1]},dimensions:function(){return this.elements.length},modulus:function(){return Math.sqrt(this.dot(this))},eql:function(b){var c=this.elements.length;var a=b.elements||b;if(c!=a.length){return false}do{if(Math.abs(this.elements[c-1]-a[c-1])>Sylvester.precision){return false}}while(--c);return true},dup:function(){return Vector.create(this.elements)},map:function(a){var b=[];this.each(function(c,d){b.push(a(c,d))});return Vector.create(b)},each:function(c){var d=this.elements.length,a=d,b;do{b=a-d;c(this.elements[b],b+1)}while(--d)},toUnitVector:function(){var a=this.modulus();if(a===0){return this.dup()}return this.map(function(b){return b/a})},angleFrom:function(d){var e=d.elements||d;var c=this.elements.length,f=c,g;if(c!=e.length){return null}var a=0,m=0,l=0;this.each(function(k,n){a+=k*e[n-1];m+=k*k;l+=e[n-1]*e[n-1]});m=Math.sqrt(m);l=Math.sqrt(l);if(m*l===0){return null}var b=a/(m*l);if(b<-1){b=-1}if(b>1){b=1}return Math.acos(b)},isParallelTo:function(a){var b=this.angleFrom(a);return(b===null)?null:(b<=Sylvester.precision)},isAntiparallelTo:function(a){var b=this.angleFrom(a);return(b===null)?null:(Math.abs(b-Math.PI)<=Sylvester.precision)},isPerpendicularTo:function(a){var b=this.dot(a);return(b===null)?null:(Math.abs(b)<=Sylvester.precision)},add:function(b){var a=b.elements||b;if(this.elements.length!=a.length){return null}return this.map(function(c,d){return c+a[d-1]})},subtract:function(b){var a=b.elements||b;if(this.elements.length!=a.length){return null}return this.map(function(c,d){return c-a[d-1]})},multiply:function(a){return this.map(function(b){return b*a})},x:function(a){return this.multiply(a)},dot:function(b){var a=b.elements||b;var c,d=0,e=this.elements.length;if(e!=a.length){return null}do{d+=this.elements[e-1]*a[e-1]}while(--e);return d},cross:function(b){var c=b.elements||b;if(this.elements.length!=3||c.length!=3){return null}var a=this.elements;return Vector.create([(a[1]*c[2])-(a[2]*c[1]),(a[2]*c[0])-(a[0]*c[2]),(a[0]*c[1])-(a[1]*c[0])])},max:function(){var a=0,d=this.elements.length,b=d,c;do{c=b-d;if(Math.abs(this.elements[c])>Math.abs(a)){a=this.elements[c]}}while(--d);return a},indexOf:function(a){var c=null,e=this.elements.length,b=e,d;do{d=b-e;if(c===null&&this.elements[d]==a){c=d+1}}while(--e);return c},toDiagonalMatrix:function(){return Matrix.Diagonal(this.elements)},round:function(){return this.map(function(a){return Math.round(a)})},snapTo:function(a){return this.map(function(b){return(Math.abs(b-a)<=Sylvester.precision)?a:b})},distanceFrom:function(d){if(d.anchor){return d.distanceFrom(this)}var a=d.elements||d;if(a.length!=this.elements.length){return null}var c=0,b;this.each(function(e,f){b=e-a[f-1];c+=b*b});return Math.sqrt(c)},liesOn:function(a){return a.contains(this)},liesIn:function(a){return a.contains(this)},rotate:function(c,e){var b,d,a,i,g;switch(this.elements.length){case 2:b=e.elements||e;if(b.length!=2){return null}d=Matrix.Rotation(c).elements;a=this.elements[0]-b[0];i=this.elements[1]-b[1];return Vector.create([b[0]+d[0][0]*a+d[0][1]*i,b[1]+d[1][0]*a+d[1][1]*i]);break;case 3:if(!e.direction){return null}var f=e.pointClosestTo(this).elements;d=Matrix.Rotation(c,e.direction).elements;a=this.elements[0]-f[0];i=this.elements[1]-f[1];g=this.elements[2]-f[2];return Vector.create([f[0]+d[0][0]*a+d[0][1]*i+d[0][2]*g,f[1]+d[1][0]*a+d[1][1]*i+d[1][2]*g,f[2]+d[2][0]*a+d[2][1]*i+d[2][2]*g]);break;default:return null}},reflectionIn:function(c){if(c.anchor){var b=this.elements.slice();var d=c.pointClosestTo(b).elements;return Vector.create([d[0]+(d[0]-b[0]),d[1]+(d[1]-b[1]),d[2]+(d[2]-(b[2]||0))])}else{var a=c.elements||c;if(this.elements.length!=a.length){return null}return this.map(function(e,f){return a[f-1]+(a[f-1]-e)})}},to3D:function(){var a=this.dup();switch(a.elements.length){case 3:break;case 2:a.elements.push(0);break;default:return null}return a},inspect:function(){return"["+this.elements.join(", ")+"]"},setElements:function(a){this.elements=(a.elements||a).slice();return this}};Vector.create=function create(b){var a=new Vector();return a.setElements(b)};Vector.createNoCopy=function createNoCopy(b){var a=new Vector();a.elements=b;return a};Vector.i=Vector.createNoCopy([1,0,0]);Vector.j=Vector.createNoCopy([0,1,0]);Vector.k=Vector.createNoCopy([0,0,1]);Vector.Random=function(b){var a=[];do{a.push(Math.random())}while(--b);return Vector.createNoCopy(a)};Vector.Zero=function(b){var a=[];do{a.push(0)}while(--b);return Vector.createNoCopy(a)};function Matrix(){}Matrix.prototype={e:function(b,a){if(b<1||b>this.elements.length||a<1||a>this.elements[0].length){return null}return this.elements[b-1][a-1]},row:function(a){if(a>this.elements.length){return null}return Vector.create(this.elements[a-1])},col:function(c){if(c>this.elements[0].length){return null}var b=[],e=this.elements.length,a=e,d;do{d=a-e;b.push(this.elements[d][c-1])}while(--e);return Vector.create(b)},dimensions:function(){return{rows:this.elements.length,cols:this.elements[0].length}},rows:function(){return this.elements.length},cols:function(){return this.elements[0].length},eql:function(a){var k=a.elements||a;if(typeof(k[0][0])=="undefined"){k=Matrix.create(k).elements}if(this.elements.length!=k.length||this.elements[0].length!=k[0].length){return false}var e=this.elements.length,g=e,d,c,f=this.elements[0].length,b;do{d=g-e;c=f;do{b=f-c;if(Math.abs(this.elements[d][b]-k[d][b])>Sylvester.precision){return false}}while(--c)}while(--e);return true},dup:function(){return Matrix.create(this.elements)},map:function(f){var e=[],d=this.elements.length,k=d,c,b,g=this.elements[0].length,a;do{c=k-d;b=g;e[c]=[];do{a=g-b;e[c][a]=f(this.elements[c][a],c+1,a+1)}while(--b)}while(--d);return Matrix.create(e)},isSameSizeAs:function(a){var b=a.elements||a;if(typeof(b[0][0])=="undefined"){b=Matrix.create(b).elements}return(this.elements.length==b.length&&this.elements[0].length==b[0].length)},add:function(a){var b=a.elements||a;if(typeof(b[0][0])=="undefined"){b=Matrix.create(b).elements}if(!this.isSameSizeAs(b)){return null}return this.map(function(c,e,d){return c+b[e-1][d-1]})},subtract:function(a){var b=a.elements||a;if(typeof(b[0][0])=="undefined"){b=Matrix.create(b).elements}if(!this.isSameSizeAs(b)){return null}return this.map(function(c,e,d){return c-b[e-1][d-1]})},canMultiplyFromLeft:function(a){var b=a.elements||a;if(typeof(b[0][0])=="undefined"){b=Matrix.create(b).elements}return(this.elements[0].length==b.length)},multiply:function(r){if(!r.elements){return this.map(function(c){return c*r})}var k=r.modulus?true:false;var o=r.elements||r;if(typeof(o[0][0])=="undefined"){o=Matrix.create(o).elements}if(!this.canMultiplyFromLeft(o)){return null}var e=this.elements.length,f=e,m,b,d=o[0].length,g;var q=this.elements[0].length,a=[],n,l,p;do{m=f-e;a[m]=[];b=d;do{g=d-b;n=0;l=q;do{p=q-l;n+=this.elements[m][p]*o[p][g]}while(--l);a[m][g]=n}while(--b)}while(--e);var o=Matrix.create(a);return k?o.col(1):o},x:function(a){return this.multiply(a)},xvec:function xvec(b){var a=b.elements;return Vector.createNoCopy(this.xvecarray(a))},xvecarray:function xvecarray(k){var a=k.length;var d=new Array(a);var f=this.elements;var c=f.length;for(var g=0;g<c;++g){var b=0;var l=f[g];for(var e=0;e<a;++e){b+=l[e]*k[e]}d[g]=b}return d},xPoint3D:function xPoint3D(a){var b=this.elements;return{x:a.x*b[0][0]+a.y*b[0][1]+a.z*b[0][2],y:a.x*b[1][0]+a.y*b[1][1]+a.z*b[1][2],z:a.x*b[2][0]+a.y*b[2][1]+a.z*b[2][2]}},xPoint3Dhom1:function xPoint3D(a){var b=this.elements;return{x:a.x*b[0][0]+a.y*b[0][1]+a.z*b[0][2]+b[0][3],y:a.x*b[1][0]+a.y*b[1][1]+a.z*b[1][2]+b[1][3],z:a.x*b[2][0]+a.y*b[2][1]+a.z*b[2][2]+b[2][3]}},xPoint3Dhom:function xPoint3D(a){var b=this.elements;return{x:a.x*b[0][0]+a.y*b[0][1]+a.z*b[0][2]+b[0][3],y:a.x*b[1][0]+a.y*b[1][1]+a.z*b[1][2]+b[1][3],z:a.x*b[2][0]+a.y*b[2][1]+a.z*b[2][2]+b[2][3],w:a.x*b[3][0]+a.y*b[3][1]+a.z*b[3][2]+b[3][3]}},minor:function(q,p,n,m){var e=[],g=n,l,f,k;var r=this.elements.length,o=this.elements[0].length;do{l=n-g;e[l]=[];f=m;do{k=m-f;e[l][k]=this.elements[(q+l-1)%r][(p+k-1)%o]}while(--f)}while(--g);return Matrix.create(e)},transpose:function(){var f=this.elements.length,g=this.elements[0].length;var e=[],d=g,c,b,a;do{c=g-d;e[c]=[];b=f;do{a=f-b;e[c][a]=this.elements[a][c]}while(--b)}while(--d);return Matrix.create(e)},isSquare:function(){return(this.elements.length==this.elements[0].length)},max:function(){var a=0,e=this.elements.length,g=e,d,c,f=this.elements[0].length,b;do{d=g-e;c=f;do{b=f-c;if(Math.abs(this.elements[d][b])>Math.abs(a)){a=this.elements[d][b]}}while(--c)}while(--e);return a},indexOf:function(a){var d=null,f=this.elements.length,k=f,e,c,g=this.elements[0].length,b;do{e=k-f;c=g;do{b=g-c;if(this.elements[e][b]==a){return{i:e+1,j:b+1}}}while(--c)}while(--f);return null},diagonal:function(){if(!this.isSquare){return null}var c=[],d=this.elements.length,a=d,b;do{b=a-d;c.push(this.elements[b][b])}while(--d);return Vector.create(c)},toRightTriangular:function(){var f=this.dup(),d;var b=this.elements.length,c=b,e,g,l=this.elements[0].length,a;do{e=c-b;if(f.elements[e][e]==0){for(j=e+1;j<c;j++){if(f.elements[j][e]!=0){d=[];g=l;do{a=l-g;d.push(f.elements[e][a]+f.elements[j][a])}while(--g);f.elements[e]=d;break}}}if(f.elements[e][e]!=0){for(j=e+1;j<c;j++){var m=f.elements[j][e]/f.elements[e][e];d=[];g=l;do{a=l-g;d.push(a<=e?0:f.elements[j][a]-f.elements[e][a]*m)}while(--g);f.elements[j]=d}}}while(--b);return f},toUpperTriangular:function(){return this.toRightTriangular()},determinant:function(){if(!this.isSquare()){return null}var e=this.toRightTriangular();var c=e.elements[0][0],d=e.elements.length-1,a=d,b;do{b=a-d+1;c=c*e.elements[b][b]}while(--d);return c},det:function(){return this.determinant()},isSingular:function(){return(this.isSquare()&&this.determinant()===0)},trace:function(){if(!this.isSquare()){return null}var c=this.elements[0][0],d=this.elements.length-1,a=d,b;do{b=a-d+1;c+=this.elements[b][b]}while(--d);return c},tr:function(){return this.trace()},rank:function(){var k=this.toRightTriangular(),g=0;var d=this.elements.length,f=d,c,b,e=this.elements[0].length,a;do{c=f-d;b=e;do{a=e-b;if(Math.abs(k.elements[c][a])>Sylvester.precision){g++;break}}while(--b)}while(--d);return g},rk:function(){return this.rank()},augment:function(m){var k=m.elements||m;if(typeof(k[0][0])=="undefined"){k=Matrix.create(k).elements}var e=this.dup(),l=e.elements[0].length;var c=e.elements.length,d=c,g,a,b=k[0].length,f;if(c!=k.length){return null}do{g=d-c;a=b;do{f=b-a;e.elements[g][l+f]=k[g][f]}while(--a)}while(--c);return e},inverse:function(){if(!this.isSquare()||this.isSingular()){return null}var c=this.elements.length,d=c,k,g;var l=this.augment(Matrix.I(c)).toRightTriangular();var m,n=l.elements[0].length,a,f,b;var o=[],e;do{k=c-1;f=[];m=n;o[k]=[];b=l.elements[k][k];do{a=n-m;e=l.elements[k][a]/b;f.push(e);if(a>=d){o[k].push(e)}}while(--m);l.elements[k]=f;for(g=0;g<k;g++){f=[];m=n;do{a=n-m;f.push(l.elements[g][a]-l.elements[k][a]*l.elements[g][k])}while(--m);l.elements[g]=f}}while(--c);return Matrix.create(o)},inv:function(){return this.inverse()},round:function(){return this.map(function(a){return Math.round(a)})},snapTo:function(a){return this.map(function(b){return(Math.abs(b-a)<=Sylvester.precision)?a:b})},inspect:function(){var c=[];var d=this.elements.length,a=d,b;do{b=a-d;c.push(Vector.create(this.elements[b]).inspect())}while(--d);return c.join("\n")},setElements:function(l){var o,a=l.elements||l;if(typeof(a[0][0])!="undefined"){var d=a.length,f=d,b,c,m;this.elements=[];do{o=f-d;b=a[o].length;c=b;this.elements[o]=[];do{m=c-b;this.elements[o][m]=a[o][m]}while(--b)}while(--d);return this}var e=a.length,g=e;this.elements=[];do{o=g-e;this.elements.push([a[o]])}while(--e);return this}};Matrix.create=function(a){var b=new Matrix();return b.setElements(a)};Matrix.I=function(f){var e=[],a=f,d,c,b;do{d=a-f;e[d]=[];c=a;do{b=a-c;e[d][b]=(d==b)?1:0}while(--c)}while(--f);return Matrix.create(e)};Matrix.Diagonal=function(c){var e=c.length,a=e,b;var d=Matrix.I(e);do{b=a-e;d.elements[b][b]=c[b]}while(--e);return d};Matrix.Rotation=function(b,k){if(!k){return Matrix.create([[Math.cos(b),-Math.sin(b)],[Math.sin(b),Math.cos(b)]])}var d=k.dup();if(d.elements.length!=3){return null}var i=d.modulus();var l=d.elements[0]/i,g=d.elements[1]/i,f=d.elements[2]/i;var n=Math.sin(b),e=Math.cos(b),m=1-e;return Matrix.create([[m*l*l+e,m*l*g-n*f,m*l*f+n*g],[m*l*g+n*f,m*g*g+e,m*g*f-n*l],[m*l*f-n*g,m*g*f+n*l,m*f*f+e]])};Matrix.RotationX=function(a){var d=Math.cos(a),b=Math.sin(a);return Matrix.create([[1,0,0],[0,d,-b],[0,b,d]])};Matrix.RotationY=function(a){var d=Math.cos(a),b=Math.sin(a);return Matrix.create([[d,0,b],[0,1,0],[-b,0,d]])};Matrix.RotationZ=function(a){var d=Math.cos(a),b=Math.sin(a);return Matrix.create([[d,-b,0],[b,d,0],[0,0,1]])};Matrix.Random=function(b,a){return Matrix.Zero(b,a).map(function(){return Math.random()})};Matrix.Zero=function(g,a){var f=[],e=g,d,c,b;do{d=g-e;f[d]=[];c=a;do{b=a-c;f[d][b]=0}while(--c)}while(--e);return Matrix.create(f)};function Line(){}Line.prototype={eql:function(a){return(this.isParallelTo(a)&&this.contains(a.anchor))},dup:function(){return Line.create(this.anchor,this.direction)},translate:function(b){var a=b.elements||b;return Line.create([this.anchor.elements[0]+a[0],this.anchor.elements[1]+a[1],this.anchor.elements[2]+(a[2]||0)],this.direction)},isParallelTo:function(b){if(b.normal){return b.isParallelTo(this)}var a=this.direction.angleFrom(b.direction);return(Math.abs(a)<=Sylvester.precision||Math.abs(a-Math.PI)<=Sylvester.precision)},distanceFrom:function(e){if(e.normal){return e.distanceFrom(this)}if(e.direction){if(this.isParallelTo(e)){return this.distanceFrom(e.anchor)}var k=this.direction.cross(e.direction).toUnitVector().elements;var c=this.anchor.elements,b=e.anchor.elements;return Math.abs((c[0]-b[0])*k[0]+(c[1]-b[1])*k[1]+(c[2]-b[2])*k[2])}else{var f=e.elements||e;var c=this.anchor.elements,a=this.direction.elements;var n=f[0]-c[0],l=f[1]-c[1],g=(f[2]||0)-c[2];var m=Math.sqrt(n*n+l*l+g*g);if(m===0){return 0}var i=(n*a[0]+l*a[1]+g*a[2])/m;var d=1-i*i;return Math.abs(m*Math.sqrt(d<0?0:d))}},contains:function(a){var b=this.distanceFrom(a);return(b!==null&&b<=Sylvester.precision)},liesIn:function(a){return a.contains(this)},intersects:function(a){if(a.normal){return a.intersects(this)}return(!this.isParallelTo(a)&&this.distanceFrom(a)<=Sylvester.precision)},intersectionWith:function(o){if(o.normal){return o.intersectionWith(this)}if(!this.intersects(o)){return null}var m=this.anchor.elements,b=this.direction.elements,l=o.anchor.elements,a=o.direction.elements;var x=b[0],v=b[1],u=b[2],i=a[0],g=a[1],e=a[2];var s=m[0]-l[0],r=m[1]-l[1],q=m[2]-l[2];var n=-x*s-v*r-u*q;var d=i*s+g*r+e*q;var f=x*x+v*v+u*u;var t=i*i+g*g+e*e;var c=x*i+v*g+u*e;var p=(n*t/f+c*d)/(t-c*c);return Vector.create([m[0]+p*x,m[1]+p*v,m[2]+p*u])},pointClosestTo:function(s){if(s.direction){if(this.intersects(s)){return this.intersectionWith(s)}if(this.isParallelTo(s)){return null}var u=this.direction.elements,t=s.direction.elements;var f=u[0],e=u[1],c=u[2],q=t[0],o=t[1],m=t[2];var r=(c*q-f*m),p=(f*o-e*q),n=(e*m-c*o);var l=Vector.create([r*m-p*o,p*q-n*m,n*o-r*q]);var i=Plane.create(s.anchor,l);return i.intersectionWith(this)}else{var i=s.elements||s;if(this.contains(i)){return Vector.create(i)}var v=this.anchor.elements,u=this.direction.elements;var f=u[0],e=u[1],c=u[2],d=v[0],b=v[1],a=v[2];var r=f*(i[1]-b)-e*(i[0]-d),p=e*((i[2]||0)-a)-c*(i[1]-b),n=c*(i[0]-d)-f*((i[2]||0)-a);var g=Vector.create([e*r-c*n,c*p-f*r,f*n-e*p]);var B=this.distanceFrom(i)/g.modulus();return Vector.create([i[0]+g.elements[0]*B,i[1]+g.elements[1]*B,(i[2]||0)+g.elements[2]*B])}},rotate:function(p,q){if(typeof(q.direction)=="undefined"){q=Line.create(q.to3D(),Vector.k)}var g=Matrix.Rotation(p,q.direction).elements;var b=q.pointClosestTo(this.anchor).elements;var d=this.anchor.elements,a=this.direction.elements;var l=b[0],k=b[1],i=b[2],f=d[0],e=d[1],c=d[2];var o=f-l,n=e-k,m=c-i;return Line.create([l+g[0][0]*o+g[0][1]*n+g[0][2]*m,k+g[1][0]*o+g[1][1]*n+g[1][2]*m,i+g[2][0]*o+g[2][1]*n+g[2][2]*m],[g[0][0]*a[0]+g[0][1]*a[1]+g[0][2]*a[2],g[1][0]*a[0]+g[1][1]*a[1]+g[1][2]*a[2],g[2][0]*a[0]+g[2][1]*a[1]+g[2][2]*a[2]])},reflectionIn:function(o){if(o.normal){var f=this.anchor.elements,b=this.direction.elements;var l=f[0],i=f[1],e=f[2],g=b[0],d=b[1],c=b[2];var a=this.anchor.reflectionIn(o).elements;var n=l+g,m=i+d,k=e+c;var p=o.pointClosestTo([n,m,k]).elements;var r=[p[0]+(p[0]-n)-a[0],p[1]+(p[1]-m)-a[1],p[2]+(p[2]-k)-a[2]];return Line.create(a,r)}else{if(o.direction){return this.rotate(Math.PI,o)}else{var q=o.elements||o;return Line.create(this.anchor.reflectionIn([q[0],q[1],(q[2]||0)]),this.direction)}}},setVectors:function(a,c){a=Vector.create(a);c=Vector.create(c);if(a.elements.length==2){a.elements.push(0)}if(c.elements.length==2){c.elements.push(0)}if(a.elements.length>3||c.elements.length>3){return null}var b=c.modulus();if(b===0){return null}this.anchor=a;this.direction=Vector.create([c.elements[0]/b,c.elements[1]/b,c.elements[2]/b]);return this}};Line.create=function(b,c){var a=new Line();return a.setVectors(b,c)};Line.X=Line.create(Vector.Zero(3),Vector.i);Line.Y=Line.create(Vector.Zero(3),Vector.j);Line.Z=Line.create(Vector.Zero(3),Vector.k);function Plane(){}Plane.prototype={eql:function(a){return(this.contains(a.anchor)&&this.isParallelTo(a))},dup:function(){return Plane.create(this.anchor,this.normal)},translate:function(b){var a=b.elements||b;return Plane.create([this.anchor.elements[0]+a[0],this.anchor.elements[1]+a[1],this.anchor.elements[2]+(a[2]||0)],this.normal)},isParallelTo:function(b){var a;if(b.normal){a=this.normal.angleFrom(b.normal);return(Math.abs(a)<=Sylvester.precision||Math.abs(Math.PI-a)<=Sylvester.precision)}else{if(b.direction){return this.normal.isPerpendicularTo(b.direction)}}return null},isPerpendicularTo:function(a){var b=this.normal.angleFrom(a.normal);return(Math.abs(Math.PI/2-b)<=Sylvester.precision)},distanceFrom:function(c){if(this.intersects(c)||this.contains(c)){return 0}if(c.anchor){var a=this.anchor.elements,e=c.anchor.elements,d=this.normal.elements;return Math.abs((a[0]-e[0])*d[0]+(a[1]-e[1])*d[1]+(a[2]-e[2])*d[2])}else{var b=c.elements||c;var a=this.anchor.elements,d=this.normal.elements;return Math.abs((a[0]-b[0])*d[0]+(a[1]-b[1])*d[1]+(a[2]-(b[2]||0))*d[2])}},contains:function(d){if(d.normal){return null}if(d.direction){return(this.contains(d.anchor)&&this.contains(d.anchor.add(d.direction)))}else{var b=d.elements||d;var a=this.anchor.elements,e=this.normal.elements;var c=Math.abs(e[0]*(a[0]-b[0])+e[1]*(a[1]-b[1])+e[2]*(a[2]-(b[2]||0)));return(c<=Sylvester.precision)}},intersects:function(a){if(typeof(a.direction)=="undefined"&&typeof(a.normal)=="undefined"){return null}return !this.isParallelTo(a)},intersectionWith:function(l){if(!this.intersects(l)){return null}if(l.direction){var d=l.anchor.elements,a=l.direction.elements,m=this.anchor.elements,o=this.normal.elements;var s=(o[0]*(m[0]-d[0])+o[1]*(m[1]-d[1])+o[2]*(m[2]-d[2]))/(o[0]*a[0]+o[1]*a[1]+o[2]*a[2]);return Vector.create([d[0]+a[0]*s,d[1]+a[1]*s,d[2]+a[2]*s])}else{if(l.normal){var r=this.normal.cross(l.normal).toUnitVector();var o=this.normal.elements,d=this.anchor.elements,n=l.normal.elements,c=l.anchor.elements;var t=Matrix.Zero(2,2),k=0;while(t.isSingular()){k++;t=Matrix.create([[o[k%3],o[(k+1)%3]],[n[k%3],n[(k+1)%3]]])}var f=t.inverse().elements;var q=o[0]*d[0]+o[1]*d[1]+o[2]*d[2];var p=n[0]*c[0]+n[1]*c[1]+n[2]*c[2];var b=[f[0][0]*q+f[0][1]*p,f[1][0]*q+f[1][1]*p];var g=[];for(var e=1;e<=3;e++){g.push((k==e)?0:b[(e+(5-k)%3)%3])}return Line.create(g,r)}}},pointClosestTo:function(b){var d=b.elements||b;var a=this.anchor.elements,e=this.normal.elements;var c=(a[0]-d[0])*e[0]+(a[1]-d[1])*e[1]+(a[2]-(d[2]||0))*e[2];return Vector.create([d[0]+e[0]*c,d[1]+e[1]*c,(d[2]||0)+e[2]*c])},rotate:function(p,q){var f=Matrix.Rotation(p,q.direction).elements;var a=q.pointClosestTo(this.anchor).elements;var c=this.anchor.elements,l=this.normal.elements;var k=a[0],i=a[1],g=a[2],e=c[0],d=c[1],b=c[2];var o=e-k,n=d-i,m=b-g;return Plane.create([k+f[0][0]*o+f[0][1]*n+f[0][2]*m,i+f[1][0]*o+f[1][1]*n+f[1][2]*m,g+f[2][0]*o+f[2][1]*n+f[2][2]*m],[f[0][0]*l[0]+f[0][1]*l[1]+f[0][2]*l[2],f[1][0]*l[0]+f[1][1]*l[1]+f[1][2]*l[2],f[2][0]*l[0]+f[2][1]*l[1]+f[2][2]*l[2]])},reflectionIn:function(f){if(f.normal){var c=this.anchor.elements,l=this.normal.elements;var e=c[0],d=c[1],b=c[2],o=l[0],n=l[1],m=l[2];var a=this.anchor.reflectionIn(f).elements;var r=e+o,q=d+n,p=b+m;var i=f.pointClosestTo([r,q,p]).elements;var g=[i[0]+(i[0]-r)-a[0],i[1]+(i[1]-q)-a[1],i[2]+(i[2]-p)-a[2]];return Plane.create(a,g)}else{if(f.direction){return this.rotate(Math.PI,f)}else{var k=f.elements||f;return Plane.create(this.anchor.reflectionIn([k[0],k[1],(k[2]||0)]),this.normal)}}},setVectors:function(k,p,o){k=Vector.create(k);k=k.to3D();if(k===null){return null}p=Vector.create(p);p=p.to3D();if(p===null){return null}if(typeof(o)=="undefined"){o=null}else{o=Vector.create(o);o=o.to3D();if(o===null){return null}}var f=k.elements[0],e=k.elements[1],d=k.elements[2];var l=p.elements[0],i=p.elements[1],g=p.elements[2];var m,n;if(o!==null){var c=o.elements[0],b=o.elements[1],a=o.elements[2];m=Vector.create([(i-e)*(a-d)-(g-d)*(b-e),(g-d)*(c-f)-(l-f)*(a-d),(l-f)*(b-e)-(i-e)*(c-f)]);n=m.modulus();if(n===0){return null}m=Vector.create([m.elements[0]/n,m.elements[1]/n,m.elements[2]/n])}else{n=Math.sqrt(l*l+i*i+g*g);if(n===0){return null}m=Vector.create([p.elements[0]/n,p.elements[1]/n,p.elements[2]/n])}this.anchor=k;this.normal=m;return this}};Plane.create=function(a,d,c){var b=new Plane();return b.setVectors(a,d,c)};Plane.XY=Plane.create(Vector.Zero(3),Vector.k);Plane.YZ=Plane.create(Vector.Zero(3),Vector.i);Plane.ZX=Plane.create(Vector.Zero(3),Vector.j);Plane.YX=Plane.XY;Plane.ZY=Plane.YZ;Plane.XZ=Plane.ZX;var $V=Vector.create;var $M=Matrix.create;var $L=Line.create;var $P=Plane.create;Matrix.Translation=function(a){if(a.elements.length==2){var b=Matrix.I(3);b.elements[2][0]=a.elements[0];b.elements[2][1]=a.elements[1];return b}if(a.elements.length==3){var b=Matrix.I(4);b.elements[0][3]=a.elements[0];b.elements[1][3]=a.elements[1];b.elements[2][3]=a.elements[2];return b}throw"Invalid length for Translation"};Matrix.prototype.flatten=function(){var a=[];if(this.elements.length==0){return[]}for(var b=0;b<this.elements[0].length;b++){for(var c=0;c<this.elements.length;c++){a.push(this.elements[c][b])}}return a};Matrix.prototype.ensure4x4=function(){if(this.elements.length==4&&this.elements[0].length==4){return this}if(this.elements.length>4||this.elements[0].length>4){return null}for(var b=0;b<this.elements.length;b++){for(var a=this.elements[b].length;a<4;a++){if(b==a){this.elements[b].push(1)}else{this.elements[b].push(0)}}}for(var b=this.elements.length;b<4;b++){if(b==0){this.elements.push([1,0,0,0])}else{if(b==1){this.elements.push([0,1,0,0])}else{if(b==2){this.elements.push([0,0,1,0])}else{if(b==3){this.elements.push([0,0,0,1])}}}}}return this};Matrix.prototype.make3x3=function(){if(this.elements.length!=4||this.elements[0].length!=4){return null}return Matrix.create([[this.elements[0][0],this.elements[0][1],this.elements[0][2]],[this.elements[1][0],this.elements[1][1],this.elements[1][2]],[this.elements[2][0],this.elements[2][1],this.elements[2][2]]])};Vector.prototype.flatten=function(){return this.elements};function mht(a){var c="";if(a.length==16){for(var b=0;b<4;b++){c+="<span style='font-family: monospace'>["+a[b*4+0].toFixed(4)+","+a[b*4+1].toFixed(4)+","+a[b*4+2].toFixed(4)+","+a[b*4+3].toFixed(4)+"]</span><br>"}}else{if(a.length==9){for(var b=0;b<3;b++){c+="<span style='font-family: monospace'>["+a[b*3+0].toFixed(4)+","+a[b*3+1].toFixed(4)+","+a[b*3+2].toFixed(4)+"]</font><br>"}}else{return a.toString()}}return c}function makeLookAt(s,r,q,d,c,a,g,f,e){var u=$V([s,r,q]);var v=$V([d,c,a]);var n=$V([g,f,e]);var b;var i=u.subtract(v).toUnitVector();var l=n.cross(i).toUnitVector();var k=i.cross(l).toUnitVector();var p=$M([[l.e(1),l.e(2),l.e(3),0],[k.e(1),k.e(2),k.e(3),0],[i.e(1),i.e(2),i.e(3),0],[0,0,0,1]]);var o=$M([[1,0,0,-s],[0,1,0,-r],[0,0,1,-q],[0,0,0,1]]);return p.x(o)}function makeOrtho(b,i,a,g,k,f){var e=-(i+b)/(i-b);var d=-(g+a)/(g-a);var c=-(f+k)/(f-k);return $M([[2/(i-b),0,0,e],[0,2/(g-a),0,d],[0,0,-2/(f-k),c],[0,0,0,1]])}function makePerspective(d,c,b,i){var a=b*Math.tan(d*Math.PI/360);var f=-a;var g=f*c;var e=a*c;return makeFrustum(g,e,f,a,b,i)}function makeFrustum(i,m,b,l,n,k){var g=2*n/(m-i);var e=2*n/(l-b);var f=(m+i)/(m-i);var d=(l+b)/(l-b);var c=-(k+n)/(k-n);var a=-2*k*n/(k-n);return $M([[g,0,f,0],[0,e,d,0],[0,0,c,a],[0,0,-1,0]])}function makeOrtho(b,i,a,g,k,f){var e=-(i+b)/(i-b);var d=-(g+a)/(g-a);var c=-(f+k)/(f-k);return $M([[2/(i-b),0,0,e],[0,2/(g-a),0,d],[0,0,-2/(f-k),c],[0,0,0,1]])}WebGLDebugUtils=function(){var e=function(n){if(window.console&&window.console.log){window.console.log(n)}};var m={enable:{0:true},disable:{0:true},getParameter:{0:true},drawArrays:{0:true},drawElements:{0:true,2:true},createShader:{0:true},getShaderParameter:{1:true},getProgramParameter:{1:true},getVertexAttrib:{1:true},vertexAttribPointer:{2:true},bindTexture:{0:true},activeTexture:{0:true},getTexParameter:{0:true,1:true},texParameterf:{0:true,1:true},texParameteri:{0:true,1:true,2:true},texImage2D:{0:true,2:true,6:true,7:true},texSubImage2D:{0:true,6:true,7:true},copyTexImage2D:{0:true,2:true},copyTexSubImage2D:{0:true},generateMipmap:{0:true},bindBuffer:{0:true},bufferData:{0:true,2:true},bufferSubData:{0:true},getBufferParameter:{0:true,1:true},pixelStorei:{0:true,1:true},readPixels:{4:true,5:true},bindRenderbuffer:{0:true},bindFramebuffer:{0:true},checkFramebufferStatus:{0:true},framebufferRenderbuffer:{0:true,1:true,2:true},framebufferTexture2D:{0:true,1:true,2:true},getFramebufferAttachmentParameter:{0:true,1:true,2:true},getRenderbufferParameter:{0:true,1:true},renderbufferStorage:{0:true,1:true},clear:{0:true},depthFunc:{0:true},blendFunc:{0:true,1:true},blendFuncSeparate:{0:true,1:true,2:true,3:true},blendEquation:{0:true},blendEquationSeparate:{0:true,1:true},stencilFunc:{0:true},stencilFuncSeparate:{0:true,1:true},stencilMaskSeparate:{0:true},stencilOp:{0:true,1:true,2:true},stencilOpSeparate:{0:true,1:true,2:true,3:true},cullFace:{0:true},frontFace:{0:true}};var l=null;function k(n){if(l==null){l={};for(var o in n){if(typeof n[o]=="number"){l[n[o]]=o}}}}function f(){if(l==null){throw"WebGLDebugUtils.init(ctx) not called"}}function b(n){f();return(l[n]!==undefined)}function c(o){f();var n=l[o];return(n!==undefined)?n:("*UNKNOWN WebGL ENUM (0x"+o.toString(16)+")")}function d(q,o,p){var n=m[q];if(n!==undefined){if(n[o]){return c(p)}}return p.toString()}function i(n,q){k(n);q=q||function(v,x,t){var y="";for(var u=0;u<t.length;++u){y+=((u==0)?"":", ")+d(x,u,t[u])}e("WebGL error "+c(v)+" in "+x+"("+y+")")};var s={};function p(t,u){return function(){var v=t[u].apply(t,arguments);var x=t.getError();if(x!=0){s[x]=true;q(x,u,arguments)}return v}}var r={};for(var o in n){if(typeof n[o]=="function"){r[o]=p(n,o)}else{r[o]=n[o]}}r.getError=function(){for(var t in s){if(s[t]){s[t]=false;return t}}return n.NO_ERROR};return r}function g(n){var r=n.getParameter(n.MAX_VERTEX_ATTRIBS);var o=n.createBuffer();n.bindBuffer(n.ARRAY_BUFFER,o);for(var q=0;q<r;++q){n.disableVertexAttribArray(q);n.vertexAttribPointer(q,4,n.FLOAT,false,0,0);n.vertexAttrib1f(q,0)}n.deleteBuffer(o);var p=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS);for(var q=0;q<p;++q){n.activeTexture(n.TEXTURE0+q);n.bindTexture(n.TEXTURE_CUBE_MAP,null);n.bindTexture(n.TEXTURE_2D,null)}n.activeTexture(n.TEXTURE0);n.useProgram(null);n.bindBuffer(n.ARRAY_BUFFER,null);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,null);n.bindFramebuffer(n.FRAMEBUFFER,null);n.bindRenderbuffer(n.RENDERBUFFER,null);n.disable(n.BLEND);n.disable(n.CULL_FACE);n.disable(n.DEPTH_TEST);n.disable(n.DITHER);n.disable(n.SCISSOR_TEST);n.blendColor(0,0,0,0);n.blendEquation(n.FUNC_ADD);n.blendFunc(n.ONE,n.ZERO);n.clearColor(0,0,0,0);n.clearDepth(1);n.clearStencil(-1);n.colorMask(true,true,true,true);n.cullFace(n.BACK);n.depthFunc(n.LESS);n.depthMask(true);n.depthRange(0,1);n.frontFace(n.CCW);n.hint(n.GENERATE_MIPMAP_HINT,n.DONT_CARE);n.lineWidth(1);n.pixelStorei(n.PACK_ALIGNMENT,4);n.pixelStorei(n.UNPACK_ALIGNMENT,4);n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,false);n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,false);if(n.UNPACK_COLORSPACE_CONVERSION_WEBGL){n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,n.BROWSER_DEFAULT_WEBGL)}n.polygonOffset(0,0);n.sampleCoverage(1,false);n.scissor(0,0,n.canvas.width,n.canvas.height);n.stencilFunc(n.ALWAYS,0,4294967295);n.stencilMask(4294967295);n.stencilOp(n.KEEP,n.KEEP,n.KEEP);n.viewport(0,0,n.canvas.clientWidth,n.canvas.clientHeight);n.clear(n.COLOR_BUFFER_BIT|n.DEPTH_BUFFER_BIT|n.STENCIL_BUFFER_BIT);while(n.getError()){}}function a(D){var G={};var v=1;var B=false;var u=0;var K=[];var F=undefined;var t=undefined;var s=undefined;var p={};function n(L){return(L instanceof WebGLBuffer||L instanceof WebGLFramebuffer||L instanceof WebGLProgram||L instanceof WebGLRenderbuffer||L instanceof WebGLShader||L instanceof WebGLTexture)}function I(M){for(var N=0;N<M.length;++N){var L=M[N];if(n(L)){return L.__webglDebugContextLostId__==v}}return true}function E(){var L=Object.keys(p);for(var M=0;M<L.length;++M){delete glErrorShdow_[L]}}function r(L,N){var M=L[N];return function(){if(!B){if(!I(arguments)){p[L.INVALID_OPERATION]=true;return}var O=M.apply(L,arguments);return O}}}for(var A in D){if(typeof D[A]=="function"){G[A]=r(D,A)}else{G[A]=D[A]}}function y(L){return{statusMessage:L}}function H(){for(var L=0;L<K.length;++L){var M=K[L];if(M instanceof WebGLBuffer){D.deleteBuffer(M)}else{if(M instanceof WebctxFramebuffer){D.deleteFramebuffer(M)}else{if(M instanceof WebctxProgram){D.deleteProgram(M)}else{if(M instanceof WebctxRenderbuffer){D.deleteRenderbuffer(M)}else{if(M instanceof WebctxShader){D.deleteShader(M)}else{if(M instanceof WebctxTexture){D.deleteTexture(M)}}}}}}}}G.loseContext=function(){if(!B){B=true;++v;while(D.getError()){}E();p[D.CONTEXT_LOST_WEBGL]=true;setTimeout(function(){if(F){F(y("context lost"))}},0)}};G.restoreContext=function(){if(B){if(t){setTimeout(function(){H();g(D);B=false;if(t){var L=t;t=s;s=undefined;L(y("context restored"))}},0)}else{throw"You can not restore the context without a listener"}}};G.getError=function(){if(!B){var L;while(L=D.getError()){p[L]=true}}for(var L in p){if(p[L]){delete p[L];return L}}return D.NO_ERROR};var C=["createBuffer","createFramebuffer","createProgram","createRenderbuffer","createShader","createTexture"];for(var z=0;z<C.length;++z){var J=C[z];G[J]=function(L){return function(){if(B){return null}var M=L.apply(D,arguments);M.__webglDebugContextLostId__=v;K.push(M);return M}}(D[J])}var q=["getActiveAttrib","getActiveUniform","getBufferParameter","getContextAttributes","getAttachedShaders","getFramebufferAttachmentParameter","getParameter","getProgramParameter","getProgramInfoLog","getRenderbufferParameter","getShaderParameter","getShaderInfoLog","getShaderSource","getTexParameter","getUniform","getUniformLocation","getVertexAttrib"];for(var z=0;z<q.length;++z){var J=q[z];G[J]=function(L){return function(){if(B){return null}return L.apply(D,arguments)}}(G[J])}var x=["isBuffer","isEnabled","isFramebuffer","isProgram","isRenderbuffer","isShader","isTexture"];for(var z=0;z<x.length;++z){var J=x[z];G[J]=function(L){return function(){if(B){return false}return L.apply(D,arguments)}}(G[J])}G.checkFramebufferStatus=function(L){return function(){if(B){return D.FRAMEBUFFER_UNSUPPORTED}return L.apply(D,arguments)}}(G.checkFramebufferStatus);G.getAttribLocation=function(L){return function(){if(B){return -1}return L.apply(D,arguments)}}(G.getAttribLocation);G.getVertexAttribOffset=function(L){return function(){if(B){return 0}return L.apply(D,arguments)}}(G.getVertexAttribOffset);G.isContextLost=function(){return B};function o(L){if(typeof(L)=="function"){return L}else{return function(M){L.handleEvent(M)}}}G.registerOnContextLostListener=function(L){F=o(L)};G.registerOnContextRestoredListener=function(L){if(B){s=o(L)}else{t=o(L)}};return G}return{init:k,mightBeEnum:b,glEnumToString:c,glFunctionArgToString:d,makeDebugContext:i,makeLostContextSimulatingContext:a,resetToInitialState:g}}();if(!self.bigshot){bigshot={};bigshot.Object={extend:function(b,c){for(var a in c.prototype){if(b.prototype[a]){b.prototype[a]._super=c.prototype[a]}else{b.prototype[a]=c.prototype[a]}}},resolve:function(b){var e=b.split(".");var a=self;for(var d=0;d<e.length;++d){a=a[e[d]]}return a},validate:function(a,b){},alertr:function(b){var c="";for(var a in b){c+=a+":"+b[a]+"\n"}alert(c)},logr:function(b){var c="";for(var a in b){c+=a+":"+b[a]+"\n"}if(console){console.log(c)}}};bigshot.Browser=function(){this.requestAnimationFrameFunction=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){return setTimeout(b,0)}};bigshot.Browser.prototype={removeAllChildren:function(a){a.innerHTML=""},mouseEnter:function(b){var a=this.isAChildOf;return function(c){var d=c.relatedTarget;if(this===d||a(this,d)){return}b.call(this,c)}},isAChildOf:function(b,a){if(b===a){return false}while(a&&a!==b){a=a.parentNode}return a===b},unregisterListener:function(d,b,c,a){if(typeof(d.removeEventListener)!="undefined"){d.removeEventListener(b,c,a)}else{if(typeof(d.detachEvent)!="undefined"){d.detachEvent("on"+b,c)}}},registerListener:function(a,b,d,c){if(typeof a.addEventListener!="undefined"){if(b==="mouseenter"){a.addEventListener("mouseover",this.mouseEnter(d),c)}else{if(b==="mouseleave"){a.addEventListener("mouseout",this.mouseEnter(d),c)}else{a.addEventListener(b,d,c)}}}else{if(typeof a.attachEvent!="undefined"){a.attachEvent("on"+b,d)}else{a["on"+b]=d}}},stopEventBubbling:function(a){if(a){if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}}},stopEventBubblingHandler:function(){var a=this;return function(b){a.stopEventBubbling(b);return false}},stopMouseEventBubbling:function(a){this.registerListener(a,"mousedown",this.stopEventBubblingHandler(),false);this.registerListener(a,"mouseup",this.stopEventBubblingHandler(),false);this.registerListener(a,"mousemove",this.stopEventBubblingHandler(),false)},getElementSize:function(b){var a={};if(b.clientWidth){a.w=b.clientWidth}if(b.clientHeight){a.h=b.clientHeight}return a},browserIsViewporting:function(){if(window.innerWidth<=screen.width){return false}else{return true}},getDevicePixelScale:function(){if(this.browserIsViewporting()){return screen.width/window.innerWidth}else{return 1}},requestAnimationFrame:function(c,a){var b=this.requestAnimationFrameFunction;b(c,a)},getElementPosition:function(b){var a=new Object();a.x=0;a.y=0;var c=b;while(c){a.x+=c.offsetLeft;a.y+=c.offsetTop;if(c.clientLeft){a.x+=c.clientLeft}if(c.clientTop){a.y+=c.clientTop}if(c.x){a.x+=c.x}if(c.y){a.y+=c.y}c=c.offsetParent}return a},createXMLHttpRequest:function(){try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(a){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){}try{return new XMLHttpRequest()}catch(a){}alert("XMLHttpRequest not supported");return null},makeOpacityTransition:function(a,b){if(a.style.WebkitTransitionProperty!=undefined){a.style.opacity=1;a.style.WebkitTransitionProperty="opacity";a.style.WebkitTransitionTimingFunction="linear";a.style.WebkitTransitionDuration="1s";setTimeout(function(){a.addEventListener("webkitTransitionEnd",function(){b()});a.style.opacity=0},0)}else{a.style.opacity=0;b()}}};bigshot.EventDispatcher=function(){this.eventListeners={}};bigshot.EventDispatcher.prototype={addEventListener:function(a,b){if(this.eventListeners[a]==undefined){this.eventListeners[a]=new Array()}this.eventListeners[a].push(b)},removeEventListener:function(a,d){if(this.eventListeners[a]!=undefined){var c=this.eventListeners[a];for(var b=0;b<c.length;++b){if(c[b]===listener){c.splice(b,1);if(c.length==0){delete this.eventListeners[a]}break}}}},fireEvent:function(b,a){if(this.eventListeners[b]!=undefined){var d=this.eventListeners[b];for(var c=0;c<d.length;++c){d[c](a)}}}};bigshot.Event=function(b){this.bubbles=false;this.cancelable=false;this.currentTarget=null;this.defaultPrevented=false;this.target=null;this.timeStamp=new Date().getTime();this.type=null;this.isTrusted=false;for(var a in b){this[a]=b[a]}};bigshot.Event.prototype={preventDefault:function(){this.defaultPrevented=true}};bigshot.TimedWeakReference=function(b,c,a){this.object=null;this.hasObject=false;this.fnCreate=b;this.fnDispose=c;this.lastAccess=new Date().getTime();this.hasTimer=false;this.interval=a};bigshot.TimedWeakReference.prototype={dispose:function(){this.clear()},get:function(){if(!this.hasObject){this.hasObject=true;this.object=this.fnCreate();this.startTimer()}this.lastAccess=new Date().getTime();return this.object},clear:function(){if(this.hasObject){this.hasObject=false;this.fnDispose(this.object);this.object=null;this.stopTimer()}},stopTimer:function(){if(this.hasTimer){clearTimeout(this.timerId);this.hasTimer=false}},startTimer:function(){if(!this.hasTimer){var a=this;this.hasTimer=true;this.timerId=setTimeout(function(){a.hasTimer=false;a.update()},this.interval)}},update:function(){if(this.hasObject){var a=new Date().getTime();if(a-this.lastAccess>this.interval){this.clear()}else{this.startTimer()}}}};bigshot.ImageEvent=function(a){bigshot.Event.call(this,a)};bigshot.ImageEvent.prototype={};bigshot.Object.extend(bigshot.ImageEvent,bigshot.Event);bigshot.VREvent=function(a){bigshot.Event.call(this,a)};bigshot.VREvent.prototype={};bigshot.Object.extend(bigshot.VREvent,bigshot.Event);bigshot.FullScreen=function(a){this.container=a;this.isFullScreen=false;this.savedBodyStyle=null;this.savedParent=null;this.savedSize=null;this.expanderDiv=null;this.restoreSize=false;this.onCloseHandlers=new Array();this.onResizeHandlers=new Array();var b=function(d,e){for(var c=0;c<e.length;++c){if(d[e[c]]){return e[c]}}return null};this.requestFullScreen=b(a,["requestFullScreen","mozRequestFullScreen","webkitRequestFullScreen"]);this.cancelFullScreen=b(document,["cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen"]);this.restoreSize=this.requestFullScreen!=null};bigshot.FullScreen.prototype={browser:new bigshot.Browser(),getRootElement:function(){return this.div},addOnClose:function(a){this.onCloseHandlers.push(a)},onClose:function(){for(var a=0;a<this.onCloseHandlers.length;++a){this.onCloseHandlers[a]()}},addOnResize:function(a){this.onResizeHandlers.push(a)},onResize:function(){for(var a=0;a<this.onResizeHandlers.length;++a){this.onResizeHandlers[a]()}},open:function(){this.isFullScreen=true;if(this.requestFullScreen){return this.openRequestFullScreen()}else{return this.openCompat()}},openRequestFullScreen:function(){this.savedSize={width:this.container.style.width,height:this.container.style.height};this.container.style.width="100%";this.container.style.height="100%";var a=this;if(this.requestFullScreen=="mozRequestFullScreen"){var c=function(){a.container.removeEventListener("mozfullscreenerror",c);a.isFullScreen=false;a.exitFullScreenHandler();a.onClose()};this.container.addEventListener("mozfullscreenerror",c);var b=function(){if(document.mozFullScreenElement!==a.container){document.removeEventListener("mozfullscreenchange",b);a.exitFullScreenHandler()}else{a.onResize()}};document.addEventListener("mozfullscreenchange",b)}else{var b=function(){if(document.webkitCurrentFullScreenElement!==a.container){a.container.removeEventListener("webkitfullscreenchange",b);a.exitFullScreenHandler()}else{a.onResize()}};this.container.addEventListener("webkitfullscreenchange",b)}this.exitFullScreenHandler=function(){if(a.isFullScreen){a.isFullScreen=false;document[a.cancelFullScreen]();if(a.restoreSize){a.container.style.width=a.savedSize.width;a.container.style.height=a.savedSize.height}a.onResize();a.onClose()}};this.container[this.requestFullScreen]()},openCompat:function(){this.savedParent=this.container.parentNode;this.savedSize={width:this.container.style.width,height:this.container.style.height};this.savedBodyStyle=document.body.style.cssText;document.body.style.overflow="hidden";this.expanderDiv=document.createElement("div");this.expanderDiv.style.position="absolute";this.expanderDiv.style.top="0px";this.expanderDiv.style.left="0px";this.expanderDiv.style.width=Math.max(window.innerWidth,document.documentElement.clientWidth)+"px";this.expanderDiv.style.height=Math.max(window.innerHeight,document.documentElement.clientHeight)+"px";document.body.appendChild(this.expanderDiv);this.div=document.createElement("div");this.div.style.position="fixed";this.div.style.top=window.pageYOffset+"px";this.div.style.left=window.pageXOffset+"px";this.div.style.width=window.innerWidth+"px";this.div.style.height=window.innerHeight+"px";this.div.style.zIndex=9998;this.div.appendChild(this.container);document.body.appendChild(this.div);var c=this;var b=function(f){setTimeout(function(){c.div.style.width=window.innerWidth+"px";c.div.style.height=window.innerHeight+"px";setTimeout(function(){c.onResize()},1)},1)};var d=function(f){c.expanderDiv.style.width=Math.max(window.innerWidth,document.documentElement.clientWidth)+"px";c.expanderDiv.style.height=Math.max(window.innerHeight,document.documentElement.clientHeight)+"px";setTimeout(function(){c.div.style.top=window.pageYOffset+"px";c.div.style.left=window.pageXOffset+"px";c.div.style.width=window.innerWidth+"px";c.div.style.height=window.innerHeight+"px";setTimeout(function(){c.onResize()},1)},1)};var a=function(f){if(f.keyCode==27){c.exitFullScreenHandler()}};this.exitFullScreenHandler=function(){c.isFullScreen=false;c.browser.unregisterListener(document,"keydown",a);c.browser.unregisterListener(window,"resize",b);c.browser.unregisterListener(document.body,"orientationchange",d);if(c.restoreSize){c.container.style.width=c.savedSize.width;c.container.style.height=c.savedSize.height}document.body.style.cssText=c.savedBodyStyle;c.savedParent.appendChild(c.container);document.body.removeChild(c.div);document.body.removeChild(c.expanderDiv);c.onResize();c.onClose();setTimeout(function(){c.onResize()},1)};this.browser.registerListener(document,"keydown",a,false);this.browser.registerListener(window,"resize",b,false);this.browser.registerListener(document.body,"orientationchange",d,false);this.onResize();return this.exitFullScreenHandler},close:function(){this.exitFullScreenHandler()}};bigshot.DataLoader=function(){};bigshot.DataLoader.prototype={loadImage:function(a,b){},loadXml:function(a,b,c){}};bigshot.DefaultDataLoader=function(b,a){this.maxRetries=b;this.crossOrigin=a;if(!this.maxRetries){this.maxRetries=0}};bigshot.DefaultDataLoader.prototype={browser:new bigshot.Browser(),loadImage:function(a,d){var c=document.createElement("img");c.retries=0;if(this.crossOrigin!=null){c.crossOrigin=this.crossOrigin}var b=this;this.browser.registerListener(c,"load",function(){if(d){d(c)}},false);this.browser.registerListener(c,"error",function(){c.retries++;if(c.retries<=b.maxRetries){setTimeout(function(){c.src=a},c.retries*1000)}else{if(d){d(null)}}},false);c.src=a;return c},loadXml:function(c,a,f){for(var e=0;e<=this.maxRetries;++e){var d=this.browser.createXMLHttpRequest();d.open("GET",c,false);d.send(null);if(d.status==200){var b=d.responseXML;if(b!=null){if(f){f(b)}return b}}if(e==that.maxRetries){if(f){f(null)}return null}}}};bigshot.Object.validate("bigshot.DefaultDataLoader",bigshot.DataLoader);bigshot.CachingDataLoader=function(){this.cache={};this.requested={};this.requestedTiles={}};bigshot.CachingDataLoader.prototype={browser:new bigshot.Browser(),loadImage:function(a,d){if(this.cache[a]){if(d){d(this.cache[a])}return this.cache[a]}else{if(this.requested[a]){if(d){this.requested[a].push(d)}return this.requestedTiles[a]}else{var c=this;this.requested[a]=new Array();if(d){this.requested[a].push(d)}var b=document.createElement("img");this.requestedTiles[a]=b;this.browser.registerListener(b,"load",function(){var f=c.requested[a];delete c.requested[a];delete c.requestedTiles[a];c.cache[a]=b;for(var e=0;e<f.length;++e){f[e](b)}},false);b.src=a;return b}}},loadXml:function(a,c,f){if(this.cache[a]){if(f){f(this.cache[a])}return this.cache[a]}else{if(this.requested[a]&&c){if(f){this.requested[a].push(f)}}else{var e=this.browser.createXMLHttpRequest();if(!this.requested[a]){this.requested[a]=new Array()}if(c){if(f){this.requested[a].push(f)}}var d=this;var b=function(){if(d.requested[a]){var g=null;if(e.status==200){g=e.responseXML}var l=d.requested[a];delete d.requested[a];d.cache[a]=g;for(var k=0;k<l.length;++k){l[k](g)}}return g};if(c){e.onreadystatechange=function(){if(e.readyState==4){b()}};e.open("GET",a,true);e.send()}else{e.open("GET",a,false);e.send();return b()}}}}};bigshot.Object.validate("bigshot.CachingDataLoader",bigshot.DataLoader);bigshot.Hotspot=function(a,e,b,d){var c=document.createElement("div");c.style.position="absolute";c.style.overflow="visible";this.element=c;this.x=a;this.y=e;this.w=b;this.h=d};bigshot.Hotspot.prototype={browser:new bigshot.Browser(),layout:function(c,e,d){var g=this.x*d+c;var f=this.y*d+e;var a=this.w*d;var b=this.h*d;this.element.style.top=f+"px";this.element.style.left=g+"px";this.element.style.width=a+"px";this.element.style.height=b+"px"},getElement:function(){return this.element}};bigshot.PointHotspot=function(a,i,b,e,f,g,c){bigshot.Hotspot.call(this,a,i,b,e);this.xo=f;this.yo=g;if(c){var d=this.getElement();d.style.backgroundImage="url('"+c+"')";d.style.backgroundRepeat="no-repeat"}};bigshot.PointHotspot.prototype={getLabel:function(){return this.label},layout:function(a,c,b){var e=this.x*b+a+this.xo;var d=this.y*b+c+this.yo;this.element.style.top=d+"px";this.element.style.left=e+"px";this.element.style.width=this.w+"px";this.element.style.height=this.h+"px"}};bigshot.Object.extend(bigshot.PointHotspot,bigshot.Hotspot);bigshot.Layer=function(){};bigshot.Layer.prototype={getContainer:function(){},setMaxTiles:function(a,b){},resize:function(a,b){},layout:function(g,e,f,a,d,c,i,b){}};bigshot.LabeledHotspot=function(a,e,b,c,d){bigshot.Hotspot.call(this,a,e,b,c);this.label=document.createElement("div");this.label.style.position="relative";this.label.style.display="inline-block";this.getElement().appendChild(this.label);this.label.innerHTML=d;this.labelSize=this.browser.getElementSize(this.label)};bigshot.LabeledHotspot.prototype={getLabel:function(){return this.label},layout:function(c,e,d){this.layout._super.call(this,c,e,d);var a=this.w*d;var b=this.h*d;this.label.style.top=(b+4)+"px";this.label.style.left=((a-this.labelSize.w)/2)+"px"}};bigshot.Object.extend(bigshot.LabeledHotspot,bigshot.Hotspot);bigshot.LinkHotspot=function(a,f,b,d,e,c){bigshot.LabeledHotspot.call(this,a,f,b,d,e);this.browser.registerListener(this.getElement(),"click",function(){document.location.href=c})};bigshot.Object.extend(bigshot.LinkHotspot,bigshot.LabeledHotspot);bigshot.HotspotLayer=function(a){this.image=a;this.hotspots=new Array();this.browser=new bigshot.Browser();this.container=a.createLayerContainer();this.parentContainer=a.getContainer();this.resize(0,0)};bigshot.HotspotLayer.prototype={getContainer:function(){return this.container},resize:function(a,b){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px"},layout:function(l,d,k,e,a,m,b,g){var c=Math.pow(2,this.image.getZoom());d-=b*e;k-=b*a;for(var f=0;f<this.hotspots.length;++f){this.hotspots[f].layout(d,k,c)}},setMaxTiles:function(b,a){},addHotspot:function(a){this.container.appendChild(a.getElement());this.hotspots.push(a)}};bigshot.Object.validate("bigshot.HotspotLayer",bigshot.Layer);bigshot.TileLayer=function(d,c,a,b,e){this.rows=new Array();this.browser=new bigshot.Browser();this.container=d.createLayerContainer();this.parentContainer=d.getContainer();this.parameters=c;this.w=a;this.h=b;this.imageTileCache=e;this.resize(a,b);return this};bigshot.TileLayer.prototype={getContainer:function(){return this.container},resize:function(a,d){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px";this.pixelWidth=this.parentContainer.clientWidth;this.pixelHeight=this.parentContainer.clientHeight;this.w=a;this.h=d;this.rows=new Array();this.browser.removeAllChildren(this.container);for(var f=0;f<d;++f){var g=new Array();for(var i=0;i<a;++i){var b=document.createElement("div");b.style.position="absolute";b.style.overflow="hidden";b.style.width=this.container.clientWidth+"px";b.style.height=this.container.clientHeight+"px";var e=document.createElement("div");e.style.position="relative";e.style.border="hidden";e.style.visibility="hidden";e.bigshotData={visible:false};g.push(e);this.container.appendChild(b);b.appendChild(e)}this.rows.push(g)}},layout:function(a,q,d,A,f,n,p,e){a=Math.min(0,Math.ceil(a));this.imageTileCache.resetUsed();var g=d;var b=0;for(var l=0;l<this.h;++l){var i=q;for(var t=0;t<this.w;++t){var z=this.rows[l][t];var k=z.bigshotData;if(i+n<0||i>this.pixelWidth||g+n<0||g>this.pixelHeight){if(k.visible){k.visible=false;z.style.visibility="hidden"}}else{b++;z.style.left=i+"px";z.style.top=g+"px";z.style.width=n+"px";z.style.height=n+"px";z.style.opacity=e;if(!k.visible){k.visible=true;z.style.visibility="visible"}var v=t+A;var u=l+f;if(this.parameters.wrapX){if(v<0||v>=this.imageTileCache.maxTileX){v=(v+this.imageTileCache.maxTileX)%this.imageTileCache.maxTileX}}if(this.parameters.wrapY){if(u<0||u>=this.imageTileCache.maxTileY){u=(u+this.imageTileCache.maxTileY)%this.imageTileCache.maxTileY}}var o=v+"_"+u+"_"+a;var s=v<0||v>=this.imageTileCache.maxTileX||u<0||u>=this.imageTileCache.maxTileY;if(s){if(!k.isOutside){var m=this.imageTileCache.getImage(v,u,a);this.browser.removeAllChildren(z);z.appendChild(m);k.image=m}k.isOutside=true;k.imageKey="EMPTY";k.image.style.width=n+"px";k.image.style.height=n+"px"}else{var m=this.imageTileCache.getImage(v,u,a);k.isOutside=false;if(k.imageKey!==o||k.isPartial){this.browser.removeAllChildren(z);z.appendChild(m);k.image=m;k.imageKey=o;k.isPartial=m.isPartial}k.image.style.width=n+"px";k.image.style.height=n+"px"}}i+=p}g+=p}},setMaxTiles:function(b,a){this.imageTileCache.setMaxTiles(b,a)}};bigshot.Object.validate("bigshot.TileLayer",bigshot.Layer);bigshot.LRUMap=function(){this.keyToTime={};this.counter=0;this.size=0};bigshot.LRUMap.prototype={access:function(a){this.remove(a);this.keyToTime[a]=this.counter;++this.counter;++this.size},remove:function(a){if(this.keyToTime[a]){delete this.keyToTime[a];--this.size;return true}else{return false}},getSize:function(){return this.size},leastUsed:function(){var b=this.counter+1;var c=null;for(var a in this.keyToTime){if(this.keyToTime[a]<b){b=this.keyToTime[a];c=a}}return c}};bigshot.ImageTileCache=function(d,a,c){var b=this;this.parameters=c;this.fullImage=null;c.dataLoader.loadImage(c.fileSystem.getPosterFilename(),function(e){b.fullImage=e;if(a){a()}});this.maxCacheSize=512;this.maxTileX=0;this.maxTileY=0;this.cachedImages={};this.requestedImages={};this.usedImages={};this.lastOnLoadFiredAt=0;this.imageRequests=0;this.lruMap=new bigshot.LRUMap();this.onLoaded=d;this.browser=new bigshot.Browser();this.partialImageSize=c.tileSize/4;this.POSTER_ZOOM_LEVEL=Math.log(c.posterSize/Math.max(c.width,c.height))/Math.log(2)};bigshot.ImageTileCache.prototype={resetUsed:function(){this.usedImages={}},setMaxTiles:function(b,a){this.maxTileX=b;this.maxTileY=a},getPartialImage:function(c,b,d){var a=this.getPartialImageFromDownsampled(c,b,d,0,0,this.parameters.tileSize,this.parameters.tileSize);if(a==null){a=this.getPartialImageFromPoster(c,b,d)}return a},getPartialImageFromPoster:function(d,c,e){if(this.fullImage&&this.fullImage.complete){var a=this.fullImage.width/this.parameters.width;var b=a*this.parameters.tileSize/Math.pow(2,e);x0=Math.floor(b*d);y0=Math.floor(b*c);w=Math.floor(b);h=Math.floor(b);return this.createPartialImage(this.fullImage,this.fullImage.width,x0,y0,w,h)}else{return null}},createPartialImage:function(f,l,b,q,r,g){var c=document.createElement("canvas");if(!c.width){return null}c.width=this.partialImageSize;c.height=this.partialImageSize;var s=c.getContext("2d");var d=f.width/l;var p=Math.floor(b*d);var o=Math.floor(q*d);var a=this.partialImageSize;var m=this.partialImageSize;r*=d;if(p+r>=f.width){var i=r;r=f.width-p;a*=r/i}g*=d;if(o+g>=f.height){var n=g;g=f.height-o;m*=g/n}try{s.drawImage(f,p,o,r,g,-0.1,-0.1,a+0.2,m+0.2)}catch(k){return null}return c},getPartialImageFromDownsampled:function(a,k,d,b,f,g,e){if(d<this.POSTER_ZOOM_LEVEL||d<this.parameters.minZoom){return null}var i=this.getImageKey(a,k,d);var c=this.cachedImages[i];if(c==null){this.requestImage(a,k,d)}if(c){return this.createPartialImage(c,this.parameters.tileSize,b,f,g,e)}else{g/=2;e/=2;b/=2;f/=2;if((a%2)==1){b+=this.parameters.tileSize/2}if((k%2)==1){f+=this.parameters.tileSize/2}a=Math.floor(a/2);k=Math.floor(k/2);--d;return this.getPartialImageFromDownsampled(a,k,d,b,f,g,e)}},getEmptyImage:function(){var a=document.createElement("img");if(this.parameters.emptyImage){a.src=this.parameters.emptyImage}else{a.src="data:image/gif,GIF89a%01%00%01%00%80%00%00%00%00%00%FF%FF%FF!%F9%04%00%00%00%00%00%2C%00%00%00%00%01%00%01%00%00%02%02D%01%00%3B"}return a},getImage:function(e,d,f){if(e<0||d<0||e>=this.maxTileX||d>=this.maxTileY){return this.getEmptyImage()}var b=this.getImageKey(e,d,f);this.lruMap.access(b);if(this.cachedImages[b]){if(this.usedImages[b]){var c=this.parameters.dataLoader.loadImage(this.getImageFilename(e,d,f));c.isPartial=false;return c}else{this.usedImages[b]=true;var a=this.cachedImages[b];return a}}else{this.requestImage(e,d,f);var a=this.getPartialImage(e,d,f);if(a!=null){a.isPartial=true;this.cachedImages[b]=a}else{a=this.getEmptyImage();if(a!=null){a.isPartial=true}}return a}},requestImage:function(d,c,e){var a=this.getImageKey(d,c,e);if(!this.requestedImages[a]){this.imageRequests++;var b=this;this.requestedImages[a]=true;this.parameters.dataLoader.loadImage(this.getImageFilename(d,c,e),function(f){delete b.requestedImages[a];b.imageRequests--;f.isPartial=false;b.cachedImages[a]=f;b.fireOnLoad()})}},fireOnLoad:function(){var a=new Date();if(this.imageRequests==0||a.getTime()>(this.lastOnLoadFiredAt+50)){this.purgeCache();this.lastOnLoadFiredAt=a.getTime();this.onLoaded()}},purgeCache:function(){for(var a=0;a<4;++a){if(this.lruMap.getSize()>this.maxCacheSize){var b=this.lruMap.leastUsed();this.lruMap.remove(b);delete this.cachedImages[b]}}},getImageKey:function(b,a,c){return"I"+b+"_"+a+"_"+c},getImageFilename:function(c,a,d){var b=this.parameters.fileSystem.getImageFilename(c,a,d);return b}};bigshot.ImageParameters=function(b){this.posterSize=0;this.emptyImage=null;this.suffix=null;this.width=0;this.height=0;this.container=null;this.minZoom=0;this.maxZoom=0;this.tileSize=0;this.overlap=0;this.wrapX=false;this.wrapY=false;this.basePath=null;this.fileSystemType="folder";this.fileSystem=null;this.dataLoader=new bigshot.DefaultDataLoader();this.touchUI=false;this.fling=true;this.maxTextureMagnification=1;if(b){for(var a in b){this[a]=b[a]}}this.merge=function(d,e){for(var c in d){if(e||!this[c]){this[c]=d[c]}}};return this};bigshot.ImageBase=function(b){bigshot.EventDispatcher.call(this);this.parameters=b;this.flying=0;this.container=b.container;this.x=b.width/2;this.y=b.height/2;this.zoom=0;this.width=b.width;this.height=b.height;this.minZoom=b.minZoom;this.maxZoom=b.maxZoom;this.tileSize=b.tileSize;this.overlap=0;this.imageTileCache=null;this.dragStart=null;this.dragged=false;this.layers=new Array();this.fullScreenHandler=null;this.currentGesture=null;var a=this;this.onresizeHandler=function(f){a.onresize()};var d=function(e){if(e.preventDefault){e.preventDefault()}return false};var c=function(e){if(e.clientX){return e}else{return{clientX:e.changedTouches[0].clientX,clientY:e.changedTouches[0].clientY,changedTouches:e.changedTouches}}};this.setupLayers();this.resize();this.allListeners={DOMMouseScroll:function(f){a.mouseWheel(f);return d(f)},mousewheel:function(f){a.mouseWheel(f);return d(f)},dblclick:function(f){a.mouseDoubleClick(f);return d(f)},mousedown:function(f){a.dragMouseDown(f);return d(f)},gesturestart:function(f){a.gestureStart(f);return d(f)},gesturechange:function(f){a.gestureChange(f);return d(f)},gestureend:function(f){a.gestureEnd(f);return d(f)},touchstart:function(f){a.dragMouseDown(c(f));return d(f)},mouseup:function(f){a.dragMouseUp(f);return d(f)},touchend:function(f){a.dragMouseUp(c(f));return d(f)},mousemove:function(f){a.dragMouseMove(f);return d(f)},mouseout:function(f){return d(f)},touchmove:function(f){a.dragMouseMove(c(f));return d(f)}};this.addEventListeners();this.browser.registerListener(window,"resize",a.onresizeHandler,false);this.zoomToFit()};bigshot.ImageBase.prototype={browser:new bigshot.Browser(),addEventListeners:function(){for(var a in this.allListeners){this.browser.registerListener(this.container,a,this.allListeners[a],false)}},removeEventListeners:function(){for(var a in this.allListeners){this.browser.unregisterListener(this.container,a,this.allListeners[a],false)}},setupLayers:function(){},getTextureStretch:function(){var a=Math.log(this.parameters.maxTextureMagnification/this.browser.getDevicePixelScale())/Math.LN2;return a},clampXY:function(k,g){var e=this.container.clientWidth;var d=this.container.clientHeight;var f=Math.pow(2,this.zoom);var b=e/f;var a=d/f;var i=function(n,q,o){var m=n/2;m=Math.min(q/2,m);if(o<m){o=m}var l=q-n/2;l=Math.max(q/2,l);if(o>l){o=l}return o};var c={};if(k!=null){c.x=i(b,this.width,k)}if(g!=null){c.y=i(a,this.height,g)}return c},layout:function(){var p=this.container.clientWidth;var c=this.container.clientHeight;var q=Math.min(this.maxZoom,Math.max(this.zoom-this.getTextureStretch(),this.minZoom));var m=Math.min(0,Math.ceil(q));var e=Math.pow(2,m);var n=this.clampXY(this.x,this.y);if(!this.parameters.wrapY){this.y=n.y}if(!this.parameters.wrapX){this.x=n.x}var v=this.tileSize/e;var k=Math.pow(2,this.zoom-m);var d=this.tileSize*k;var o=this.width/v;var l=this.height/v;var g=this.x/v;var f=this.y/v;var b=g-(p/2)/d;var a=f-(c/2)/d;var t=Math.floor(b);var s=Math.floor(a);var x=Math.round((b-t)*d);var u=Math.round((a-s)*d);for(var r=0;r<this.layers.length;++r){this.layers[r].layout(q,-x-d,-u-d,t-1,s-1,Math.ceil(d),Math.ceil(d),1)}},resize:function(){var c=Math.ceil(2*this.container.clientWidth/this.tileSize)+2;var a=Math.ceil(2*this.container.clientHeight/this.tileSize)+2;for(var b=0;b<this.layers.length;++b){this.layers[b].resize(c,a)}},createLayerContainer:function(){var a=document.createElement("div");a.style.position="absolute";a.style.overflow="hidden";return a},getContainer:function(){return this.container},addLayer:function(a){this.container.appendChild(a.getContainer());this.layers.push(a)},clampZoom:function(a){return Math.min(this.maxZoom,Math.max(a,this.minZoom))},setZoom:function(c,e){this.zoom=this.clampZoom(c);var g=Math.ceil(this.zoom-this.getTextureStretch());var b=Math.pow(2,g);var f=Math.ceil(b*this.width/this.tileSize);var d=Math.ceil(b*this.height/this.tileSize);for(var a=0;a<this.layers.length;++a){this.layers[a].setMaxTiles(f,d)}if(e){this.layout()}},setMaxZoom:function(a){this.maxZoom=a},getMaxZoom:function(){return this.maxZoom},setMinZoom:function(a){this.minZoom=a},getMinZoom:function(){return this.minZoom},adjustCoordinateForZoom:function(e,a,d,c){var b=Math.pow(2,d)/Math.pow(2,c);return a+(e-a)*b},gestureStart:function(a){this.currentGesture={startZoom:this.zoom,scale:a.scale}},gestureEnd:function(a){this.currentGesture=null;if(this.dragStart){this.dragStart.hadGesture=true}},gestureChange:function(d){if(this.currentGesture){if(this.dragStart){this.dragStart.hadGesture=true}var c=this.clampZoom(this.currentGesture.startZoom+Math.log(d.scale)/Math.log(2));var e=this.getZoom();if(this.currentGesture.clientX!==undefined&&this.currentGesture.clientY!==undefined){var b=this.clientToImage(this.currentGesture.clientX,this.currentGesture.clientY);var a=this.adjustCoordinateForZoom(this.x,b.x,e,c);var f=this.adjustCoordinateForZoom(this.y,b.y,e,c);this.moveTo(a,f,c)}else{this.setZoom(c);this.layout()}}},dragMouseDown:function(a){this.dragStart={x:a.clientX,y:a.clientY};this.dragLast={clientX:a.clientX,clientY:a.clientY,dx:0,dy:0,dt:1000000,time:new Date().getTime()};this.dragged=false},dragMouseMove:function(a){if(this.currentGesture!=null&&a.changedTouches!=null&&a.changedTouches.length>0){var e=0;var d=0;for(var k=0;k<a.changedTouches.length;++k){e+=a.changedTouches[k].clientX;d+=a.changedTouches[k].clientY}this.currentGesture.clientX=e/a.changedTouches.length;this.currentGesture.clientY=d/a.changedTouches.length}if(this.currentGesture==null&&this.dragStart!=null){var l={x:a.clientX-this.dragStart.x,y:a.clientY-this.dragStart.y};if(l.x!=0||l.y!=0){this.dragged=true}var c=Math.pow(2,this.zoom);var g=l.x/c;var f=l.y/c;this.dragStart={x:a.clientX,y:a.clientY};var b=new Date().getTime()-this.dragLast.time;if(b>20){this.dragLast={dx:this.dragLast.clientX-a.clientX,dy:this.dragLast.clientY-a.clientY,dt:b,clientX:a.clientX,clientY:a.clientY,time:new Date().getTime()}}this.moveTo(this.x-g,this.y-f)}},dragMouseUp:function(a){if(this.currentGesture==null&&!this.dragStart.hadGesture&&this.dragStart!=null){this.dragStart=null;if(!this.dragged){this.mouseClick(a)}else{var e=Math.pow(2,this.zoom);var k=this.dragLast.dx/e;var i=this.dragLast.dy/e;var d=Math.sqrt(k*k+i*i);var c=this.dragLast.dt;var b=new Date().getTime()-this.dragLast.time;this.dragLast=null;var g=c>0?(d/c):0;if(g>0.05&&b<250&&c>20&&this.parameters.fling){var f=new Date().getTime();k/=c;i/=c;this.flyTo(this.x+k*250,this.y+i*250,this.zoom)}}}},mouseDoubleClick:function(b){var a=this.createImageEventData({type:"dblclick",clientX:b.clientX,clientY:b.clientY});this.fireEvent("dblclick",a);if(!a.defaultPrevented){this.flyTo(a.imageX,a.imageY,this.zoom+0.5)}},getZoom:function(){return this.zoom},moveTo:function(a,d,b,c){this.stopFlying();if(a!=null||d!=null){this.setPosition(a,d,false)}if(b!=null){this.setZoom(b,false)}if(c==undefined||c==true){this.layout()}},setPosition:function(a,d,c){var b=this.clampXY(a,d);if(a!=null){if(this.parameters.wrapX){if(a<0||a>=this.width){a=(a+this.width)%this.width}}else{a=b.x}this.x=Math.max(0,Math.min(this.width,a))}if(d!=null){if(this.parameters.wrapY){if(d<0||d>=this.height){d=(d+this.height)%this.height}}else{d=b.y}this.y=Math.max(0,Math.min(this.height,d))}if(c!=false){this.layout()}},fitZoom:function(c,a){var b=a/c;return Math.log(b)/Math.LN2},getZoomToFitValue:function(){return Math.min(this.fitZoom(this.parameters.width,this.container.clientWidth),this.fitZoom(this.parameters.height,this.container.clientHeight))},getZoomToFillValue:function(){return Math.max(this.fitZoom(this.parameters.width,this.container.clientWidth),this.fitZoom(this.parameters.height,this.container.clientHeight))},zoomToFit:function(){this.moveTo(null,null,this.getZoomToFitValue())},zoomToFill:function(){this.moveTo(null,null,this.getZoomToFillValue())},zoomToFitHeight:function(){this.moveTo(null,null,this.fitZoom(this.parameters.height,this.container.clientHeight))},zoomToFitWidth:function(){this.moveTo(null,null,this.fitZoom(this.parameters.width,this.container.clientWidth))},flyZoomToFitHeight:function(){this.flyTo(null,this.parameters.height/2,this.fitZoom(this.parameters.height,this.container.clientHeight))},flyZoomToFitWidth:function(){this.flyTo(this.parameters.width/2,null,this.fitZoom(this.parameters.width,this.container.clientWidth))},flyZoomToFit:function(){this.flyTo(this.parameters.width/2,this.parameters.height/2,this.getZoomToFitValue())},clientToImage:function(c,a){var b=Math.pow(2,this.zoom);return{x:(c-this.container.clientWidth/2)/b+this.x,y:(a-this.container.clientHeight/2)/b+this.y}},mouseWheelHandler:function(g,d){var e=false;if(g>0){e=0.5}else{if(g<0){e=-0.5}}if(e){var b=this.clientToImage(d.clientX,d.clientY);var c=Math.min(this.maxZoom,Math.max(this.getZoom()+e,this.minZoom));var a=this.adjustCoordinateForZoom(this.x,b.x,this.getZoom(),c);var f=this.adjustCoordinateForZoom(this.y,b.y,this.getZoom(),c);this.flyTo(a,f,c,true)}},mouseWheel:function(a){var b=0;if(!a){a=window.event}if(a.wheelDelta){b=a.wheelDelta/120;if(window.opera){b=-b}}else{if(a.detail){b=-a.detail}}if(b){this.mouseWheelHandler(b,a)}if(a.preventDefault){a.preventDefault()}a.returnValue=false},onresize:function(){this.resize();this.layout()},getX:function(){return this.x},getY:function(){return this.y},stopFlying:function(){this.flying++},flyTo:function(n,m,r,e){var g=this;n=n!=null?n:this.x;m=m!=null?m:this.y;r=r!=null?r:this.zoom;e=e!=null?e:false;var d=this.x;var c=this.y;var p=this.zoom;var o=this.clampXY(n,m);var l=this.parameters.wrapX?n:o.x;var i=this.parameters.wrapY?m:o.y;var b=Math.min(this.maxZoom,Math.max(r,this.minZoom));this.flying++;var a=this.flying;var f=new Date().getTime();var q=function(A,y,u,t,s){var z=(y-A);var x=-z*Math.pow(2,-u*t);var v=u*s;if(z<0){x=Math.max(0,x-v)}else{x=Math.min(0,x+v)}return y+x};var k=function(){if(g.flying==a){var v=(new Date().getTime()-f)/1000;var s=q(d,l,v,e?10:4,e?0.2:1);var y=q(c,i,v,e?10:4,e?0.2:1);var x=q(p,b,v,10,0.2);var t=true;var u=Math.min(Math.pow(2,g.getZoom()),1);if(Math.abs(s-l)<(0.5*u)){s=l}else{t=false}if(Math.abs(y-i)<(0.5*u)){y=i}else{t=false}if(Math.abs(x-b)<0.02){x=b}else{t=false}g.setPosition(s,y,false);g.setZoom(x,false);g.layout();if(!t){g.browser.requestAnimationFrame(k,g.container)}}};this.browser.requestAnimationFrame(k,this.container)},rectVisibleAtZoomLevel:function(a,b){return Math.min(this.fitZoom(a,this.container.clientWidth),this.fitZoom(b,this.container.clientHeight))},getTouchAreaBaseSize:function(){var a=((this.container.clientWidth+this.container.clientHeight)/2)*0.2;return Math.min(a,Math.min(this.container.clientWidth,this.container.clientHeight)/6)},createImageEventData:function(b){var a=this.browser.getElementPosition(this.container);b.localX=b.clientX-a.x;b.localY=b.clientY-a.y;var c=Math.pow(2,this.zoom);b.imageX=(b.localX-this.container.clientWidth/2)/c+this.x;b.imageY=(b.localY-this.container.clientHeight/2)/c+this.y;b.target=this;b.currentTarget=this;return new bigshot.ImageEvent(b)},mouseClick:function(b){var a=this.createImageEventData({type:"click",clientX:b.clientX,clientY:b.clientY});this.fireEvent("click",a)},showTouchUI:function(f,g){if(!f){f=2500}if(!g){g=1000}var a=this.getTouchAreaBaseSize();var n=this.getTouchAreaBaseSize();var e=this.container.clientWidth/2;var d=this.container.clientHeight/2;var o=document.createElement("div");o.style.position="absolute";o.style.zIndex="9999";o.style.opacity=0.9;o.style.width=this.container.clientWidth+"px";o.style.height=this.container.clientHeight+"px";var b=document.createElement("div");b.style.position="absolute";var m=document.createElement("div");m.style.position="relative";m.style.background="black";m.style.textAlign="center";m.style.top=(d-n)+"px";m.style.left=(e-n)+"px";m.style.width=(2*n)+"px";m.style.height=(2*n)+"px";o.appendChild(b);b.appendChild(m);m.innerHTML="<span style='display:inline-box; position:relative; vertical-align:middle; font-size: 20pt; top: 10pt; color:white'>ZOOM IN</span>";var c=document.createElement("div");c.style.position="absolute";var l=document.createElement("div");l.style.position="relative";l.style.border=a+"px solid black";l.style.top="0px";l.style.left="0px";l.style.textAlign="center";l.style.width=this.container.clientWidth+"px";l.style.height=this.container.clientHeight+"px";l.style.MozBoxSizing=l.style.boxSizing=l.style.WebkitBoxSizing="border-box";l.innerHTML="<span style='position:relative; font-size: 20pt; top: -25pt; color:white'>ZOOM OUT</span>";c.appendChild(l);o.appendChild(c);this.container.appendChild(o);var k=this;var i=0.9;var q=g/50;if(q<1){q=1}var p=function(){i=i-(0.9/q);if(i<0){k.container.removeChild(o)}else{o.style.opacity=i;setTimeout(p,50)}};setTimeout(p,f)},exitFullScreen:function(){if(this.fullScreenHandler){this.removeEventListeners();this.fullScreenHandler.close();this.addEventListeners();this.fullScreenHandler=null;return}},fullScreen:function(a){if(this.fullScreenHandler){return}var c=document.createElement("div");c.style.position="absolute";c.style.fontSize="16pt";c.style.top="128px";c.style.width="100%";c.style.color="white";c.style.padding="16px";c.style.zIndex="9999";c.style.textAlign="center";c.style.opacity="0.75";c.innerHTML="<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";var b=this;this.fullScreenHandler=new bigshot.FullScreen(this.container);this.fullScreenHandler.restoreSize=true;this.fullScreenHandler.addOnResize(function(){if(b.fullScreenHandler&&b.fullScreenHandler.isFullScreen){b.container.style.width=window.innerWidth+"px";b.container.style.height=window.innerHeight+"px"}b.onresize()});this.fullScreenHandler.addOnClose(function(){if(c.parentNode){try{div.removeChild(c)}catch(d){}}b.fullScreenHandler=null});if(a){this.fullScreenHandler.addOnClose(function(){a()})}this.removeEventListeners();this.fullScreenHandler.open();this.addEventListeners();if(this.fullScreenHandler.getRootElement()){this.fullScreenHandler.getRootElement().appendChild(c);setTimeout(function(){var e=0.75;var d=function(){e-=0.02;if(c.parentNode){if(e<=0){try{div.removeChild(c)}catch(f){}}else{c.style.opacity=e;setTimeout(d,20)}}};setTimeout(d,20)},3500)}return function(){b.fullScreenHandler.close()}},dispose:function(){this.browser.unregisterListener(window,"resize",this.onresizeHandler,false);this.removeEventListeners()}};bigshot.Object.extend(bigshot.ImageBase,bigshot.EventDispatcher);bigshot.Image=function(a){bigshot.setupFileSystem(a);a.merge(a.fileSystem.getDescriptor(),false);bigshot.ImageBase.call(this,a)};bigshot.Image.prototype={setupLayers:function(){var a=this;this.thisTileCache=new bigshot.ImageTileCache(function(){a.layout()},null,this.parameters);this.addLayer(new bigshot.TileLayer(this,this.parameters,0,0,this.thisTileCache))}};bigshot.Object.extend(bigshot.Image,bigshot.ImageBase);bigshot.HTMLElementLayer=function(d,b,c,a){this.hotspots=new Array();this.browser=new bigshot.Browser();this.image=d;this.container=d.createLayerContainer();this.parentContainer=d.getContainer();this.element=b;this.parentContainer.appendChild(b);this.w=c;this.h=a;this.resize(0,0)};bigshot.HTMLElementLayer.prototype={getContainer:function(){return this.container},resize:function(a,b){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px"},layout:function(i,d,g,e,a,k,b,f){var c=Math.pow(2,this.image.getZoom());d-=b*e;g-=b*a;this.element.style.top=g+"px";this.element.style.left=d+"px";this.element.style.width=(this.w*c)+"px";this.element.style.height=(this.h*c)+"px"},setMaxTiles:function(b,a){}};bigshot.Object.validate("bigshot.HTMLElementLayer",bigshot.Layer);bigshot.HTMLDivElementLayer=function(e,b,c,a,f,d){this.wrapX=f;this.wrapY=d;this.hotspots=new Array();this.browser=new bigshot.Browser();this.image=e;this.container=e.createLayerContainer();this.parentContainer=e.getContainer();this.element=b;this.parentContainer.appendChild(b);this.w=c;this.h=a;this.resize(0,0)};bigshot.HTMLDivElementLayer.prototype={getContainer:function(){return this.container},resize:function(a,b){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px"},layout:function(n,e,m,f,a,o,b,k){var d=Math.pow(2,this.image.getZoom());e-=b*f;m-=b*a;var c=(this.w*d);var l=(this.h*d);this.element.style.backgroundSize=c+"px "+l+"px";var i="0px";var g="0px";if(this.wrapY){this.element.style.top="0px";this.element.style.height=(this.parentContainer.clientHeight)+"px";g=m+"px"}else{this.element.style.top=m+"px";this.element.style.height=l+"px"}if(this.wrapX){this.element.style.left="0px";this.element.style.width=(this.parentContainer.clientWidth)+"px";i=e+"px"}else{this.element.style.left=e+"px";this.element.style.width=c+"px"}this.element.style.backgroundPosition=i+" "+g},setMaxTiles:function(b,a){}};bigshot.Object.validate("bigshot.HTMLDivElementLayer",bigshot.Layer);bigshot.SimpleImage=function(a,b){a.merge({fileSystem:null,fileSystemType:"simple",maxTextureMagnification:1,tileSize:1024},true);if(b){a.merge({width:b.width,height:b.height});this.imgElement=b}else{if(a.width==0||a.height==0){throw new Error("No imgElement and missing width or height in ImageParameters")}}bigshot.setupFileSystem(a);bigshot.ImageBase.call(this,a)};bigshot.SimpleImage.prototype={setupLayers:function(){if(!this.imgElement){this.imgElement=document.createElement("div");this.imgElement.style.backgroundImage="url('"+this.parameters.basePath+"')";this.imgElement.style.position="absolute";if(!this.parameters.wrapX&&!this.parameters.wrapY){this.imgElement.style.backgroundRepeat="no-repeat"}else{if(this.parameters.wrapX&&!this.parameters.wrapY){this.imgElement.style.backgroundRepeat="repeat-x"}else{if(!this.parameters.wrapX&&this.parameters.wrapY){this.imgElement.style.backgroundRepeat="repeat-y"}else{if(this.parameters.wrapX&&this.parameters.wrapY){this.imgElement.style.backgroundRepeat="repeat"}}}}}this.addLayer(new bigshot.HTMLDivElementLayer(this,this.imgElement,this.parameters.width,this.parameters.height,this.parameters.wrapX,this.parameters.wrapY))}};bigshot.Object.extend(bigshot.SimpleImage,bigshot.ImageBase);bigshot.FileSystem=function(){};bigshot.FileSystem.prototype={getFilename:function(a){},getImageFilename:function(b,a,c){},setPrefix:function(a){},getDescriptor:function(){},getPosterFilename:function(){}};bigshot.setupFileSystem=function(a){if(!a.fileSystem){if(a.fileSystemType=="archive"){a.fileSystem=new bigshot.ArchiveFileSystem(a)}else{if(a.fileSystemType=="dzi"){a.fileSystem=new bigshot.DeepZoomImageFileSystem(a)}else{if(a.fileSystemType=="simple"){a.fileSystem=new bigshot.SimpleFileSystem(a)}else{a.fileSystem=new bigshot.FolderFileSystem(a)}}}}};bigshot.SimpleFileSystem=function(a){this.parameters=a};bigshot.SimpleFileSystem.prototype={getDescriptor:function(){return{}},getPosterFilename:function(){return null},getFilename:function(a){return null},getImageFilename:function(b,a,c){return null},getPrefix:function(){return""},setPrefix:function(a){this.prefix=a}};bigshot.Object.validate("bigshot.SimpleFileSystem",bigshot.FileSystem);bigshot.FolderFileSystem=function(a){this.prefix=null;this.suffix="";this.parameters=a};bigshot.FolderFileSystem.prototype={getDescriptor:function(){this.browser=new bigshot.Browser();var b=this.browser.createXMLHttpRequest();b.open("GET",this.getFilename("descriptor"),false);b.send(null);var c={};if(b.status==200){var d=b.responseText.split(":");for(var a=0;a<d.length;a+=2){if(d[a]=="suffix"){c[d[a]]=d[a+1]}else{c[d[a]]=parseInt(d[a+1])}}this.suffix=c.suffix;return c}else{throw new Error("Unable to find descriptor.")}},getPosterFilename:function(){return this.getFilename("poster"+this.suffix)},setPrefix:function(a){this.prefix=a},getPrefix:function(){if(this.prefix){return this.prefix+"/"}else{return""}},getFilename:function(a){return this.parameters.basePath+"/"+this.getPrefix()+a},getImageFilename:function(c,b,d){var a=(-d)+"/"+c+"_"+b+this.suffix;return this.getFilename(a)}};bigshot.Object.validate("bigshot.FolderFileSystem",bigshot.FileSystem);bigshot.DeepZoomImageFileSystem=function(a){this.prefix="";this.suffix="";this.DZ_NAMESPACE="http://schemas.microsoft.com/deepzoom/2009";this.fullZoomLevel=0;this.posterName="";this.parameters=a};bigshot.DeepZoomImageFileSystem.prototype={getDescriptor:function(){var e={};var b=this.parameters.dataLoader.loadXml(this.parameters.basePath+this.prefix+".xml",false);var d=b.getElementsByTagName("Image")[0];var c=b.getElementsByTagName("Size")[0];e.width=parseInt(c.getAttribute("Width"));e.height=parseInt(c.getAttribute("Height"));e.tileSize=parseInt(d.getAttribute("TileSize"));e.overlap=parseInt(d.getAttribute("Overlap"));e.suffix="."+d.getAttribute("Format");e.posterSize=e.tileSize;this.suffix=e.suffix;this.fullZoomLevel=Math.ceil(Math.log(Math.max(e.width,e.height))/Math.LN2);e.minZoom=-this.fullZoomLevel;var a=Math.ceil(Math.log(e.tileSize)/Math.LN2);this.posterName=this.getImageFilename(0,0,a-this.fullZoomLevel);return e},setPrefix:function(a){this.prefix=a},getPosterFilename:function(){return this.posterName},getFilename:function(a){return this.parameters.basePath+this.prefix+"/"+a},getImageFilename:function(d,c,e){var a=this.fullZoomLevel+e;var b=a+"/"+d+"_"+c+this.suffix;return this.getFilename(b)}};bigshot.ArchiveFileSystem=function(d){this.indexSize=0;this.offset=0;this.index={};this.prefix="";this.suffix="";this.parameters=d;var a=new bigshot.Browser();var c=a.createXMLHttpRequest();c.open("GET",this.parameters.basePath+"&start=0&length=24&type=text/plain",false);c.send(null);if(c.status==200){if(c.responseText.substring(0,7)!="BIGSHOT"){alert('"'+this.parameters.basePath+'" is not a valid bigshot file');return}this.indexSize=parseInt(c.responseText.substring(8),16);this.offset=this.indexSize+24;c.open("GET",this.parameters.basePath+"&type=text/plain&start=24&length="+this.indexSize,false);c.send(null);if(c.status==200){var e=c.responseText.split(":");for(var b=0;b<e.length;b+=3){this.index[e[b]]={start:parseInt(e[b+1])+this.offset,length:parseInt(e[b+2])}}}else{alert('The index of "'+this.parameters.basePath+'" could not be loaded: '+c.status)}}else{alert('The header of "'+this.parameters.basePath+'" could not be loaded: '+c.status)}};bigshot.ArchiveFileSystem.prototype={getDescriptor:function(){this.browser=new bigshot.Browser();var b=this.browser.createXMLHttpRequest();b.open("GET",this.getFilename("descriptor"),false);b.send(null);var c={};if(b.status==200){var d=b.responseText.split(":");for(var a=0;a<d.length;a+=2){if(d[a]=="suffix"){c[d[a]]=d[a+1]}else{c[d[a]]=parseInt(d[a+1])}}this.suffix=c.suffix;return c}else{throw new Error("Unable to find descriptor.")}},getPosterFilename:function(){return this.getFilename("poster"+this.suffix)},getFilename:function(a){a=this.getPrefix()+a;if(!this.index[a]&&console){console.log("Can't find "+a)}var b=this.parameters.basePath+"&start="+this.index[a].start+"&length="+this.index[a].length;if(a.substring(a.length-4)==".jpg"){b=b+"&type=image/jpeg"}else{if(a.substring(a.length-4)==".png"){b=b+"&type=image/png"}else{b=b+"&type=text/plain"}}return b},getImageFilename:function(c,b,d){var a=(-d)+"/"+c+"_"+b+this.suffix;return this.getFilename(a)},getPrefix:function(){if(this.prefix){return this.prefix+"/"}else{return""}},setPrefix:function(a){this.prefix=a}};bigshot.Object.validate("bigshot.ArchiveFileSystem",bigshot.FileSystem);bigshot.VRTileCache=function(){};bigshot.VRTileCache.prototype={getTexture:function(b,a,c){},purge:function(){},dispose:function(){}};bigshot.ImageVRTileCache=function(c,a,b){this.imageTileCache=new bigshot.ImageTileCache(c,a,b);this.imageTileCache.setMaxTiles(999999,999999)};bigshot.ImageVRTileCache.prototype={getTexture:function(c,b,d){var a=this.imageTileCache.getImage(c,b,d);return a},purge:function(){this.imageTileCache.resetUsed()},dispose:function(){}};bigshot.Object.validate("bigshot.ImageVRTileCache",bigshot.VRTileCache);bigshot.TextureTileCache=function(d,a,c,b){this.parameters=c;this.webGl=b;this.fullImage=c.dataLoader.loadImage(c.fileSystem.getPosterFilename(),a);this.maxTextureCacheSize=512;this.maxImageCacheSize=2048;this.cachedTextures={};this.cachedImages={};this.requestedImages={};this.lastOnLoadFiredAt=0;this.imageRequests=0;this.partialImageSize=c.tileSize/8;this.imageLruMap=new bigshot.LRUMap();this.textureLruMap=new bigshot.LRUMap();this.onLoaded=d;this.browser=new bigshot.Browser();this.disposed=false};bigshot.TextureTileCache.prototype={getPartialTexture:function(b,p,e){if(this.fullImage.complete){var c=document.createElement("canvas");if(!c.width){return null}c.width=this.partialImageSize;c.height=this.partialImageSize;var o=c.getContext("2d");var q=this.parameters.posterSize/Math.max(this.parameters.width,this.parameters.height);var m=Math.floor(q*this.parameters.width);var d=Math.floor(q*this.parameters.height);var n=q*(this.parameters.tileSize-this.parameters.overlap)/Math.pow(2,e);var k=Math.floor(n*b);var i=Math.floor(n*p);var l=Math.floor(n);var f=Math.floor(n);var a=this.partialImageSize+2;var g=this.partialImageSize+2;if(k+l>m){l=m-k;a=this.partialImageSize*(l/Math.floor(n))}if(i+f>d){f=d-i;g=this.partialImageSize*(f/Math.floor(n))}o.drawImage(this.fullImage,k,i,l,f,-1,-1,a,g);return this.webGl.createImageTextureFromImage(c,this.parameters.textureMinFilter,this.parameters.textureMagFilter)}else{return null}},setCachedTexture:function(b,a){if(this.cachedTextures[b]!=null){this.webGl.deleteTexture(this.cachedTextures[b])}this.cachedTextures[b]=a},getTexture:function(d,c,e){var b=this.getImageKey(d,c,e);this.textureLruMap.access(b);this.imageLruMap.access(b);if(this.cachedTextures[b]){return this.cachedTextures[b]}else{if(this.cachedImages[b]){this.setCachedTexture(b,this.webGl.createImageTextureFromImage(this.cachedImages[b],this.parameters.textureMinFilter,this.parameters.textureMagFilter));return this.cachedTextures[b]}else{this.requestImage(d,c,e);var a=this.getPartialTexture(d,c,e);if(a){this.setCachedTexture(b,a)}return a}}},requestImage:function(d,c,e){var a=this.getImageKey(d,c,e);if(!this.requestedImages[a]){this.imageRequests++;var b=this;this.parameters.dataLoader.loadImage(this.getImageFilename(d,c,e),function(g){if(b.disposed){return}b.cachedImages[a]=g;b.setCachedTexture(a,b.webGl.createImageTextureFromImage(g,b.parameters.textureMinFilter,b.parameters.textureMagFilter));delete b.requestedImages[a];b.imageRequests--;var f=new Date();if(b.imageRequests==0||f.getTime()>(b.lastOnLoadFiredAt+50)){b.lastOnLoadFiredAt=f.getTime();b.onLoaded()}});this.requestedImages[a]=true}},purge:function(){var a=this;this.purgeCache(this.textureLruMap,this.cachedTextures,this.maxTextureCacheSize,function(b){a.webGl.deleteTexture(a.cachedTextures[b])});this.purgeCache(this.imageLruMap,this.cachedImages,this.maxImageCacheSize,function(b){})},purgeCache:function(b,c,a,e){for(var d=0;d<64;++d){if(b.getSize()>a){var f=b.leastUsed();b.remove(f);if(e){e(f)}delete c[f]}else{break}}},getImageKey:function(b,a,c){return"I"+b+"_"+a+"_"+c},getImageFilename:function(c,a,d){var b=this.parameters.fileSystem.getImageFilename(c,a,d);return b},dispose:function(){this.disposed=true;for(var a in this.cachedTextures){this.webGl.deleteTexture(this.cachedTextures[a])}}};bigshot.Object.validate("bigshot.TextureTileCache",bigshot.VRTileCache);bigshot.VRFace=function(b,l,g,d,n,m,e){var i=this;this.owner=b;this.key=l;this.topLeft=g;this.width=d;this.u=n;this.v=m;this.updated=false;this.parameters=new Object();for(var f in this.owner.getParameters()){this.parameters[f]=this.owner.getParameters()[f]}bigshot.setupFileSystem(this.parameters);this.parameters.fileSystem.setPrefix("face_"+l);this.parameters.merge(this.parameters.fileSystem.getDescriptor(),false);this.tileCache=b.renderer.createTileCache(function(){i.updated=true;b.renderUpdated(bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE)},e,this.parameters);this.fullSize=this.parameters.width;this.overlap=this.parameters.overlap;this.tileSize=this.parameters.tileSize;this.minDivisions=0;var c=Math.log(this.fullSize-this.overlap)/Math.LN2;var a=Math.log(this.tileSize-this.overlap)/Math.LN2;this.maxDivisions=Math.floor(c-a);this.maxTesselation=this.parameters.maxTesselation>=0?this.parameters.maxTesselation:this.maxDivisions};bigshot.VRFace.prototype={browser:new bigshot.Browser(),dispose:function(){this.tileCache.dispose()},pt3dMultAdd:function(d,b,c){return{x:d.x*b+c.x,y:d.y*b+c.y,z:d.z*b+c.z}},pt3dMult:function(b,a){return{x:b.x*a,y:b.y*a,z:b.z*a}},generateFace:function(g,e,d,b,a,c){d*=this.tileSize/(this.tileSize-this.overlap);var f=this.tileCache.getTexture(b,a,-this.maxDivisions+c);g.addQuad(this.owner.renderer.createTexturedQuad(e,this.pt3dMult(this.u,d),this.pt3dMult(this.v,d),f))},VISIBLE_NONE:0,VISIBLE_SOME:1,VISIBLE_ALL:2,pointInRect:function(b,c,a){return(b.x>=c.x&&b.y>=c.y&&b.x<a.x&&b.y<a.y)},intersectWithView:function intersectWithView(y){var d=0;var c=[];var n=y.length;for(var s=0;s<n;++s){if(y[s]==null){d++}else{c.push(y[s])}}if(d==4){return this.VISIBLE_NONE}var x=c[0].x;var u=c[0].y;var v=x;var t=u;var m=0;var k=0;var l=this.viewportWidth;var g=this.viewportHeight;var a=0;var b=c.length;for(var s=1;s<b;++s){var f=c[s].x;var e=c[s].y;x=x<f?x:f;u=u<e?u:e;v=v>f?v:f;t=t>e?t:e}var r=x>m?x:m;var q=u>k?u:k;var p=v<l?v:l;var o=t<g?t:g;if(r<=p&&q<=o){return this.VISIBLE_SOME}return this.VISIBLE_NONE},screenDistance:function screenDistance(b,a){if(b==null||a==null){return 0}return Math.max(Math.abs(b.x-a.x),Math.abs(b.y-a.y))},transformToScreen:function transformToScreen(a){return this.owner.renderer.transformToScreen(a)},generateSubdivisionFace:function generateSubdivisionFace(q,n,m,b,v,t,z){if(!z){z=new Array(4);z[0]=this.transformToScreen(n);var l=this.pt3dMultAdd(this.u,m,n);z[1]=this.transformToScreen(l);var o=this.pt3dMultAdd(this.v,m,n);z[3]=this.transformToScreen(o);var e=this.pt3dMultAdd(this.v,m,l);z[2]=this.transformToScreen(e)}var y=this.intersectWithView(z);if(y==this.VISIBLE_NONE){return}var k=0;for(var p=0;p<z.length;++p){var g=(p+1)%4;k=Math.max(this.screenDistance(z[p],z[g]),k)}k*=this.owner.browser.getDevicePixelScale();if(b<this.minDivisions||((k>this.owner.maxTextureMagnification*(this.tileSize-this.overlap))&&b<this.maxDivisions&&b<this.maxTesselation)){var u=this.pt3dMultAdd({x:this.u.x+this.v.x,y:this.u.y+this.v.y,z:this.u.z+this.v.z},m/2,n);var s=this.pt3dMultAdd(this.u,m/2,n);var f=this.pt3dMultAdd(this.v,m/2,n);var r=this.transformToScreen(u);var x=this.transformToScreen(f);var d=this.transformToScreen(s);var c=this.transformToScreen(this.pt3dMultAdd(this.u,m,f));var a=this.transformToScreen(this.pt3dMultAdd(this.v,m,s));this.generateSubdivisionFace(q,n,m/2,b+1,v*2,t*2,[z[0],d,r,x]);this.generateSubdivisionFace(q,s,m/2,b+1,v*2+1,t*2,[d,z[1],c,r]);this.generateSubdivisionFace(q,f,m/2,b+1,v*2,t*2+1,[x,r,a,z[3]]);this.generateSubdivisionFace(q,u,m/2,b+1,v*2+1,t*2+1,[r,c,z[2],a])}else{this.generateFace(q,n,m,v,t,b)}},isUpdated:function(){return this.updated},render:function(a){this.updated=false;this.viewportWidth=this.owner.renderer.getViewportWidth();this.viewportHeight=this.owner.renderer.getViewportHeight();this.generateSubdivisionFace(a,this.topLeft,this.width,0,0,0)},endRender:function(){this.tileCache.purge()}};bigshot.WebGLUtil={debug:false,contextNames:["webgl","experimental-webgl"],createContext0:function(a,b){var c=this.debug?WebGLDebugUtils.makeDebugContext(a.getContext(b)):a.getContext(b);return c},createContext:function(a){for(var b=0;b<this.contextNames.length;++b){try{var d=this.createContext0(a,this.contextNames[b]);if(d){return d}}catch(c){}}throw new Error("Could not initialize WebGL.")},isWebGLSupported:function(){var a=document.createElement("canvas");if(!a.width){return false}try{this.createContext(a);return true}catch(b){return false}}};bigshot.TransformStack=function(){this.mvMatrix=null;this.mvMatrixStack=[];this.reset()};bigshot.TransformStack.prototype={push:function(a){if(a){this.mvMatrixStack.push(a.dup());this.mvMatrix=a.dup();return mvMatrix}else{this.mvMatrixStack.push(this.mvMatrix.dup());return mvMatrix}},pop:function(){if(this.mvMatrixStack.length==0){throw new Error("Invalid popMatrix!")}this.mvMatrix=this.mvMatrixStack.pop();return mvMatrix},reset:function(){this.mvMatrix=Matrix.I(4)},multiply:function(a){this.mvMatrix=a.x(this.mvMatrix)},translate:function(b){var a=Matrix.Translation($V([b.x,b.y,b.z])).ensure4x4();this.multiply(a)},rotate:function(c,b){var d=c*Math.PI/180;var a=Matrix.Rotation(d,$V([b.x,b.y,b.z])).ensure4x4();this.multiply(a)},rotateX:function(a){this.rotate(a,{x:1,y:0,z:0})},rotateY:function(a){this.rotate(a,{x:0,y:1,z:0})},rotateZ:function(a){this.rotate(a,{x:0,y:0,z:1})},perspective:function(d,c,b,e){var a=makePerspective(d,c,b,e);this.multiply(a)},matrix:function(){return this.mvMatrix}};bigshot.WebGL=function(a){this.canvas=a;this.gl=bigshot.WebGLUtil.createContext(this.canvas);this.mvMatrix=new bigshot.TransformStack();this.pMatrix=new bigshot.TransformStack();this.shaderProgram=null;this.onresize()};bigshot.WebGL.prototype={onresize:function(){this.gl.viewportWidth=this.canvas.width;this.gl.viewportHeight=this.canvas.height},fragmentShader:"#ifdef GL_ES\n precision highp float;\n#endif\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void) {\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n}\n",vertexShader:"attribute vec3 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void) {\n gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n vTextureCoord = aTextureCoord;\n}",createShader:function(c,a){var b=this.gl.createShader(a);this.gl.shaderSource(b,c);this.gl.compileShader(b);if(!this.gl.getShaderParameter(b,this.gl.COMPILE_STATUS)){alert(this.gl.getShaderInfoLog(b));return null}return b},createFragmentShader:function(a){return this.createShader(a,this.gl.FRAGMENT_SHADER)},createVertexShader:function(a){return this.createShader(a,this.gl.VERTEX_SHADER)},initShaders:function(){this.shaderProgram=this.gl.createProgram();this.gl.attachShader(this.shaderProgram,this.createVertexShader(this.vertexShader));this.gl.attachShader(this.shaderProgram,this.createFragmentShader(this.fragmentShader));this.gl.linkProgram(this.shaderProgram);if(!this.gl.getProgramParameter(this.shaderProgram,this.gl.LINK_STATUS)){throw new Error("Could not initialise shaders");return}this.gl.useProgram(this.shaderProgram);this.shaderProgram.vertexPositionAttribute=this.gl.getAttribLocation(this.shaderProgram,"aVertexPosition");this.gl.enableVertexAttribArray(this.shaderProgram.vertexPositionAttribute);this.shaderProgram.textureCoordAttribute=this.gl.getAttribLocation(this.shaderProgram,"aTextureCoord");this.gl.enableVertexAttribArray(this.shaderProgram.textureCoordAttribute);this.shaderProgram.pMatrixUniform=this.gl.getUniformLocation(this.shaderProgram,"uPMatrix");this.shaderProgram.mvMatrixUniform=this.gl.getUniformLocation(this.shaderProgram,"uMVMatrix");this.shaderProgram.samplerUniform=this.gl.getUniformLocation(this.shaderProgram,"uSampler")},setMatrixUniforms:function(){this.gl.uniformMatrix4fv(this.shaderProgram.pMatrixUniform,false,new Float32Array(this.pMatrix.matrix().flatten()));this.gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,false,new Float32Array(this.mvMatrix.matrix().flatten()))},createImageTextureFromImage:function(d,a,c){var b=this.gl.createTexture();this.handleImageTextureLoaded(this,b,d,a,c);return b},createImageTextureFromSource:function(e,a,d){var f=new Image();var c=this.gl.createTexture();var b=this;f.onload=function(){b.handleImageTextureLoaded(b,c,f,a,d)};f.src=e;return c},handleImageTextureLoaded:function(c,b,e,a,d){c.gl.bindTexture(c.gl.TEXTURE_2D,b);c.gl.texImage2D(c.gl.TEXTURE_2D,0,c.gl.RGBA,c.gl.RGBA,c.gl.UNSIGNED_BYTE,e);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MAG_FILTER,d?d:c.gl.NEAREST);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MIN_FILTER,a?a:c.gl.NEAREST);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_S,c.gl.CLAMP_TO_EDGE);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_T,c.gl.CLAMP_TO_EDGE);if(a==c.gl.NEAREST_MIPMAP_NEAREST||a==c.gl.LINEAR_MIPMAP_NEAREST||a==c.gl.NEAREST_MIPMAP_LINEAR||a==c.gl.LINEAR_MIPMAP_LINEAR){c.gl.generateMipmap(c.gl.TEXTURE_2D)}c.gl.bindTexture(c.gl.TEXTURE_2D,null)},deleteTexture:function(a){this.gl.deleteTexture(a)},dispose:function(){delete this.canvas;delete this.gl}};bigshot.VRRenderer=function(){};bigshot.VRRenderer.prototype={createTileCache:function(c,a,b){},createTexturedQuadScene:function(){},createTexturedQuad:function(d,b,a,c){},getViewportWidth:function(){},getViewportHeight:function(){},transformToWorld:function(a){},transformWorldToScreen:function(a){},transformToScreen:function(a){},dispose:function(){},beginRender:function(b,a,d,c){},endRender:function(){},onresize:function(){},resize:function(a,b){},getElement:function(){}};bigshot.AbstractVRRenderer=function(){};bigshot.AbstractVRRenderer.prototype={transformToWorld:function transformToWorld(a){var b=this.mvMatrix.matrix().xPoint3Dhom1(a);return b},transformWorldToScreen:function transformWorldToScreen(d){if(d.z>0){return null}var a=this.pMatrix.matrix().xPoint3Dhom(d);if(Math.abs(a.w)<Sylvester.precision){return null}var i=a.x;var f=a.y;var e=a.z;var c=this.getViewportWidth();var g=this.getViewportHeight();var b={x:(c/2)*i/e+c/2,y:-(g/2)*f/e+g/2};return b},transformToScreen:function transformToScreen(a){var d=this.mvpMatrix.xPoint3Dhom(a);if(d.z<0){return null}var e=d.w;if(Math.abs(d.w)<Sylvester.precision){return null}var i=d.x;var f=d.y;var c=this.getViewportWidth();var g=this.getViewportHeight();var b={x:(c/2)*i/e+c/2,y:-(g/2)*f/e+g/2};return b}};bigshot.CSS3DVRRenderer=function(a){this.container=a;this.canvasOrigin=document.createElement("div");this.canvasOrigin.style.WebkitTransformOrigin="0px 0px 0px";this.canvasOrigin.style.WebkitTransformStyle="preserve-3d";this.canvasOrigin.style.WebkitPerspective="600px";this.canvasOrigin.style.position="relative";this.canvasOrigin.style.left="50%";this.canvasOrigin.style.top="50%";this.container.appendChild(this.canvasOrigin);this.viewport=document.createElement("div");this.viewport.style.WebkitTransformOrigin="0px 0px 0px";this.viewport.style.WebkitTransformStyle="preserve-3d";this.canvasOrigin.appendChild(this.viewport);this.world=document.createElement("div");this.world.style.WebkitTransformOrigin="0px 0px 0px";this.world.style.WebkitTransformStyle="preserve-3d";this.viewport.appendChild(this.world);this.browser.removeAllChildren(this.world);this.view=null;this.mvMatrix=new bigshot.TransformStack();this.yaw=0;this.pitch=0;this.fov=0;this.pMatrix=new bigshot.TransformStack();this.onresize=function(){};this.viewportSize=null};bigshot.CSS3DVRRenderer.prototype={browser:new bigshot.Browser(),dispose:function(){},createTileCache:function(c,a,b){return new bigshot.ImageVRTileCache(c,a,b)},createTexturedQuadScene:function(){return new bigshot.CSS3DTexturedQuadScene(this.world,128,this.view)},createTexturedQuad:function(d,b,a,c){return new bigshot.CSS3DTexturedQuad(d,b,a,c)},getElement:function(){return this.container},supportsUpdate:function(){return false},getViewportWidth:function(){if(this.viewportSize){return this.viewportSize.w}return this.browser.getElementSize(this.container).w},getViewportHeight:function(){if(this.viewportSize){return this.viewportSize.h}return this.browser.getElementSize(this.container).h},onresize:function(){},resize:function(a,b){if(this.container.style.width!=""){this.container.style.width=a+"px"}if(this.container.style.height!=""){this.container.style.height=b+"px"}},beginRender:function(e,c,k,g){this.viewportSize=this.browser.getElementSize(this.container);this.yaw=e.y;this.pitch=e.p;this.fov=c;var b=0.5*c*Math.PI/180;var a=this.getViewportHeight()/2;var f=a/Math.tan(b);this.mvMatrix.reset();this.view=k;this.mvMatrix.translate(this.view);this.mvMatrix.rotateZ(g.r);this.mvMatrix.rotateX(g.p);this.mvMatrix.rotateY(g.y);this.mvMatrix.rotateY(this.yaw);this.mvMatrix.rotateX(this.pitch);this.pMatrix.reset();this.pMatrix.perspective(this.fov,this.getViewportWidth()/this.getViewportHeight(),0.1,100);this.mvpMatrix=this.pMatrix.matrix().multiply(this.mvMatrix.matrix());this.canvasOrigin.style.WebkitPerspective=f+"px";for(var d=this.world.children.length-1;d>=0;--d){this.world.children[d].inWorld=1}this.world.style.WebkitTransform="rotate3d(1,0,0,"+(-e.p)+"deg) rotate3d(0,1,0,"+e.y+"deg) rotate3d(0,1,0,"+(g.y)+"deg) rotate3d(1,0,0,"+(-g.p)+"deg) rotate3d(0,0,1,"+(-g.r)+"deg) ";this.world.style.WebkitTransformStyle="preserve-3d";this.world.style.WebKitBackfaceVisibility="hidden";this.viewport.style.WebkitTransform="translateZ("+f+"px)"},endRender:function(){for(var a=this.world.children.length-1;a>=0;--a){var b=this.world.children[a];if(!b.inWorld||b.inWorld!=2){delete b.inWorld;this.world.removeChild(b)}}this.viewportSize=null}};bigshot.Object.extend(bigshot.CSS3DVRRenderer,bigshot.AbstractVRRenderer);bigshot.Object.validate("bigshot.CSS3DVRRenderer",bigshot.VRRenderer);bigshot.CSS3DTexturedQuad=function(d,b,a,c){this.p=d;this.u=b;this.v=a;this.image=c};bigshot.CSS3DTexturedQuad.prototype={crossProduct:function crossProduct(d,c){return{x:d.y*c.z-d.z*c.y,y:d.z*c.x-d.x*c.z,z:d.x*c.y-d.y*c.x}},vecToStr:function vecToStr(a){return(a.x)+","+(a.y)+","+(a.z)},quadTransform:function quadTransform(c,d,b){var a=this.crossProduct(d,b);var e="matrix3d("+this.vecToStr(d)+",0,"+this.vecToStr(b)+",0,"+this.vecToStr(a)+",0,"+this.vecToStr(c)+",1)";return e},norm:function norm(a){return Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z)},render:function render(e,i,a){var d=i/(this.image.width-1);var g=i*1;var f=this.p;var c=this.u;var b=this.v;this.image.style.position="absolute";if(!this.image.inWorld||this.image.inWorld!=1){e.appendChild(this.image)}this.image.inWorld=2;this.image.style.WebkitTransformOrigin="0px 0px 0px";this.image.style.WebkitTransform=this.quadTransform({x:(f.x+a.x)*g,y:(-f.y+a.y)*g,z:(f.z+a.z)*g},{x:c.x*d,y:-c.y*d,z:c.z*d},{x:b.x*d,y:-b.y*d,z:b.z*d})}};bigshot.CSS3DTexturedQuadScene=function(b,c,a){this.quads=new Array();this.world=b;this.scale=c;this.view=a};bigshot.CSS3DTexturedQuadScene.prototype={addQuad:function(a){this.quads.push(a)},render:function(){for(var a=0;a<this.quads.length;++a){this.quads[a].render(this.world,this.scale,this.view)}}};bigshot.TexturedQuadScene=function(){};bigshot.TexturedQuadScene.prototype={addQuad:function(a){},render:function(){}};bigshot.WebGLVRRenderer=function(a){this.container=a;this.canvas=document.createElement("canvas");this.canvas.width=480;this.canvas.height=480;this.canvas.style.position="absolute";this.container.appendChild(this.canvas);this.webGl=new bigshot.WebGL(this.canvas);this.webGl.initShaders();this.webGl.gl.clearColor(0,0,0,1);this.webGl.gl.blendFunc(this.webGl.gl.ONE,this.webGl.gl.ZERO);this.webGl.gl.enable(this.webGl.gl.BLEND);this.webGl.gl.disable(this.webGl.gl.DEPTH_TEST);this.webGl.gl.clearDepth(1);var b=this;this.buffers=new bigshot.TimedWeakReference(function(){return b.setupBuffers()},function(c){b.disposeBuffers(c)},1000)};bigshot.WebGLVRRenderer.prototype={createTileCache:function(c,a,b){return new bigshot.TextureTileCache(c,a,b,this.webGl)},createTexturedQuadScene:function(){return new bigshot.WebGLTexturedQuadScene(this.webGl,this.buffers)},setupBuffers:function(){var c=this.webGl.gl.createBuffer();var a=this.webGl.gl.createBuffer();this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER,a);var d=[0,0,1,0,1,1,0,1];this.webGl.gl.bufferData(this.webGl.gl.ARRAY_BUFFER,new Float32Array(d),this.webGl.gl.STATIC_DRAW);var b=this.webGl.gl.createBuffer();this.webGl.gl.bindBuffer(this.webGl.gl.ELEMENT_ARRAY_BUFFER,b);var e=[0,2,1,0,3,2];this.webGl.gl.bufferData(this.webGl.gl.ELEMENT_ARRAY_BUFFER,new Uint16Array(e),this.webGl.gl.STATIC_DRAW);this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER,a);this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.textureCoordAttribute,2,this.webGl.gl.FLOAT,false,0,0);this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER,c);this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.vertexPositionAttribute,3,this.webGl.gl.FLOAT,false,0,0);return{vertexPositionBuffer:c,textureCoordBuffer:a,vertexIndexBuffer:b}},dispose:function(){this.buffers.dispose();this.container.removeChild(this.canvas);delete this.canvas;this.webGl.dispose();delete this.webGl},disposeBuffers:function(a){this.webGl.gl.deleteBuffer(a.vertexPositionBuffer);this.webGl.gl.deleteBuffer(a.vertexIndexBuffer);this.webGl.gl.deleteBuffer(a.textureCoordBuffer)},getElement:function(){return this.canvas},supportsUpdate:function(){return false},createTexturedQuad:function(d,b,a,c){return new bigshot.WebGLTexturedQuad(d,b,a,c)},getViewportWidth:function(){return this.webGl.gl.viewportWidth},getViewportHeight:function(){return this.webGl.gl.viewportHeight},beginRender:function(b,a,d,c){this.webGl.gl.viewport(0,0,this.webGl.gl.viewportWidth,this.webGl.gl.viewportHeight);this.webGl.pMatrix.reset();this.webGl.pMatrix.perspective(a,this.webGl.gl.viewportWidth/this.webGl.gl.viewportHeight,0.1,100);this.webGl.mvMatrix.reset();this.webGl.mvMatrix.translate(d);this.webGl.mvMatrix.rotateZ(c.r);this.webGl.mvMatrix.rotateX(c.p);this.webGl.mvMatrix.rotateY(c.y);this.webGl.mvMatrix.rotateY(b.y);this.webGl.mvMatrix.rotateX(b.p);this.mvMatrix=this.webGl.mvMatrix;this.pMatrix=this.webGl.pMatrix;this.mvpMatrix=this.pMatrix.matrix().multiply(this.mvMatrix.matrix())},endRender:function(){},resize:function(a,b){this.canvas.width=a;this.canvas.height=b;if(this.container.style.width!=""){this.container.style.width=a+"px"}if(this.container.style.height!=""){this.container.style.height=b+"px"}},onresize:function(){this.webGl.onresize()}};bigshot.Object.extend(bigshot.WebGLVRRenderer,bigshot.AbstractVRRenderer);bigshot.Object.validate("bigshot.WebGLVRRenderer",bigshot.VRRenderer);bigshot.TexturedQuad=function(){};bigshot.WebGLTexturedQuad=function(d,b,a,c){this.p=d;this.u=b;this.v=a;this.texture=c};bigshot.WebGLTexturedQuad.prototype={render:function(e,d,a,c){e.gl.bindBuffer(e.gl.ARRAY_BUFFER,d);var b=[this.p.x,this.p.y,this.p.z,this.p.x+this.u.x,this.p.y+this.u.y,this.p.z+this.u.z,this.p.x+this.u.x+this.v.x,this.p.y+this.u.y+this.v.y,this.p.z+this.u.z+this.v.z,this.p.x+this.v.x,this.p.y+this.v.y,this.p.z+this.v.z];e.gl.bufferData(e.gl.ARRAY_BUFFER,new Float32Array(b),e.gl.STATIC_DRAW);e.gl.activeTexture(e.gl.TEXTURE0);e.gl.bindTexture(e.gl.TEXTURE_2D,this.texture);e.gl.uniform1i(e.shaderProgram.samplerUniform,0);e.gl.bindBuffer(e.gl.ELEMENT_ARRAY_BUFFER,c);e.gl.drawElements(e.gl.TRIANGLES,6,e.gl.UNSIGNED_SHORT,0);e.gl.bindTexture(e.gl.TEXTURE_2D,null)}};bigshot.WebGLTexturedQuadScene=function(b,a){this.quads=new Array();this.webGl=b;this.buffers=a};bigshot.WebGLTexturedQuadScene.prototype={addQuad:function(a){this.quads.push(a)},render:function(){var a=this.buffers.get();var f=a.vertexPositionBuffer;var c=a.textureCoordBuffer;var e=a.vertexIndexBuffer;this.webGl.setMatrixUniforms();for(var d=0;d<this.quads.length;++d){this.quads[d].render(this.webGl,f,c,e)}}};bigshot.VRPanoramaParameters=function(b){this.posterSize=0;this.emptyImage=null;this.suffix=null;this.width=0;this.height=0;this.container=null;this.maxTesselation=-1;this.tileSize=0;this.overlap=0;this.basePath=null;this.fileSystemType="folder";this.fileSystem=null;this.dataLoader=new bigshot.DefaultDataLoader();this.maxTextureMagnification=1;this.textureMagFilter=null;this.textureMinFilter=null;this.minFov=2;this.maxFov=90;this.minPitch=-90;this.maxPitch=90;this.minYaw=-360;this.maxYaw=720;this.yawOffset=0;this.pitchOffset=0;this.rollOffset=0;this.onload=null;this.renderer=null;this.fling=true;this.flingScale=0.004;if(b){for(var a in b){this[a]=b[a]}}this.merge=function(d,e){for(var c in d){if(e||!this[c]){this[c]=d[c]}}};return this};bigshot.VRPanorama=function(d){bigshot.EventDispatcher.call(this);var c=this;this.parameters=d;this.maxTextureMagnification=d.maxTextureMagnification;this.container=d.container;this.browser=new bigshot.Browser();this.dragStart=null;this.dragDistance=0;this.hotspots=[];this.disposed=false;this.transformOffsets={y:d.yawOffset,p:d.pitchOffset,r:d.rollOffset};this.state={rotation:{p:0,y:0,r:0},fov:45,translation:{x:0,y:0,z:0}};this.renderer=null;if(this.parameters.renderer){if(this.parameters.renderer=="css"){this.renderer=new bigshot.CSS3DVRRenderer(this.container)}else{if(this.parameters.renderer=="webgl"){this.renderer=new bigshot.WebGLVRRenderer(this.container)}else{throw new Error("Unknown renderer: "+this.parameters.renderer)}}}else{this.renderer=bigshot.WebGLUtil.isWebGLSupported()?new bigshot.WebGLVRRenderer(this.container):new bigshot.CSS3DVRRenderer(this.container)}this.renderListeners=new Array();this.renderables=new Array();this.idleCounter=0;this.maxIdleCounter=-1;this.smoothrotatePermit=0;var f=function(g){if(g.preventDefault){g.preventDefault()}return false};this.fullScreenHandler=null;this.renderAsapPermitTaken=false;this.sizeContainer=null;var a={facesLeft:6,faceLoaded:function(){this.facesLeft--;if(this.facesLeft==0){if(c.parameters.onload){c.parameters.onload()}}}};var b=function(){a.faceLoaded()};this.vrFaces=new Array();this.vrFaces[0]=new bigshot.VRFace(this,"f",{x:-1,y:1,z:-1},2,{x:1,y:0,z:0},{x:0,y:-1,z:0},b);this.vrFaces[1]=new bigshot.VRFace(this,"b",{x:1,y:1,z:1},2,{x:-1,y:0,z:0},{x:0,y:-1,z:0},b);this.vrFaces[2]=new bigshot.VRFace(this,"l",{x:-1,y:1,z:1},2,{x:0,y:0,z:-1},{x:0,y:-1,z:0},b);this.vrFaces[3]=new bigshot.VRFace(this,"r",{x:1,y:1,z:-1},2,{x:0,y:0,z:1},{x:0,y:-1,z:0},b);this.vrFaces[4]=new bigshot.VRFace(this,"u",{x:-1,y:1,z:1},2,{x:1,y:0,z:0},{x:0,y:0,z:-1},b);this.vrFaces[5]=new bigshot.VRFace(this,"d",{x:-1,y:-1,z:-1},2,{x:1,y:0,z:0},{x:0,y:0,z:1},b);var e=function(g){if(g.clientX){return g}else{return{clientX:g.changedTouches[0].clientX,clientY:g.changedTouches[0].clientY}}};this.lastTouchStartAt=-1;this.allListeners={mousedown:function(g){c.smoothRotate();c.resetIdle();c.dragMouseDown(g);return f(g)},mouseup:function(g){c.resetIdle();c.dragMouseUp(g);return f(g)},mousemove:function(g){c.resetIdle();c.dragMouseMove(g);return f(g)},gesturestart:function(g){c.gestureStart(g);return f(g)},gesturechange:function(g){c.gestureChange(g);return f(g)},gestureend:function(g){c.gestureEnd(g);return f(g)},DOMMouseScroll:function(g){c.resetIdle();c.mouseWheel(g);return f(g)},mousewheel:function(g){c.resetIdle();c.mouseWheel(g);return f(g)},dblclick:function(g){c.mouseDoubleClick(g);return f(g)},touchstart:function(g){c.smoothRotate();c.lastTouchStartAt=new Date().getTime();c.resetIdle();c.dragMouseDown(e(g));return f(g)},touchend:function(i){c.resetIdle();var g=c.dragMouseUp(e(i));if(!g&&(c.lastTouchStartAt>new Date().getTime()-350)){c.mouseDoubleClick(e(i))}c.lastTouchStartAt=-1;return f(i)},touchmove:function(g){if(c.dragDistance>24){c.lastTouchStartAt=-1}c.resetIdle();c.dragMouseMove(e(g));return f(g)}};this.addEventListeners();this.onresizeHandler=function(g){c.onresize()};this.browser.registerListener(window,"resize",this.onresizeHandler,false);this.browser.registerListener(document.body,"orientationchange",this.onresizeHandler,false);this.setPitch(0);this.setYaw(0);this.setFov(45)};bigshot.VRPanorama.DRAG_GRAB="grab";bigshot.VRPanorama.DRAG_PAN="pan";bigshot.VRPanorama.ONRENDER_BEGIN=0;bigshot.VRPanorama.ONRENDER_END=1;bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE=0;bigshot.VRPanorama.prototype={addHotspot:function(a){this.hotspots.push(a)},getParameters:function(){return this.parameters},setTranslation:function(a,c,b){this.state.translation.x=a;this.state.translation.y=c;this.state.translation.z=b},getTranslation:function(){return this.state.translation},setFov:function(a){a=Math.min(this.parameters.maxFov,a);a=Math.max(this.parameters.minFov,a);this.state.fov=a},getFov:function(){return this.state.fov},screenToPolar:function(g,e){var c=this.screenToRayDelta(g,e);var f=$V([c.x,c.y,c.z,1]);f=Matrix.RotationX(this.getPitch()*Math.PI/180).ensure4x4().x(f);f=Matrix.RotationY(-this.getYaw()*Math.PI/180).ensure4x4().x(f);var m=f.e(1);var l=f.e(2);var k=f.e(3);var d=Math.sqrt(m*m+k*k);var a=Math.atan2(m,-k)*180/Math.PI;var i=Math.atan2(l,d)*180/Math.PI;var b={};b.yaw=(a+360)%360;b.pitch=i;return b},snapPitch:function(a){a=Math.min(this.parameters.maxPitch,a);a=Math.max(this.parameters.minPitch,a);return a},setPitch:function(a){this.state.rotation.p=this.snapPitch(a)},circleDistance:function(d,c){if(c>d){var b=(c-d);var a=((c-360)-d);return Math.abs(b)<Math.abs(a)?b:a}else{var b=(c-d);var a=(360-d)+c;return Math.abs(b)<Math.abs(a)?b:a}},circleSnapTo:function(d,e,c){var b=this.circleDistance(d,e);var a=this.circleDistance(d,c);return Math.abs(b)<Math.abs(a)?e:c},snapYaw:function(a){a%=360;if(a<0){a+=360}if(this.parameters.minYaw<this.parameters.maxYaw){if(a>this.parameters.maxYaw||a<this.parameters.minYaw){a=circleSnapTo(a,this.parameters.minYaw,this.parameters.maxYaw)}}else{if(a>this.parameters.minYaw){}else{if(a>this.parameters.maxYaw){a=circleSnapTo(a,this.parameters.minYaw,this.parameters.maxYaw)}else{}}}return a},setYaw:function(a){this.state.rotation.y=this.snapYaw(a)},getYaw:function(){return this.state.rotation.y},getPitch:function(){return this.state.rotation.p},dispose:function(){this.disposed=true;this.browser.unregisterListener(window,"resize",this.onresizeHandler,false);this.browser.unregisterListener(document.body,"orientationchange",this.onresizeHandler,false);this.removeEventListeners();for(var a=0;a<this.vrFaces.length;++a){this.vrFaces[a].dispose()}this.renderer.dispose()},createVREventData:function(b){var a=this.browser.getElementPosition(this.container);b.localX=b.clientX-a.x;b.localY=b.clientY-a.y;b.ray=this.screenToRay(b.localX,b.localY);var c=this.screenToPolar(b.localX,b.localY);b.yaw=c.yaw;b.pitch=c.pitch;b.target=this;b.currentTarget=this;return new bigshot.VREvent(b)},beginRender:function(b,a){this.onrender(bigshot.VRPanorama.ONRENDER_BEGIN,b,a);this.renderer.beginRender(this.state.rotation,this.state.fov,this.state.translation,this.transformOffsets)},addRenderListener:function(a){var b=new Array();b=b.concat(this.renderListeners);b.push(a);this.renderListeners=b},removeRenderListener:function(b){var c=new Array();c=c.concat(this.renderListeners);for(var a=0;a<c.length;++a){if(c[a]===b){c.splice(a,1);break}}this.renderListeners=c},onrender:function(d,c,b){var e=this.renderListeners;for(var a=0;a<e.length;++a){e[a](d,c,b)}},endRender:function(c,b){for(var a in this.vrFaces){this.vrFaces[a].endRender()}this.renderer.endRender();this.onrender(bigshot.VRPanorama.ONRENDER_END,c,b)},addRenderable:function(a){var b=new Array();b.concat(this.renderables);b.push(a);this.renderables=b},removeRenderable:function(b){var c=new Array();c.concat(this.renderables);for(var a=0;a<c.length;++a){if(c[a]==listener){c.splice(a,1);break}}this.renderables=c},render:function(d,c){if(!this.disposed){this.beginRender(d,c);var e=this.renderer.createTexturedQuadScene();for(var b in this.vrFaces){this.vrFaces[b].render(e)}for(var a=0;a<this.renderables.length;++a){this.renderables[a](this.renderer,e)}e.render();for(var a=0;a<this.hotspots.length;++a){this.hotspots[a].layout()}this.endRender(d,c)}},renderUpdated:function(d,c){if(!this.disposed&&this.renderer.supportsUpdate()){this.beginRender(d,c);var e=this.renderer.createTexturedQuadScene();for(var b in this.vrFaces){if(this.vrFaces[b].isUpdated()){this.vrFaces[b].render(e)}}e.render();for(var a=0;a<this.hotspots.length;++a){this.hotspots[a].layout()}this.endRender(d,c)}else{this.render(d,c)}},dragMode:bigshot.VRPanorama.DRAG_GRAB,setDragMode:function(a){this.dragMode=a},addEventListeners:function(){for(var a in this.allListeners){this.browser.registerListener(this.container,a,this.allListeners[a],false)}},removeEventListeners:function(){for(var a in this.allListeners){this.browser.unregisterListener(this.container,a,this.allListeners[a],false)}},dragMouseDown:function(a){this.dragStart={clientX:a.clientX,clientY:a.clientY};this.dragLast={clientX:a.clientX,clientY:a.clientY,dx:0,dy:0,dt:1000000,time:new Date().getTime()};this.dragDistance=0},dragMouseUp:function(i){if(this.dragStart==null||this.dragLast==null){this.dragStart=null;this.dragLast=null;return}this.dragStart=null;var m=this.dragLast.dx;var l=this.dragLast.dy;var d=Math.sqrt(m*m+l*l);var c=this.dragLast.dt;var b=new Date().getTime()-this.dragLast.time;this.dragLast=null;var k=c>0?(d/c):0;if(k>0.05&&b<250&&c>20&&this.parameters.fling){var f=this.state.fov/this.renderer.getViewportHeight();var g=new Date().getTime();var a=this.parameters.flingScale;m/=c;l/=c;this.smoothRotate(function(o){var n=new Date().getTime()-g;var e=Math.pow(2,-n*a);var p=(m*o*f)*e;return e>0.01?p:null},function(o){var n=new Date().getTime()-g;var e=Math.pow(2,-n*a);var p=(l*o*f)*e;return e>0.01?p:null},function(){return null});return true}else{this.smoothRotate();return false}},dragMouseMove:function(d){if(this.dragStart!=null&&this.currentGesture==null){if(this.dragMode==bigshot.VRPanorama.DRAG_GRAB){this.smoothRotate();var f=this.state.fov/this.renderer.getViewportHeight();var b=d.clientX-this.dragStart.clientX;var a=d.clientY-this.dragStart.clientY;this.dragDistance+=b+a;this.setYaw(this.getYaw()-b*f);this.setPitch(this.getPitch()-a*f);this.renderAsap();this.dragStart=d;var c=new Date().getTime()-this.dragLast.time;if(c>20){this.dragLast={dx:this.dragLast.clientX-d.clientX,dy:this.dragLast.clientY-d.clientY,dt:c,clientX:d.clientX,clientY:d.clientY,time:new Date().getTime()}}}else{var f=0.1*this.state.fov/this.renderer.getViewportHeight();var b=d.clientX-this.dragStart.clientX;var a=d.clientY-this.dragStart.clientY;this.dragDistance=b+a;this.smoothRotate(function(){return b*f},function(){return a*f})}}},onMouseDoubleClick:function(c,a,d){var b=this.createVREventData({type:"dblclick",clientX:c.clientX,clientY:c.clientY});this.fireEvent("dblclick",b);if(!b.defaultPrevented){this.smoothRotateToXY(a,d)}},mouseDoubleClick:function(a){var b=this.browser.getElementPosition(this.container);this.onMouseDoubleClick(a,a.clientX-b.x,a.clientY-b.y)},gestureStart:function(a){this.currentGesture={startFov:this.getFov(),scale:a.scale}},gestureEnd:function(a){this.currentGesture=null},gestureChange:function(a){if(this.currentGesture){var b=this.currentGesture.startFov/a.scale;this.setFov(b);this.renderAsap()}},setMaxTextureMagnification:function(a){this.maxTextureMagnification=a},getMaxTextureMagnification:function(){return this.maxTextureMagnification},getMinFovFromViewportAndImage:function(){var a=this.renderer.getViewportHeight()/2;var f=this.vrFaces[0].parameters.height;for(var c in this.vrFaces){f=Math.min(f,this.vrFaces[c].parameters.height)}var b=this.maxTextureMagnification*f/2;var d=a/b;var e=Math.atan(d)*180/Math.PI;return e*2},screenToRay:function(a,d){var c=this.screenToRayDelta(a,d);var b=this.renderer.transformToWorld(c);b=Matrix.RotationY(-this.transformOffsets.y*Math.PI/180).ensure4x4().xPoint3Dhom1(b);b=Matrix.RotationX(-this.transformOffsets.p*Math.PI/180).ensure4x4().xPoint3Dhom1(b);b=Matrix.RotationZ(-this.transformOffsets.r*Math.PI/180).ensure4x4().xPoint3Dhom1(b);return b},screenToRayDelta:function(k,i){var g=this.renderer.getViewportHeight()/2;var d=this.renderer.getViewportWidth()/2;var k=(k-d);var i=(i-g);var e=Math.tan((this.state.fov/2)*Math.PI/180);var f=e*this.renderer.getViewportWidth()/this.renderer.getViewportHeight();var c=k*f/d;var b=i*e/g;var a=-1;return{x:c,y:b,z:a}},smoothRotateToXY:function(a,c){var b=this.screenToPolar(a,c);this.smoothRotateTo(this.snapYaw(b.yaw),this.snapPitch(b.pitch),this.getFov(),this.state.fov/200)},ease:function(f,e,c,a){var b=c*40;if(!a){a=c/5}var d=c/1000;var g=f-e;if(g>b){g=-c}else{if(g<-b){g=c}else{if(Math.abs(g)<a){g=-g}else{if(Math.abs(g)<d){g=0}else{g=-(c*g)/(b)}}}}return g},resetIdle:function(){this.idleCounter=0},idleTick:function(){if(this.maxIdleCounter<0){return}++this.idleCounter;if(this.idleCounter==this.maxIdleCounter){this.autoRotate()}var a=this;setTimeout(function(){a.idleTick()},1000)},autoRotateWhenIdle:function(a){this.maxIdleCounter=a;this.idleCounter=0;if(a<0){return}else{if(this.maxIdleCounter>0){var b=this;setTimeout(function(){b.idleTick()},1000)}}},autoRotate:function(){var b=this;var d=this.state.fov/400;var c=d;var a=c;this.smoothRotate(function(){var e=b.getYaw()+a;if(b.parameters.minYaw<b.parameters.maxYaw){if(e>b.parameters.maxYaw||e<b.parameters.minYaw){a=-a}}else{if(e>b.parameters.minYaw){}else{if(e>b.parameters.maxYaw){a=-a}else{}}}return a},function(){return b.ease(b.getPitch(),0,c)},function(){return b.ease(b.getFov(),45,0.1)})},smoothRotateTo:function(e,d,a,c){var b=this;this.smoothRotate(function(){var g=b.circleDistance(e,b.getYaw());var f=-b.ease(0,g,c);return Math.abs(f)>0.01?f:null},function(){var f=b.ease(b.getPitch(),d,c);return Math.abs(f)>0.01?f:null},function(){var f=b.ease(b.getFov(),a,c);return Math.abs(f)>0.01?f:null})},smoothRotate:function(c,g,f){++this.smoothrotatePermit;var d=this.smoothrotatePermit;if(!g&&!c&&!f){return}var e=this;var b={dy:c,dp:g,df:f,t:new Date().getTime()};var a=function(){if(e.smoothrotatePermit==d){var i=new Date().getTime();var l=i-b.t;b.t=i;var k=false;if(b.dy){var m=b.dy(l);if(m!=null){k=true;e.setYaw(e.getYaw()+m)}else{b.dy=null}}if(b.dp){var m=b.dp(l);if(m!=null){k=true;e.setPitch(e.getPitch()+m)}else{b.dp=null}}if(b.df){var m=b.df(l);if(m!=null){k=true;e.setFov(e.getFov()+m)}else{b.df=null}}e.render();if(k){e.browser.requestAnimationFrame(a,e.renderer.getElement())}}};a()},mouseWheel:function(a){var b=0;if(!a){a=window.event}if(a.wheelDelta){b=a.wheelDelta/120;if(window.opera){b=-b}}else{if(a.detail){b=-a.detail}}if(b){this.mouseWheelHandler(b)}if(a.preventDefault){a.preventDefault()}a.returnValue=false},mouseWheelHandler:function(c){var a=this;var b=null;if(c>0){if(this.getFov()>this.parameters.minFov){b=this.getFov()*0.9}}if(c<0){if(this.getFov()<this.parameters.maxFov){b=this.getFov()/0.9}}if(b!=null){this.smoothRotate(null,null,function(){var d=(b-a.getFov())/1.5;return Math.abs(d)>0.01?d:null})}},fullScreen:function(a){if(this.fullScreenHandler){return}var d=document.createElement("div");d.style.position="absolute";d.style.fontSize="16pt";d.style.top="128px";d.style.width="100%";d.style.color="white";d.style.padding="16px";d.style.zIndex="9999";d.style.textAlign="center";d.style.opacity="0.75";d.innerHTML="<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";var c=this;this.fullScreenHandler=new bigshot.FullScreen(this.container);this.fullScreenHandler.restoreSize=this.sizeContainer==null;this.fullScreenHandler.addOnResize(function(){c.onresize()});this.fullScreenHandler.addOnClose(function(){if(d.parentNode){try{div.removeChild(d)}catch(e){}}c.fullScreenHandler=null});if(a){this.fullScreenHandler.addOnClose(function(){a()})}this.removeEventListeners();this.fullScreenHandler.open();this.addEventListeners();var b=function(){c.render()};setTimeout(b,1000);setTimeout(b,2000);setTimeout(b,3000);if(this.fullScreenHandler.getRootElement()){this.fullScreenHandler.getRootElement().appendChild(d);setTimeout(function(){var f=0.75;var e=function(){f-=0.02;if(d.parentNode){if(f<=0){d.style.display="none";try{div.removeChild(d)}catch(g){}}else{d.style.opacity=f;setTimeout(e,20)}}};setTimeout(e,20)},3500)}return function(){c.removeEventListeners();c.fullScreenHandler.close();c.addEventListeners()}},onresize:function(){if(this.fullScreenHandler==null||!this.fullScreenHandler.isFullScreen){if(this.sizeContainer){var a=this.browser.getElementSize(this.sizeContainer);this.renderer.resize(a.w,a.h)}}else{this.container.style.width=window.innerWidth+"px";this.container.style.height=window.innerHeight+"px";var a=this.browser.getElementSize(this.container);this.renderer.resize(a.w,a.h)}this.renderer.onresize();this.renderAsap()},renderAsap:function(){if(!this.renderAsapPermitTaken&&!this.disposed){this.renderAsapPermitTaken=true;var a=this;this.browser.requestAnimationFrame(function(){a.renderAsapPermitTaken=false;a.render()},this.renderer.getElement())}},autoResizeContainer:function(a){this.sizeContainer=a}};bigshot.Object.extend(bigshot.VRPanorama,bigshot.EventDispatcher);bigshot.VRHotspot=function(a){this.panorama=a;this.clippingStrategy=bigshot.VRHotspot.CLIP_ADJUST(a)};bigshot.VRHotspot.CLIP_FRACTION=function(b,a){return function(f){var g={x0:Math.max(f.x,0),y0:Math.max(f.y,0),x1:Math.min(f.x+f.w,b.renderer.getViewportWidth()),y1:Math.min(f.y+f.h,b.renderer.getViewportHeight())};var e=f.w*f.h;var d=(g.x1-g.x0);var c=(g.y1-g.y0);if(d>0&&c>0){var i=d*c;return(i/e)>=a}else{return false}}};bigshot.VRHotspot.CLIP_CENTER=function(a){return function(b){var d={x:b.x+b.w/2,y:b.y+b.h/2};return d.x>=0&&d.x<a.renderer.getViewportWidth()&&d.y>=0&&d.y<a.renderer.getViewportHeight()}};bigshot.VRHotspot.CLIP_ADJUST=function(a){return function(b){if(b.x<0){b.w-=-b.x;b.x=0}if(b.y<0){b.h-=-b.y;b.y=0}if(b.x+b.w>a.renderer.getViewportWidth()){b.w=a.renderer.getViewportWidth()-b.x-1}if(b.y+b.h>a.renderer.getViewportHeight()){b.h=a.renderer.getViewportHeight()-b.y-1}return b.w>0&&b.h>0}};bigshot.VRHotspot.CLIP_ZOOM=function(a,c,b){return function(d){if(d.x>=0&&d.y>=0&&(d.x+c.w)<a.renderer.getViewportWidth()&&(d.y+c.h)<a.renderer.getViewportHeight()){d.w=c.w;d.h=c.h;return true}var f=0;if(d.x<0){f=Math.max(-d.x,f)}if(d.y<0){f=Math.max(-d.y,f)}if(d.x+c.w>a.renderer.getViewportWidth()){f=Math.max(d.x+c.w-a.renderer.getViewportWidth(),f)}if(d.y+c.h>a.renderer.getViewportHeight()){f=Math.max(d.y+c.h-a.renderer.getViewportHeight(),f)}f/=a.renderer.getViewportHeight();if(f>b){return false}var e=1/(1+f);d.w=c.w*e;d.h=c.w*e;if(d.x<0){d.x=0}if(d.y<0){d.y=0}if(d.x+d.w>a.renderer.getViewportWidth()){d.x=a.renderer.getViewportWidth()-d.w}if(d.y+d.h>a.renderer.getViewportHeight()){d.y=a.renderer.getViewportHeight()-d.h}return true}};bigshot.VRHotspot.CLIP_FADE=function(a,b){return function(c){var d=Math.min(c.x,c.y,a.renderer.getViewportWidth()-(c.x+c.w),a.renderer.getViewportHeight()-(c.y+c.h));if(d<=0){return false}else{if(d<=b){c.opacity=(d/b);return true}else{c.opacity=1;return true}}}};bigshot.VRHotspot.prototype={layout:function(){},rotate:function(d,c,b){var e=d*Math.PI/180;var a=Matrix.Rotation(e,$V([c.x,c.y,c.z])).ensure4x4();return a.xPoint3Dhom1(b)},toVector:function(c,b){var a={x:0,y:0,z:-1};a=this.rotate(-b,{x:1,y:0,z:0},a);a=this.rotate(-c,{x:0,y:1,z:0},a);return a},toScreen:function(b){var a=this.panorama.renderer.transformToScreen(b);return a},clip:function(a){return this.clippingStrategy(a)}};bigshot.VRPointHotspot=function(c,e,d,b,a,f){bigshot.VRHotspot.call(this,c);this.element=b;this.offsetX=a;this.offsetY=f;this.point=this.toVector(e,d)};bigshot.VRPointHotspot.prototype={layout:function(){var b=this.toScreen(this.point);var c=false;if(b!=null){var a=this.panorama.browser.getElementSize(this.element);b.w=a.w;b.h=a.h;b.x+=this.offsetX;b.y+=this.offsetY;if(this.clip(b)){this.element.style.top=(b.y)+"px";this.element.style.left=(b.x)+"px";this.element.style.width=(b.w)+"px";this.element.style.height=(b.h)+"px";if(b.opacity){this.element.style.opacity=b.opacity}this.element.style.visibility="inherit";c=true}}if(!c){this.element.style.visibility="hidden"}}};bigshot.Object.extend(bigshot.VRPointHotspot,bigshot.VRHotspot);bigshot.Object.validate("bigshot.VRPointHotspot",bigshot.VRHotspot);bigshot.VRRectangleHotspot=function(d,f,b,e,a,c){bigshot.VRHotspot.call(this,d);this.element=c;this.point0=this.toVector(f,b);this.point1=this.toVector(e,a)};bigshot.VRRectangleHotspot.prototype={layout:function(){var a=this.toScreen(this.point0);var d=this.toScreen(this.point1);var c=false;if(a!=null&&d!=null){var b={x:a.x,y:a.y,opacity:1,w:d.x-a.x,h:d.y-a.y};if(this.clip(b)){this.element.style.top=(b.y)+"px";this.element.style.left=(b.x)+"px";this.element.style.width=(b.w)+"px";this.element.style.height=(b.h)+"px";this.element.style.visibility="inherit";c=true}}if(!c){this.element.style.visibility="hidden"}}};bigshot.Object.extend(bigshot.VRRectangleHotspot,bigshot.VRHotspot);bigshot.Object.validate("bigshot.VRRectangleHotspot",bigshot.VRHotspot);bigshot.AdaptiveLODMonitorParameters=function(b){this.vrPanorama=null;this.targetFps=30;this.tolerance=0.3;this.rate=0.1;this.minMag=1.5;this.maxMag=16;this.hqRenderMag=1.5;this.hqRenderDelay=2000;this.hqRenderInterval=1000;if(b){for(var a in b){this[a]=b[a]}}this.merge=function(d,e){for(var c in d){if(e||!this[c]){this[c]=d[c]}}};return this};bigshot.AdaptiveLODMonitor=function(b){this.setParameters(b);this.currentAdaptiveMagnification=b.vrPanorama.getMaxTextureMagnification();this.frames=0;this.samples=0;this.renderTimeTotal=0;this.renderTimeLast=0;this.samplesLast=0;this.startTime=0;this.lastRender=0;this.hqRender=false;this.hqMode=false;this.hqRenderWaiting=false;this.enabled=true;var a=this;this.listenerFunction=function(e,d,c){a.listener(e,d,c)}};bigshot.AdaptiveLODMonitor.prototype={averageRenderTime:function(){if(this.samples>0){return this.renderTimeTotal/this.samples}else{return -1}},setParameters:function(a){this.parameters=a;this.targetTime=1000/this.parameters.targetFps;this.lowerTime=this.targetTime/(1+this.parameters.tolerance);this.upperTime=this.targetTime*(1+this.parameters.tolerance)},setEnabled:function(a){this.enabled=a},averageRenderTimeLast:function(){if(this.samples>0){return this.renderTimeLast/this.samplesLast}else{return -1}},getListener:function(){return this.listenerFunction},increaseDetail:function(){this.currentAdaptiveMagnification=Math.max(this.parameters.minMag,this.currentAdaptiveMagnification/(1+this.parameters.rate))},decreaseDetail:function(){this.currentAdaptiveMagnification=Math.min(this.parameters.maxMag,this.currentAdaptiveMagnification*(1+this.parameters.rate))},sample:function(){var b=new Date().getTime()-this.startTime;this.samples++;this.renderTimeTotal+=b;this.samplesLast++;this.renderTimeLast+=b;if(this.samplesLast>4){var a=this.renderTimeLast/this.samplesLast;if(a<this.lowerTime){this.increaseDetail()}else{if(a>this.upperTime){this.decreaseDetail()}}this.samplesLast=0;this.renderTimeLast=0}},hqRenderTick:function(){if(this.lastRender<new Date().getTime()-this.parameters.hqRenderDelay){this.hqRender=true;this.hqMode=true;if(this.enabled){this.parameters.vrPanorama.setMaxTextureMagnification(this.parameters.hqRenderMag);this.parameters.vrPanorama.render()}this.hqRender=false;this.hqRenderWaiting=false}else{var a=this;setTimeout(function(){a.hqRenderTick()},this.parameters.hqRenderInterval)}},listener:function(d,c,b){if(!this.enabled){return}if(this.hqRender){return}if(this.hqMode&&c==bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE){this.parameters.vrPanorama.setMaxTextureMagnification(this.parameters.minMag);return}else{this.hqMode=false}this.parameters.vrPanorama.setMaxTextureMagnification(this.currentAdaptiveMagnification);this.frames++;if((this.frames<20||this.frames%5==0)&&d==bigshot.VRPanorama.ONRENDER_BEGIN){this.startTime=new Date().getTime();this.lastRender=this.startTime;var a=this;setTimeout(function(){a.sample()},1);if(!this.hqRenderWaiting){this.hqRenderWaiting=true;setTimeout(function(){a.hqRenderTick()},this.parameters.hqRenderInterval)}}}}}; \ No newline at end of file
diff --git a/js/vendor/bigshot/bigshot-full-and-optional.js b/js/vendor/bigshot/bigshot-full-and-optional.js
new file mode 100644
index 00000000..7bff6724
--- /dev/null
+++ b/js/vendor/bigshot/bigshot-full-and-optional.js
@@ -0,0 +1,11936 @@
+// === Sylvester ===
+// Vector and Matrix mathematics modules for JavaScript
+// Copyright (c) 2007 James Coglan
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+var Sylvester = {
+ version: '0.1.3',
+ precision: 1e-6
+};
+
+function Vector() {}
+Vector.prototype = {
+
+ // Returns element i of the vector
+ e: function(i) {
+ return (i < 1 || i > this.elements.length) ? null : this.elements[i-1];
+ },
+
+ // Returns the number of elements the vector has
+ dimensions: function() {
+ return this.elements.length;
+ },
+
+ // Returns the modulus ('length') of the vector
+ modulus: function() {
+ return Math.sqrt(this.dot(this));
+ },
+
+ // Returns true iff the vector is equal to the argument
+ eql: function(vector) {
+ var n = this.elements.length;
+ var V = vector.elements || vector;
+ if (n != V.length) { return false; }
+ do {
+ if (Math.abs(this.elements[n-1] - V[n-1]) > Sylvester.precision) { return false; }
+ } while (--n);
+ return true;
+ },
+
+ // Returns a copy of the vector
+ dup: function() {
+ return Vector.create(this.elements);
+ },
+
+ // Maps the vector to another vector according to the given function
+ map: function(fn) {
+ var elements = [];
+ this.each(function(x, i) {
+ elements.push(fn(x, i));
+ });
+ return Vector.create(elements);
+ },
+
+ // Calls the iterator for each element of the vector in turn
+ each: function(fn) {
+ var n = this.elements.length, k = n, i;
+ do { i = k - n;
+ fn(this.elements[i], i+1);
+ } while (--n);
+ },
+
+ // Returns a new vector created by normalizing the receiver
+ toUnitVector: function() {
+ var r = this.modulus();
+ if (r === 0) { return this.dup(); }
+ return this.map(function(x) { return x/r; });
+ },
+
+ // Returns the angle between the vector and the argument (also a vector)
+ angleFrom: function(vector) {
+ var V = vector.elements || vector;
+ var n = this.elements.length, k = n, i;
+ if (n != V.length) { return null; }
+ var dot = 0, mod1 = 0, mod2 = 0;
+ // Work things out in parallel to save time
+ this.each(function(x, i) {
+ dot += x * V[i-1];
+ mod1 += x * x;
+ mod2 += V[i-1] * V[i-1];
+ });
+ mod1 = Math.sqrt(mod1); mod2 = Math.sqrt(mod2);
+ if (mod1*mod2 === 0) { return null; }
+ var theta = dot / (mod1*mod2);
+ if (theta < -1) { theta = -1; }
+ if (theta > 1) { theta = 1; }
+ return Math.acos(theta);
+ },
+
+ // Returns true iff the vector is parallel to the argument
+ isParallelTo: function(vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (angle <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is antiparallel to the argument
+ isAntiparallelTo: function(vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (Math.abs(angle - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is perpendicular to the argument
+ isPerpendicularTo: function(vector) {
+ var dot = this.dot(vector);
+ return (dot === null) ? null : (Math.abs(dot) <= Sylvester.precision);
+ },
+
+ // Returns the result of adding the argument to the vector
+ add: function(vector) {
+ var V = vector.elements || vector;
+ if (this.elements.length != V.length) { return null; }
+ return this.map(function(x, i) { return x + V[i-1]; });
+ },
+
+ // Returns the result of subtracting the argument from the vector
+ subtract: function(vector) {
+ var V = vector.elements || vector;
+ if (this.elements.length != V.length) { return null; }
+ return this.map(function(x, i) { return x - V[i-1]; });
+ },
+
+ // Returns the result of multiplying the elements of the vector by the argument
+ multiply: function(k) {
+ return this.map(function(x) { return x*k; });
+ },
+
+ x: function(k) { return this.multiply(k); },
+
+ // Returns the scalar product of the vector with the argument
+ // Both vectors must have equal dimensionality
+ dot: function(vector) {
+ var V = vector.elements || vector;
+ var i, product = 0, n = this.elements.length;
+ if (n != V.length) { return null; }
+ do { product += this.elements[n-1] * V[n-1]; } while (--n);
+ return product;
+ },
+
+ // Returns the vector product of the vector with the argument
+ // Both vectors must have dimensionality 3
+ cross: function(vector) {
+ var B = vector.elements || vector;
+ if (this.elements.length != 3 || B.length != 3) { return null; }
+ var A = this.elements;
+ return Vector.create([
+ (A[1] * B[2]) - (A[2] * B[1]),
+ (A[2] * B[0]) - (A[0] * B[2]),
+ (A[0] * B[1]) - (A[1] * B[0])
+ ]);
+ },
+
+ // Returns the (absolute) largest element of the vector
+ max: function() {
+ var m = 0, n = this.elements.length, k = n, i;
+ do { i = k - n;
+ if (Math.abs(this.elements[i]) > Math.abs(m)) { m = this.elements[i]; }
+ } while (--n);
+ return m;
+ },
+
+ // Returns the index of the first match found
+ indexOf: function(x) {
+ var index = null, n = this.elements.length, k = n, i;
+ do { i = k - n;
+ if (index === null && this.elements[i] == x) {
+ index = i + 1;
+ }
+ } while (--n);
+ return index;
+ },
+
+ // Returns a diagonal matrix with the vector's elements as its diagonal elements
+ toDiagonalMatrix: function() {
+ return Matrix.Diagonal(this.elements);
+ },
+
+ // Returns the result of rounding the elements of the vector
+ round: function() {
+ return this.map(function(x) { return Math.round(x); });
+ },
+
+ // Returns a copy of the vector with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function(x) {
+ return this.map(function(y) {
+ return (Math.abs(y - x) <= Sylvester.precision) ? x : y;
+ });
+ },
+
+ // Returns the vector's distance from the argument, when considered as a point in space
+ distanceFrom: function(obj) {
+ if (obj.anchor) { return obj.distanceFrom(this); }
+ var V = obj.elements || obj;
+ if (V.length != this.elements.length) { return null; }
+ var sum = 0, part;
+ this.each(function(x, i) {
+ part = x - V[i-1];
+ sum += part * part;
+ });
+ return Math.sqrt(sum);
+ },
+
+ // Returns true if the vector is point on the given line
+ liesOn: function(line) {
+ return line.contains(this);
+ },
+
+ // Return true iff the vector is a point in the given plane
+ liesIn: function(plane) {
+ return plane.contains(this);
+ },
+
+ // Rotates the vector about the given object. The object should be a
+ // point if the vector is 2D, and a line if it is 3D. Be careful with line directions!
+ rotate: function(t, obj) {
+ var V, R, x, y, z;
+ switch (this.elements.length) {
+ case 2:
+ V = obj.elements || obj;
+ if (V.length != 2) { return null; }
+ R = Matrix.Rotation(t).elements;
+ x = this.elements[0] - V[0];
+ y = this.elements[1] - V[1];
+ return Vector.create([
+ V[0] + R[0][0] * x + R[0][1] * y,
+ V[1] + R[1][0] * x + R[1][1] * y
+ ]);
+ break;
+ case 3:
+ if (!obj.direction) { return null; }
+ var C = obj.pointClosestTo(this).elements;
+ R = Matrix.Rotation(t, obj.direction).elements;
+ x = this.elements[0] - C[0];
+ y = this.elements[1] - C[1];
+ z = this.elements[2] - C[2];
+ return Vector.create([
+ C[0] + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C[1] + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C[2] + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ]);
+ break;
+ default:
+ return null;
+ }
+ },
+
+ // Returns the result of reflecting the point in the given point, line or plane
+ reflectionIn: function(obj) {
+ if (obj.anchor) {
+ // obj is a plane or line
+ var P = this.elements.slice();
+ var C = obj.pointClosestTo(P).elements;
+ return Vector.create([C[0] + (C[0] - P[0]), C[1] + (C[1] - P[1]), C[2] + (C[2] - (P[2] || 0))]);
+ } else {
+ // obj is a point
+ var Q = obj.elements || obj;
+ if (this.elements.length != Q.length) { return null; }
+ return this.map(function(x, i) { return Q[i-1] + (Q[i-1] - x); });
+ }
+ },
+
+ // Utility to make sure vectors are 3D. If they are 2D, a zero z-component is added
+ to3D: function() {
+ var V = this.dup();
+ switch (V.elements.length) {
+ case 3: break;
+ case 2: V.elements.push(0); break;
+ default: return null;
+ }
+ return V;
+ },
+
+ // Returns a string representation of the vector
+ inspect: function() {
+ return '[' + this.elements.join(', ') + ']';
+ },
+
+ // Set vector's elements from an array
+ setElements: function(els) {
+ this.elements = (els.elements || els).slice();
+ return this;
+ }
+};
+
+// Constructor function
+Vector.create = function create (elements) {
+ var V = new Vector();
+ return V.setElements(elements);
+};
+
+Vector.createNoCopy = function createNoCopy (elements) {
+ var V = new Vector();
+ V.elements = elements;
+ return V;
+};
+
+// i, j, k unit vectors
+Vector.i = Vector.createNoCopy([1,0,0]);
+Vector.j = Vector.createNoCopy([0,1,0]);
+Vector.k = Vector.createNoCopy([0,0,1]);
+
+// Random vector of size n
+Vector.Random = function(n) {
+ var elements = [];
+ do { elements.push(Math.random());
+ } while (--n);
+ return Vector.createNoCopy(elements);
+};
+
+// Vector filled with zeros
+Vector.Zero = function(n) {
+ var elements = [];
+ do { elements.push(0);
+ } while (--n);
+ return Vector.createNoCopy(elements);
+};
+
+
+
+function Matrix() {}
+Matrix.prototype = {
+
+ // Returns element (i,j) of the matrix
+ e: function(i,j) {
+ if (i < 1 || i > this.elements.length || j < 1 || j > this.elements[0].length) { return null; }
+ return this.elements[i-1][j-1];
+ },
+
+ // Returns row k of the matrix as a vector
+ row: function(i) {
+ if (i > this.elements.length) { return null; }
+ return Vector.create(this.elements[i-1]);
+ },
+
+ // Returns column k of the matrix as a vector
+ col: function(j) {
+ if (j > this.elements[0].length) { return null; }
+ var col = [], n = this.elements.length, k = n, i;
+ do { i = k - n;
+ col.push(this.elements[i][j-1]);
+ } while (--n);
+ return Vector.create(col);
+ },
+
+ // Returns the number of rows/columns the matrix has
+ dimensions: function() {
+ return {rows: this.elements.length, cols: this.elements[0].length};
+ },
+
+ // Returns the number of rows in the matrix
+ rows: function() {
+ return this.elements.length;
+ },
+
+ // Returns the number of columns in the matrix
+ cols: function() {
+ return this.elements[0].length;
+ },
+
+ // Returns true iff the matrix is equal to the argument. You can supply
+ // a vector as the argument, in which case the receiver must be a
+ // one-column matrix equal to the vector.
+ eql: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (this.elements.length != M.length ||
+ this.elements[0].length != M[0].length) { return false; }
+ var ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ if (Math.abs(this.elements[i][j] - M[i][j]) > Sylvester.precision) { return false; }
+ } while (--nj);
+ } while (--ni);
+ return true;
+ },
+
+ // Returns a copy of the matrix
+ dup: function() {
+ return Matrix.create(this.elements);
+ },
+
+ // Maps the matrix to another matrix (of the same dimensions) according to the given function
+ map: function(fn) {
+ var els = [], ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ els[i] = [];
+ do { j = kj - nj;
+ els[i][j] = fn(this.elements[i][j], i + 1, j + 1);
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(els);
+ },
+
+ // Returns true iff the argument has the same dimensions as the matrix
+ isSameSizeAs: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ return (this.elements.length == M.length &&
+ this.elements[0].length == M[0].length);
+ },
+
+ // Returns the result of adding the argument to the matrix
+ add: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function(x, i, j) { return x + M[i-1][j-1]; });
+ },
+
+ // Returns the result of subtracting the argument from the matrix
+ subtract: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function(x, i, j) { return x - M[i-1][j-1]; });
+ },
+
+ // Returns true iff the matrix can multiply the argument from the left
+ canMultiplyFromLeft: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ // this.columns should equal matrix.rows
+ return (this.elements[0].length == M.length);
+ },
+
+ // Returns the result of multiplying the matrix from the right by the argument.
+ // If the argument is a scalar then just multiply all the elements. If the argument is
+ // a vector, a vector is returned, which saves you having to remember calling
+ // col(1) on the result.
+ multiply: function(matrix) {
+ if (!matrix.elements) {
+ return this.map(function(x) { return x * matrix; });
+ }
+ var returnVector = matrix.modulus ? true : false;
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.canMultiplyFromLeft(M)) { return null; }
+ var ni = this.elements.length, ki = ni, i, nj, kj = M[0].length, j;
+ var cols = this.elements[0].length, elements = [], sum, nc, c;
+ do { i = ki - ni;
+ elements[i] = [];
+ nj = kj;
+ do { j = kj - nj;
+ sum = 0;
+ nc = cols;
+ do { c = cols - nc;
+ sum += this.elements[i][c] * M[c][j];
+ } while (--nc);
+ elements[i][j] = sum;
+ } while (--nj);
+ } while (--ni);
+ var M = Matrix.create(elements);
+ return returnVector ? M.col(1) : M;
+ },
+
+ x: function(matrix) { return this.multiply(matrix); },
+
+ xvec : function xvec (vector) {
+ var inEl = vector.elements;
+ return Vector.createNoCopy (this.xvecarray (inEl));
+ },
+
+ xvecarray : function xvecarray (inEl) {
+ var jmax = inEl.length;
+ var outEl = new Array (jmax);
+ var thisEl = this.elements;
+ var imax = thisEl.length;
+ for (var i = 0; i < imax; ++i) {
+ var acc = 0;
+ var row = thisEl[i];
+ for (var j = 0; j < jmax; ++j) {
+ acc += row[j] * inEl[j];
+ }
+ outEl[i] = acc;
+ }
+ return outEl;
+ },
+
+ /**
+ * Multiplies a bigshot.Point3D with this matrix.
+ * The 4th column of the matrix is ignored, and the transformation
+ * behaves as if the point was a {@link bigshot.HomogeneousPoint3D} with a w value of 0.
+ */
+ xPoint3D : function xPoint3D (pt3d) {
+ var thisEl = this.elements;
+ return {
+ x : pt3d.x * thisEl[0][0] + pt3d.y * thisEl[0][1] + pt3d.z * thisEl[0][2],
+ y : pt3d.x * thisEl[1][0] + pt3d.y * thisEl[1][1] + pt3d.z * thisEl[1][2],
+ z : pt3d.x * thisEl[2][0] + pt3d.y * thisEl[2][1] + pt3d.z * thisEl[2][2]
+ };
+ },
+
+ /**
+ * Multiplies a bigshot.Point3D with this matrix.
+ * The transformation behaves as if the point was a {@link bigshot.HomogeneousPoint3D} homogenous coordinate with a w value of 1.
+ */
+ xPoint3Dhom1 : function xPoint3D (pt3d) {
+ var thisEl = this.elements;
+ return {
+ x : pt3d.x * thisEl[0][0] + pt3d.y * thisEl[0][1] + pt3d.z * thisEl[0][2] + thisEl[0][3],
+ y : pt3d.x * thisEl[1][0] + pt3d.y * thisEl[1][1] + pt3d.z * thisEl[1][2] + thisEl[1][3],
+ z : pt3d.x * thisEl[2][0] + pt3d.y * thisEl[2][1] + pt3d.z * thisEl[2][2] + thisEl[2][3]
+ };
+ },
+
+ /**
+ * Multiplies a bigshot.Point3D with this matrix, preserving the w-value.
+ * The transformation behaves as if the point was a x,y,z,w homogenous coordinate with a w value of 1.
+ *
+ * @type bigshot.HomogeneousPoint3D
+ */
+ xPoint3Dhom : function xPoint3D (pt3d) {
+ var thisEl = this.elements;
+ return {
+ x : pt3d.x * thisEl[0][0] + pt3d.y * thisEl[0][1] + pt3d.z * thisEl[0][2] + thisEl[0][3],
+ y : pt3d.x * thisEl[1][0] + pt3d.y * thisEl[1][1] + pt3d.z * thisEl[1][2] + thisEl[1][3],
+ z : pt3d.x * thisEl[2][0] + pt3d.y * thisEl[2][1] + pt3d.z * thisEl[2][2] + thisEl[2][3],
+ w : pt3d.x * thisEl[3][0] + pt3d.y * thisEl[3][1] + pt3d.z * thisEl[3][2] + thisEl[3][3]
+ };
+ },
+
+ // Returns a submatrix taken from the matrix
+ // Argument order is: start row, start col, nrows, ncols
+ // Element selection wraps if the required index is outside the matrix's bounds, so you could
+ // use this to perform row/column cycling or copy-augmenting.
+ minor: function(a, b, c, d) {
+ var elements = [], ni = c, i, nj, j;
+ var rows = this.elements.length, cols = this.elements[0].length;
+ do { i = c - ni;
+ elements[i] = [];
+ nj = d;
+ do { j = d - nj;
+ elements[i][j] = this.elements[(a+i-1)%rows][(b+j-1)%cols];
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(elements);
+ },
+
+ // Returns the transpose of the matrix
+ transpose: function() {
+ var rows = this.elements.length, cols = this.elements[0].length;
+ var elements = [], ni = cols, i, nj, j;
+ do { i = cols - ni;
+ elements[i] = [];
+ nj = rows;
+ do { j = rows - nj;
+ elements[i][j] = this.elements[j][i];
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(elements);
+ },
+
+ // Returns true iff the matrix is square
+ isSquare: function() {
+ return (this.elements.length == this.elements[0].length);
+ },
+
+ // Returns the (absolute) largest element of the matrix
+ max: function() {
+ var m = 0, ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ if (Math.abs(this.elements[i][j]) > Math.abs(m)) { m = this.elements[i][j]; }
+ } while (--nj);
+ } while (--ni);
+ return m;
+ },
+
+ // Returns the indeces of the first match found by reading row-by-row from left to right
+ indexOf: function(x) {
+ var index = null, ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ if (this.elements[i][j] == x) { return {i: i+1, j: j+1}; }
+ } while (--nj);
+ } while (--ni);
+ return null;
+ },
+
+ // If the matrix is square, returns the diagonal elements as a vector.
+ // Otherwise, returns null.
+ diagonal: function() {
+ if (!this.isSquare) { return null; }
+ var els = [], n = this.elements.length, k = n, i;
+ do { i = k - n;
+ els.push(this.elements[i][i]);
+ } while (--n);
+ return Vector.create(els);
+ },
+
+ // Make the matrix upper (right) triangular by Gaussian elimination.
+ // This method only adds multiples of rows to other rows. No rows are
+ // scaled up or switched, and the determinant is preserved.
+ toRightTriangular: function() {
+ var M = this.dup(), els;
+ var n = this.elements.length, k = n, i, np, kp = this.elements[0].length, p;
+ do { i = k - n;
+ if (M.elements[i][i] == 0) {
+ for (j = i + 1; j < k; j++) {
+ if (M.elements[j][i] != 0) {
+ els = []; np = kp;
+ do { p = kp - np;
+ els.push(M.elements[i][p] + M.elements[j][p]);
+ } while (--np);
+ M.elements[i] = els;
+ break;
+ }
+ }
+ }
+ if (M.elements[i][i] != 0) {
+ for (j = i + 1; j < k; j++) {
+ var multiplier = M.elements[j][i] / M.elements[i][i];
+ els = []; np = kp;
+ do { p = kp - np;
+ // Elements with column numbers up to an including the number
+ // of the row that we're subtracting can safely be set straight to
+ // zero, since that's the point of this routine and it avoids having
+ // to loop over and correct rounding errors later
+ els.push(p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier);
+ } while (--np);
+ M.elements[j] = els;
+ }
+ }
+ } while (--n);
+ return M;
+ },
+
+ toUpperTriangular: function() { return this.toRightTriangular(); },
+
+ // Returns the determinant for square matrices
+ determinant: function() {
+ if (!this.isSquare()) { return null; }
+ var M = this.toRightTriangular();
+ var det = M.elements[0][0], n = M.elements.length - 1, k = n, i;
+ do { i = k - n + 1;
+ det = det * M.elements[i][i];
+ } while (--n);
+ return det;
+ },
+
+ det: function() { return this.determinant(); },
+
+ // Returns true iff the matrix is singular
+ isSingular: function() {
+ return (this.isSquare() && this.determinant() === 0);
+ },
+
+ // Returns the trace for square matrices
+ trace: function() {
+ if (!this.isSquare()) { return null; }
+ var tr = this.elements[0][0], n = this.elements.length - 1, k = n, i;
+ do { i = k - n + 1;
+ tr += this.elements[i][i];
+ } while (--n);
+ return tr;
+ },
+
+ tr: function() { return this.trace(); },
+
+ // Returns the rank of the matrix
+ rank: function() {
+ var M = this.toRightTriangular(), rank = 0;
+ var ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ if (Math.abs(M.elements[i][j]) > Sylvester.precision) { rank++; break; }
+ } while (--nj);
+ } while (--ni);
+ return rank;
+ },
+
+ rk: function() { return this.rank(); },
+
+ // Returns the result of attaching the given argument to the right-hand side of the matrix
+ augment: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ var T = this.dup(), cols = T.elements[0].length;
+ var ni = T.elements.length, ki = ni, i, nj, kj = M[0].length, j;
+ if (ni != M.length) { return null; }
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ T.elements[i][cols + j] = M[i][j];
+ } while (--nj);
+ } while (--ni);
+ return T;
+ },
+
+ // Returns the inverse (if one exists) using Gauss-Jordan
+ inverse: function() {
+ if (!this.isSquare() || this.isSingular()) { return null; }
+ var ni = this.elements.length, ki = ni, i, j;
+ var M = this.augment(Matrix.I(ni)).toRightTriangular();
+ var np, kp = M.elements[0].length, p, els, divisor;
+ var inverse_elements = [], new_element;
+ // Matrix is non-singular so there will be no zeros on the diagonal
+ // Cycle through rows from last to first
+ do { i = ni - 1;
+ // First, normalise diagonal elements to 1
+ els = []; np = kp;
+ inverse_elements[i] = [];
+ divisor = M.elements[i][i];
+ do { p = kp - np;
+ new_element = M.elements[i][p] / divisor;
+ els.push(new_element);
+ // Shuffle of the current row of the right hand side into the results
+ // array as it will not be modified by later runs through this loop
+ if (p >= ki) { inverse_elements[i].push(new_element); }
+ } while (--np);
+ M.elements[i] = els;
+ // Then, subtract this row from those above it to
+ // give the identity matrix on the left hand side
+ for (j = 0; j < i; j++) {
+ els = []; np = kp;
+ do { p = kp - np;
+ els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i]);
+ } while (--np);
+ M.elements[j] = els;
+ }
+ } while (--ni);
+ return Matrix.create(inverse_elements);
+ },
+
+ inv: function() { return this.inverse(); },
+
+ // Returns the result of rounding all the elements
+ round: function() {
+ return this.map(function(x) { return Math.round(x); });
+ },
+
+ // Returns a copy of the matrix with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function(x) {
+ return this.map(function(p) {
+ return (Math.abs(p - x) <= Sylvester.precision) ? x : p;
+ });
+ },
+
+ // Returns a string representation of the matrix
+ inspect: function() {
+ var matrix_rows = [];
+ var n = this.elements.length, k = n, i;
+ do { i = k - n;
+ matrix_rows.push(Vector.create(this.elements[i]).inspect());
+ } while (--n);
+ return matrix_rows.join('\n');
+ },
+
+ // Set the matrix's elements from an array. If the argument passed
+ // is a vector, the resulting matrix will be a single column.
+ setElements: function(els) {
+ var i, elements = els.elements || els;
+ if (typeof(elements[0][0]) != 'undefined') {
+ var ni = elements.length, ki = ni, nj, kj, j;
+ this.elements = [];
+ do { i = ki - ni;
+ nj = elements[i].length; kj = nj;
+ this.elements[i] = [];
+ do { j = kj - nj;
+ this.elements[i][j] = elements[i][j];
+ } while (--nj);
+ } while(--ni);
+ return this;
+ }
+ var n = elements.length, k = n;
+ this.elements = [];
+ do { i = k - n;
+ this.elements.push([elements[i]]);
+ } while (--n);
+ return this;
+ }
+};
+
+// Constructor function
+Matrix.create = function(elements) {
+ var M = new Matrix();
+ return M.setElements(elements);
+};
+
+// Identity matrix of size n
+Matrix.I = function(n) {
+ var els = [], k = n, i, nj, j;
+ do { i = k - n;
+ els[i] = []; nj = k;
+ do { j = k - nj;
+ els[i][j] = (i == j) ? 1 : 0;
+ } while (--nj);
+ } while (--n);
+ return Matrix.create(els);
+};
+
+// Diagonal matrix - all off-diagonal elements are zero
+Matrix.Diagonal = function(elements) {
+ var n = elements.length, k = n, i;
+ var M = Matrix.I(n);
+ do { i = k - n;
+ M.elements[i][i] = elements[i];
+ } while (--n);
+ return M;
+};
+
+// Rotation matrix about some axis. If no axis is
+// supplied, assume we're after a 2D transform
+Matrix.Rotation = function(theta, a) {
+ if (!a) {
+ return Matrix.create([
+ [Math.cos(theta), -Math.sin(theta)],
+ [Math.sin(theta), Math.cos(theta)]
+ ]);
+ }
+ var axis = a.dup();
+ if (axis.elements.length != 3) { return null; }
+ var mod = axis.modulus();
+ var x = axis.elements[0]/mod, y = axis.elements[1]/mod, z = axis.elements[2]/mod;
+ var s = Math.sin(theta), c = Math.cos(theta), t = 1 - c;
+ // Formula derived here: http://www.gamedev.net/reference/articles/article1199.asp
+ // That proof rotates the co-ordinate system so theta
+ // becomes -theta and sin becomes -sin here.
+ return Matrix.create([
+ [ t*x*x + c, t*x*y - s*z, t*x*z + s*y ],
+ [ t*x*y + s*z, t*y*y + c, t*y*z - s*x ],
+ [ t*x*z - s*y, t*y*z + s*x, t*z*z + c ]
+ ]);
+};
+
+// Special case rotations
+Matrix.RotationX = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [ 1, 0, 0 ],
+ [ 0, c, -s ],
+ [ 0, s, c ]
+ ]);
+};
+Matrix.RotationY = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [ c, 0, s ],
+ [ 0, 1, 0 ],
+ [ -s, 0, c ]
+ ]);
+};
+Matrix.RotationZ = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [ c, -s, 0 ],
+ [ s, c, 0 ],
+ [ 0, 0, 1 ]
+ ]);
+};
+
+// Random matrix of n rows, m columns
+Matrix.Random = function(n, m) {
+ return Matrix.Zero(n, m).map(
+ function() { return Math.random(); }
+ );
+};
+
+// Matrix filled with zeros
+Matrix.Zero = function(n, m) {
+ var els = [], ni = n, i, nj, j;
+ do { i = n - ni;
+ els[i] = [];
+ nj = m;
+ do { j = m - nj;
+ els[i][j] = 0;
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(els);
+};
+
+
+
+function Line() {}
+Line.prototype = {
+
+ // Returns true if the argument occupies the same space as the line
+ eql: function(line) {
+ return (this.isParallelTo(line) && this.contains(line.anchor));
+ },
+
+ // Returns a copy of the line
+ dup: function() {
+ return Line.create(this.anchor, this.direction);
+ },
+
+ // Returns the result of translating the line by the given vector/array
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ return Line.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.direction);
+ },
+
+ // Returns true if the line is parallel to the argument. Here, 'parallel to'
+ // means that the argument's direction is either parallel or antiparallel to
+ // the line's own direction. A line is parallel to a plane if the two do not
+ // have a unique intersection.
+ isParallelTo: function(obj) {
+ if (obj.normal) { return obj.isParallelTo(this); }
+ var theta = this.direction.angleFrom(obj.direction);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(theta - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns the line's perpendicular distance from the argument,
+ // which can be a point, a line or a plane
+ distanceFrom: function(obj) {
+ if (obj.normal) { return obj.distanceFrom(this); }
+ if (obj.direction) {
+ // obj is a line
+ if (this.isParallelTo(obj)) { return this.distanceFrom(obj.anchor); }
+ var N = this.direction.cross(obj.direction).toUnitVector().elements;
+ var A = this.anchor.elements, B = obj.anchor.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var PA1 = P[0] - A[0], PA2 = P[1] - A[1], PA3 = (P[2] || 0) - A[2];
+ var modPA = Math.sqrt(PA1*PA1 + PA2*PA2 + PA3*PA3);
+ if (modPA === 0) return 0;
+ // Assumes direction vector is normalized
+ var cosTheta = (PA1 * D[0] + PA2 * D[1] + PA3 * D[2]) / modPA;
+ var sin2 = 1 - cosTheta*cosTheta;
+ return Math.abs(modPA * Math.sqrt(sin2 < 0 ? 0 : sin2));
+ }
+ },
+
+ // Returns true iff the argument is a point on the line
+ contains: function(point) {
+ var dist = this.distanceFrom(point);
+ return (dist !== null && dist <= Sylvester.precision);
+ },
+
+ // Returns true iff the line lies in the given plane
+ liesIn: function(plane) {
+ return plane.contains(this);
+ },
+
+ // Returns true iff the line has a unique point of intersection with the argument
+ intersects: function(obj) {
+ if (obj.normal) { return obj.intersects(this); }
+ return (!this.isParallelTo(obj) && this.distanceFrom(obj) <= Sylvester.precision);
+ },
+
+ // Returns the unique intersection point with the argument, if one exists
+ intersectionWith: function(obj) {
+ if (obj.normal) { return obj.intersectionWith(this); }
+ if (!this.intersects(obj)) { return null; }
+ var P = this.anchor.elements, X = this.direction.elements,
+ Q = obj.anchor.elements, Y = obj.direction.elements;
+ var X1 = X[0], X2 = X[1], X3 = X[2], Y1 = Y[0], Y2 = Y[1], Y3 = Y[2];
+ var PsubQ1 = P[0] - Q[0], PsubQ2 = P[1] - Q[1], PsubQ3 = P[2] - Q[2];
+ var XdotQsubP = - X1*PsubQ1 - X2*PsubQ2 - X3*PsubQ3;
+ var YdotPsubQ = Y1*PsubQ1 + Y2*PsubQ2 + Y3*PsubQ3;
+ var XdotX = X1*X1 + X2*X2 + X3*X3;
+ var YdotY = Y1*Y1 + Y2*Y2 + Y3*Y3;
+ var XdotY = X1*Y1 + X2*Y2 + X3*Y3;
+ var k = (XdotQsubP * YdotY / XdotX + XdotY * YdotPsubQ) / (YdotY - XdotY * XdotY);
+ return Vector.create([P[0] + k*X1, P[1] + k*X2, P[2] + k*X3]);
+ },
+
+ // Returns the point on the line that is closest to the given point or line
+ pointClosestTo: function(obj) {
+ if (obj.direction) {
+ // obj is a line
+ if (this.intersects(obj)) { return this.intersectionWith(obj); }
+ if (this.isParallelTo(obj)) { return null; }
+ var D = this.direction.elements, E = obj.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], E1 = E[0], E2 = E[1], E3 = E[2];
+ // Create plane containing obj and the shared normal and intersect this with it
+ // Thank you: http://www.cgafaq.info/wiki/Line-line_distance
+ var x = (D3 * E1 - D1 * E3), y = (D1 * E2 - D2 * E1), z = (D2 * E3 - D3 * E2);
+ var N = Vector.create([x * E3 - y * E2, y * E1 - z * E3, z * E2 - x * E1]);
+ var P = Plane.create(obj.anchor, N);
+ return P.intersectionWith(this);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ if (this.contains(P)) { return Vector.create(P); }
+ var A = this.anchor.elements, D = this.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = D1 * (P[1]-A2) - D2 * (P[0]-A1), y = D2 * ((P[2] || 0) - A3) - D3 * (P[1]-A2),
+ z = D3 * (P[0]-A1) - D1 * ((P[2] || 0) - A3);
+ var V = Vector.create([D2 * x - D3 * z, D3 * y - D1 * x, D1 * z - D2 * y]);
+ var k = this.distanceFrom(P) / V.modulus();
+ return Vector.create([
+ P[0] + V.elements[0] * k,
+ P[1] + V.elements[1] * k,
+ (P[2] || 0) + V.elements[2] * k
+ ]);
+ }
+ },
+
+ // Returns a copy of the line rotated by t radians about the given line. Works by
+ // finding the argument's closest point to this line's anchor point (call this C) and
+ // rotating the anchor about C. Also rotates the line's direction about the argument's.
+ // Be careful with this - the rotation axis' direction affects the outcome!
+ rotate: function(t, line) {
+ // If we're working in 2D
+ if (typeof(line.direction) == 'undefined') { line = Line.create(line.to3D(), Vector.k); }
+ var R = Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Line.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * D[0] + R[0][1] * D[1] + R[0][2] * D[2],
+ R[1][0] * D[0] + R[1][1] * D[1] + R[1][2] * D[2],
+ R[2][0] * D[0] + R[2][1] * D[1] + R[2][2] * D[2]
+ ]);
+ },
+
+ // Returns the line's reflection in the given point or line
+ reflectionIn: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, D = this.direction.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], D1 = D[0], D2 = D[1], D3 = D[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the line's direction vector to its anchor, then mirror that in the plane
+ var AD1 = A1 + D1, AD2 = A2 + D2, AD3 = A3 + D3;
+ var Q = obj.pointClosestTo([AD1, AD2, AD3]).elements;
+ var newD = [Q[0] + (Q[0] - AD1) - newA[0], Q[1] + (Q[1] - AD2) - newA[1], Q[2] + (Q[2] - AD3) - newA[2]];
+ return Line.create(newA, newD);
+ } else if (obj.direction) {
+ // obj is a line - reflection obtained by rotating PI radians about obj
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point - just reflect the line's anchor in it
+ var P = obj.elements || obj;
+ return Line.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.direction);
+ }
+ },
+
+ // Set the line's anchor point and direction.
+ setVectors: function(anchor, direction) {
+ // Need to do this so that line's properties are not
+ // references to the arguments passed in
+ anchor = Vector.create(anchor);
+ direction = Vector.create(direction);
+ if (anchor.elements.length == 2) {anchor.elements.push(0); }
+ if (direction.elements.length == 2) { direction.elements.push(0); }
+ if (anchor.elements.length > 3 || direction.elements.length > 3) { return null; }
+ var mod = direction.modulus();
+ if (mod === 0) { return null; }
+ this.anchor = anchor;
+ this.direction = Vector.create([
+ direction.elements[0] / mod,
+ direction.elements[1] / mod,
+ direction.elements[2] / mod
+ ]);
+ return this;
+ }
+};
+
+
+// Constructor function
+Line.create = function(anchor, direction) {
+ var L = new Line();
+ return L.setVectors(anchor, direction);
+};
+
+// Axes
+Line.X = Line.create(Vector.Zero(3), Vector.i);
+Line.Y = Line.create(Vector.Zero(3), Vector.j);
+Line.Z = Line.create(Vector.Zero(3), Vector.k);
+
+
+
+function Plane() {}
+Plane.prototype = {
+
+ // Returns true iff the plane occupies the same space as the argument
+ eql: function(plane) {
+ return (this.contains(plane.anchor) && this.isParallelTo(plane));
+ },
+
+ // Returns a copy of the plane
+ dup: function() {
+ return Plane.create(this.anchor, this.normal);
+ },
+
+ // Returns the result of translating the plane by the given vector
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ return Plane.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.normal);
+ },
+
+ // Returns true iff the plane is parallel to the argument. Will return true
+ // if the planes are equal, or if you give a line and it lies in the plane.
+ isParallelTo: function(obj) {
+ var theta;
+ if (obj.normal) {
+ // obj is a plane
+ theta = this.normal.angleFrom(obj.normal);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(Math.PI - theta) <= Sylvester.precision);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.normal.isPerpendicularTo(obj.direction);
+ }
+ return null;
+ },
+
+ // Returns true iff the receiver is perpendicular to the argument
+ isPerpendicularTo: function(plane) {
+ var theta = this.normal.angleFrom(plane.normal);
+ return (Math.abs(Math.PI/2 - theta) <= Sylvester.precision);
+ },
+
+ // Returns the plane's distance from the given object (point, line or plane)
+ distanceFrom: function(obj) {
+ if (this.intersects(obj) || this.contains(obj)) { return 0; }
+ if (obj.anchor) {
+ // obj is a plane or line
+ var A = this.anchor.elements, B = obj.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2]);
+ }
+ },
+
+ // Returns true iff the plane contains the given point or line
+ contains: function(obj) {
+ if (obj.normal) { return null; }
+ if (obj.direction) {
+ return (this.contains(obj.anchor) && this.contains(obj.anchor.add(obj.direction)));
+ } else {
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var diff = Math.abs(N[0]*(A[0] - P[0]) + N[1]*(A[1] - P[1]) + N[2]*(A[2] - (P[2] || 0)));
+ return (diff <= Sylvester.precision);
+ }
+ },
+
+ // Returns true iff the plane has a unique point/line of intersection with the argument
+ intersects: function(obj) {
+ if (typeof(obj.direction) == 'undefined' && typeof(obj.normal) == 'undefined') { return null; }
+ return !this.isParallelTo(obj);
+ },
+
+ // Returns the unique intersection with the argument, if one exists. The result
+ // will be a vector if a line is supplied, and a line if a plane is supplied.
+ intersectionWith: function(obj) {
+ if (!this.intersects(obj)) { return null; }
+ if (obj.direction) {
+ // obj is a line
+ var A = obj.anchor.elements, D = obj.direction.elements,
+ P = this.anchor.elements, N = this.normal.elements;
+ var multiplier = (N[0]*(P[0]-A[0]) + N[1]*(P[1]-A[1]) + N[2]*(P[2]-A[2])) / (N[0]*D[0] + N[1]*D[1] + N[2]*D[2]);
+ return Vector.create([A[0] + D[0]*multiplier, A[1] + D[1]*multiplier, A[2] + D[2]*multiplier]);
+ } else if (obj.normal) {
+ // obj is a plane
+ var direction = this.normal.cross(obj.normal).toUnitVector();
+ // To find an anchor point, we find one co-ordinate that has a value
+ // of zero somewhere on the intersection, and remember which one we picked
+ var N = this.normal.elements, A = this.anchor.elements,
+ O = obj.normal.elements, B = obj.anchor.elements;
+ var solver = Matrix.Zero(2,2), i = 0;
+ while (solver.isSingular()) {
+ i++;
+ solver = Matrix.create([
+ [ N[i%3], N[(i+1)%3] ],
+ [ O[i%3], O[(i+1)%3] ]
+ ]);
+ }
+ // Then we solve the simultaneous equations in the remaining dimensions
+ var inverse = solver.inverse().elements;
+ var x = N[0]*A[0] + N[1]*A[1] + N[2]*A[2];
+ var y = O[0]*B[0] + O[1]*B[1] + O[2]*B[2];
+ var intersection = [
+ inverse[0][0] * x + inverse[0][1] * y,
+ inverse[1][0] * x + inverse[1][1] * y
+ ];
+ var anchor = [];
+ for (var j = 1; j <= 3; j++) {
+ // This formula picks the right element from intersection by
+ // cycling depending on which element we set to zero above
+ anchor.push((i == j) ? 0 : intersection[(j + (5 - i)%3)%3]);
+ }
+ return Line.create(anchor, direction);
+ }
+ },
+
+ // Returns the point in the plane closest to the given point
+ pointClosestTo: function(point) {
+ var P = point.elements || point;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var dot = (A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2];
+ return Vector.create([P[0] + N[0] * dot, P[1] + N[1] * dot, (P[2] || 0) + N[2] * dot]);
+ },
+
+ // Returns a copy of the plane, rotated by t radians about the given line
+ // See notes on Line#rotate.
+ rotate: function(t, line) {
+ var R = Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Plane.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * N[0] + R[0][1] * N[1] + R[0][2] * N[2],
+ R[1][0] * N[0] + R[1][1] * N[1] + R[1][2] * N[2],
+ R[2][0] * N[0] + R[2][1] * N[1] + R[2][2] * N[2]
+ ]);
+ },
+
+ // Returns the reflection of the plane in the given point, line or plane.
+ reflectionIn: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, N = this.normal.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], N1 = N[0], N2 = N[1], N3 = N[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the plane's normal to its anchor, then mirror that in the other plane
+ var AN1 = A1 + N1, AN2 = A2 + N2, AN3 = A3 + N3;
+ var Q = obj.pointClosestTo([AN1, AN2, AN3]).elements;
+ var newN = [Q[0] + (Q[0] - AN1) - newA[0], Q[1] + (Q[1] - AN2) - newA[1], Q[2] + (Q[2] - AN3) - newA[2]];
+ return Plane.create(newA, newN);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ return Plane.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.normal);
+ }
+ },
+
+ // Sets the anchor point and normal to the plane. If three arguments are specified,
+ // the normal is calculated by assuming the three points should lie in the same plane.
+ // If only two are sepcified, the second is taken to be the normal. Normal vector is
+ // normalised before storage.
+ setVectors: function(anchor, v1, v2) {
+ anchor = Vector.create(anchor);
+ anchor = anchor.to3D(); if (anchor === null) { return null; }
+ v1 = Vector.create(v1);
+ v1 = v1.to3D(); if (v1 === null) { return null; }
+ if (typeof(v2) == 'undefined') {
+ v2 = null;
+ } else {
+ v2 = Vector.create(v2);
+ v2 = v2.to3D(); if (v2 === null) { return null; }
+ }
+ var A1 = anchor.elements[0], A2 = anchor.elements[1], A3 = anchor.elements[2];
+ var v11 = v1.elements[0], v12 = v1.elements[1], v13 = v1.elements[2];
+ var normal, mod;
+ if (v2 !== null) {
+ var v21 = v2.elements[0], v22 = v2.elements[1], v23 = v2.elements[2];
+ normal = Vector.create([
+ (v12 - A2) * (v23 - A3) - (v13 - A3) * (v22 - A2),
+ (v13 - A3) * (v21 - A1) - (v11 - A1) * (v23 - A3),
+ (v11 - A1) * (v22 - A2) - (v12 - A2) * (v21 - A1)
+ ]);
+ mod = normal.modulus();
+ if (mod === 0) { return null; }
+ normal = Vector.create([normal.elements[0] / mod, normal.elements[1] / mod, normal.elements[2] / mod]);
+ } else {
+ mod = Math.sqrt(v11*v11 + v12*v12 + v13*v13);
+ if (mod === 0) { return null; }
+ normal = Vector.create([v1.elements[0] / mod, v1.elements[1] / mod, v1.elements[2] / mod]);
+ }
+ this.anchor = anchor;
+ this.normal = normal;
+ return this;
+ }
+};
+
+// Constructor function
+Plane.create = function(anchor, v1, v2) {
+ var P = new Plane();
+ return P.setVectors(anchor, v1, v2);
+};
+
+// X-Y-Z planes
+Plane.XY = Plane.create(Vector.Zero(3), Vector.k);
+Plane.YZ = Plane.create(Vector.Zero(3), Vector.i);
+Plane.ZX = Plane.create(Vector.Zero(3), Vector.j);
+Plane.YX = Plane.XY; Plane.ZY = Plane.YZ; Plane.XZ = Plane.ZX;
+
+// Utility functions
+var $V = Vector.create;
+var $M = Matrix.create;
+var $L = Line.create;
+var $P = Plane.create;
+/*
+ Copyright (c) 2009 Mozilla Corp
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+// augment Sylvester some
+Matrix.Translation = function (v)
+{
+ if (v.elements.length == 2) {
+ var r = Matrix.I(3);
+ r.elements[2][0] = v.elements[0];
+ r.elements[2][1] = v.elements[1];
+ return r;
+ }
+
+ if (v.elements.length == 3) {
+ var r = Matrix.I(4);
+ r.elements[0][3] = v.elements[0];
+ r.elements[1][3] = v.elements[1];
+ r.elements[2][3] = v.elements[2];
+ return r;
+ }
+
+ throw "Invalid length for Translation";
+}
+
+Matrix.prototype.flatten = function ()
+{
+ var result = [];
+ if (this.elements.length == 0)
+ return [];
+
+
+ for (var j = 0; j < this.elements[0].length; j++)
+ for (var i = 0; i < this.elements.length; i++)
+ result.push(this.elements[i][j]);
+ return result;
+}
+
+Matrix.prototype.ensure4x4 = function()
+{
+ if (this.elements.length == 4 &&
+ this.elements[0].length == 4)
+ return this;
+
+ if (this.elements.length > 4 ||
+ this.elements[0].length > 4)
+ return null;
+
+ for (var i = 0; i < this.elements.length; i++) {
+ for (var j = this.elements[i].length; j < 4; j++) {
+ if (i == j)
+ this.elements[i].push(1);
+ else
+ this.elements[i].push(0);
+ }
+ }
+
+ for (var i = this.elements.length; i < 4; i++) {
+ if (i == 0)
+ this.elements.push([1, 0, 0, 0]);
+ else if (i == 1)
+ this.elements.push([0, 1, 0, 0]);
+ else if (i == 2)
+ this.elements.push([0, 0, 1, 0]);
+ else if (i == 3)
+ this.elements.push([0, 0, 0, 1]);
+ }
+
+ return this;
+};
+
+Matrix.prototype.make3x3 = function()
+{
+ if (this.elements.length != 4 ||
+ this.elements[0].length != 4)
+ return null;
+
+ return Matrix.create([[this.elements[0][0], this.elements[0][1], this.elements[0][2]],
+ [this.elements[1][0], this.elements[1][1], this.elements[1][2]],
+ [this.elements[2][0], this.elements[2][1], this.elements[2][2]]]);
+};
+
+Vector.prototype.flatten = function ()
+{
+ return this.elements;
+};
+
+function mht(m) {
+ var s = "";
+ if (m.length == 16) {
+ for (var i = 0; i < 4; i++) {
+ s += "<span style='font-family: monospace'>[" + m[i*4+0].toFixed(4) + "," + m[i*4+1].toFixed(4) + "," + m[i*4+2].toFixed(4) + "," + m[i*4+3].toFixed(4) + "]</span><br>";
+ }
+ } else if (m.length == 9) {
+ for (var i = 0; i < 3; i++) {
+ s += "<span style='font-family: monospace'>[" + m[i*3+0].toFixed(4) + "," + m[i*3+1].toFixed(4) + "," + m[i*3+2].toFixed(4) + "]</font><br>";
+ }
+ } else {
+ return m.toString();
+ }
+ return s;
+}
+
+//
+// gluLookAt
+//
+function makeLookAt(ex, ey, ez,
+ cx, cy, cz,
+ ux, uy, uz)
+{
+ var eye = $V([ex, ey, ez]);
+ var center = $V([cx, cy, cz]);
+ var up = $V([ux, uy, uz]);
+
+ var mag;
+
+ var z = eye.subtract(center).toUnitVector();
+ var x = up.cross(z).toUnitVector();
+ var y = z.cross(x).toUnitVector();
+
+ var m = $M([[x.e(1), x.e(2), x.e(3), 0],
+ [y.e(1), y.e(2), y.e(3), 0],
+ [z.e(1), z.e(2), z.e(3), 0],
+ [0, 0, 0, 1]]);
+
+ var t = $M([[1, 0, 0, -ex],
+ [0, 1, 0, -ey],
+ [0, 0, 1, -ez],
+ [0, 0, 0, 1]]);
+ return m.x(t);
+}
+
+//
+// glOrtho
+//
+function makeOrtho(left, right,
+ bottom, top,
+ znear, zfar)
+{
+ var tx = -(right+left)/(right-left);
+ var ty = -(top+bottom)/(top-bottom);
+ var tz = -(zfar+znear)/(zfar-znear);
+
+ return $M([[2/(right-left), 0, 0, tx],
+ [0, 2/(top-bottom), 0, ty],
+ [0, 0, -2/(zfar-znear), tz],
+ [0, 0, 0, 1]]);
+}
+
+//
+// gluPerspective
+//
+function makePerspective(fovy, aspect, znear, zfar)
+{
+ var ymax = znear * Math.tan(fovy * Math.PI / 360.0);
+ var ymin = -ymax;
+ var xmin = ymin * aspect;
+ var xmax = ymax * aspect;
+
+ return makeFrustum(xmin, xmax, ymin, ymax, znear, zfar);
+}
+
+//
+// glFrustum
+//
+function makeFrustum(left, right,
+ bottom, top,
+ znear, zfar)
+{
+ var X = 2*znear/(right-left);
+ var Y = 2*znear/(top-bottom);
+ var A = (right+left)/(right-left);
+ var B = (top+bottom)/(top-bottom);
+ var C = -(zfar+znear)/(zfar-znear);
+ var D = -2*zfar*znear/(zfar-znear);
+
+ return $M([[X, 0, A, 0],
+ [0, Y, B, 0],
+ [0, 0, C, D],
+ [0, 0, -1, 0]]);
+}
+
+//
+// glOrtho
+//
+function makeOrtho(left, right, bottom, top, znear, zfar)
+{
+ var tx = - (right + left) / (right - left);
+ var ty = - (top + bottom) / (top - bottom);
+ var tz = - (zfar + znear) / (zfar - znear);
+
+ return $M([[2 / (right - left), 0, 0, tx],
+ [0, 2 / (top - bottom), 0, ty],
+ [0, 0, -2 / (zfar - znear), tz],
+ [0, 0, 0, 1]]);
+}
+
+//Copyright (c) 2009 The Chromium Authors. All rights reserved.
+//Use of this source code is governed by a BSD-style license that can be
+//found in the LICENSE file.
+
+// Various functions for helping debug WebGL apps.
+
+WebGLDebugUtils = function() {
+
+/**
+ * Wrapped logging function.
+ * @param {string} msg Message to log.
+ */
+var log = function(msg) {
+ if (window.console && window.console.log) {
+ window.console.log(msg);
+ }
+};
+
+/**
+ * Which arguements are enums.
+ * @type {!Object.<number, string>}
+ */
+var glValidEnumContexts = {
+
+ // Generic setters and getters
+
+ 'enable': { 0:true },
+ 'disable': { 0:true },
+ 'getParameter': { 0:true },
+
+ // Rendering
+
+ 'drawArrays': { 0:true },
+ 'drawElements': { 0:true, 2:true },
+
+ // Shaders
+
+ 'createShader': { 0:true },
+ 'getShaderParameter': { 1:true },
+ 'getProgramParameter': { 1:true },
+
+ // Vertex attributes
+
+ 'getVertexAttrib': { 1:true },
+ 'vertexAttribPointer': { 2:true },
+
+ // Textures
+
+ 'bindTexture': { 0:true },
+ 'activeTexture': { 0:true },
+ 'getTexParameter': { 0:true, 1:true },
+ 'texParameterf': { 0:true, 1:true },
+ 'texParameteri': { 0:true, 1:true, 2:true },
+ 'texImage2D': { 0:true, 2:true, 6:true, 7:true },
+ 'texSubImage2D': { 0:true, 6:true, 7:true },
+ 'copyTexImage2D': { 0:true, 2:true },
+ 'copyTexSubImage2D': { 0:true },
+ 'generateMipmap': { 0:true },
+
+ // Buffer objects
+
+ 'bindBuffer': { 0:true },
+ 'bufferData': { 0:true, 2:true },
+ 'bufferSubData': { 0:true },
+ 'getBufferParameter': { 0:true, 1:true },
+
+ // Renderbuffers and framebuffers
+
+ 'pixelStorei': { 0:true, 1:true },
+ 'readPixels': { 4:true, 5:true },
+ 'bindRenderbuffer': { 0:true },
+ 'bindFramebuffer': { 0:true },
+ 'checkFramebufferStatus': { 0:true },
+ 'framebufferRenderbuffer': { 0:true, 1:true, 2:true },
+ 'framebufferTexture2D': { 0:true, 1:true, 2:true },
+ 'getFramebufferAttachmentParameter': { 0:true, 1:true, 2:true },
+ 'getRenderbufferParameter': { 0:true, 1:true },
+ 'renderbufferStorage': { 0:true, 1:true },
+
+ // Frame buffer operations (clear, blend, depth test, stencil)
+
+ 'clear': { 0:true },
+ 'depthFunc': { 0:true },
+ 'blendFunc': { 0:true, 1:true },
+ 'blendFuncSeparate': { 0:true, 1:true, 2:true, 3:true },
+ 'blendEquation': { 0:true },
+ 'blendEquationSeparate': { 0:true, 1:true },
+ 'stencilFunc': { 0:true },
+ 'stencilFuncSeparate': { 0:true, 1:true },
+ 'stencilMaskSeparate': { 0:true },
+ 'stencilOp': { 0:true, 1:true, 2:true },
+ 'stencilOpSeparate': { 0:true, 1:true, 2:true, 3:true },
+
+ // Culling
+
+ 'cullFace': { 0:true },
+ 'frontFace': { 0:true }
+};
+
+/**
+ * Map of numbers to names.
+ * @type {Object}
+ */
+var glEnums = null;
+
+/**
+ * Initializes this module. Safe to call more than once.
+ * @param {!WebGLRenderingContext} ctx A WebGL context. If
+ * you have more than one context it doesn't matter which one
+ * you pass in, it is only used to pull out constants.
+ */
+function init(ctx) {
+ if (glEnums == null) {
+ glEnums = { };
+ for (var propertyName in ctx) {
+ if (typeof ctx[propertyName] == 'number') {
+ glEnums[ctx[propertyName]] = propertyName;
+ }
+ }
+ }
+}
+
+/**
+ * Checks the utils have been initialized.
+ */
+function checkInit() {
+ if (glEnums == null) {
+ throw 'WebGLDebugUtils.init(ctx) not called';
+ }
+}
+
+/**
+ * Returns true or false if value matches any WebGL enum
+ * @param {*} value Value to check if it might be an enum.
+ * @return {boolean} True if value matches one of the WebGL defined enums
+ */
+function mightBeEnum(value) {
+ checkInit();
+ return (glEnums[value] !== undefined);
+}
+
+/**
+ * Gets an string version of an WebGL enum.
+ *
+ * Example:
+ * var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+ *
+ * @param {number} value Value to return an enum for
+ * @return {string} The string version of the enum.
+ */
+function glEnumToString(value) {
+ checkInit();
+ var name = glEnums[value];
+ return (name !== undefined) ? name :
+ ("*UNKNOWN WebGL ENUM (0x" + value.toString(16) + ")");
+}
+
+/**
+ * Returns the string version of a WebGL argument.
+ * Attempts to convert enum arguments to strings.
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} argumentIndx the index of the argument.
+ * @param {*} value The value of the argument.
+ * @return {string} The value as a string.
+ */
+function glFunctionArgToString(functionName, argumentIndex, value) {
+ var funcInfo = glValidEnumContexts[functionName];
+ if (funcInfo !== undefined) {
+ if (funcInfo[argumentIndex]) {
+ return glEnumToString(value);
+ }
+ }
+ return value.toString();
+}
+
+/**
+ * Given a WebGL context returns a wrapped context that calls
+ * gl.getError after every command and calls a function if the
+ * result is not gl.NO_ERROR.
+ *
+ * @param {!WebGLRenderingContext} ctx The webgl context to
+ * wrap.
+ * @param {!function(err, funcName, args): void} opt_onErrorFunc
+ * The function to call when gl.getError returns an
+ * error. If not specified the default function calls
+ * console.log with a message.
+ */
+function makeDebugContext(ctx, opt_onErrorFunc) {
+ init(ctx);
+ opt_onErrorFunc = opt_onErrorFunc || function(err, functionName, args) {
+ // apparently we can't do args.join(",");
+ var argStr = "";
+ for (var ii = 0; ii < args.length; ++ii) {
+ argStr += ((ii == 0) ? '' : ', ') +
+ glFunctionArgToString(functionName, ii, args[ii]);
+ }
+ log("WebGL error "+ glEnumToString(err) + " in "+ functionName +
+ "(" + argStr + ")");
+ };
+
+ // Holds booleans for each GL error so after we get the error ourselves
+ // we can still return it to the client app.
+ var glErrorShadow = { };
+
+ // Makes a function that calls a WebGL function and then calls getError.
+ function makeErrorWrapper(ctx, functionName) {
+ return function() {
+ var result = ctx[functionName].apply(ctx, arguments);
+ var err = ctx.getError();
+ if (err != 0) {
+ glErrorShadow[err] = true;
+ opt_onErrorFunc(err, functionName, arguments);
+ }
+ return result;
+ };
+ }
+
+ // Make a an object that has a copy of every property of the WebGL context
+ // but wraps all functions.
+ var wrapper = {};
+ for (var propertyName in ctx) {
+ if (typeof ctx[propertyName] == 'function') {
+ wrapper[propertyName] = makeErrorWrapper(ctx, propertyName);
+ } else {
+ wrapper[propertyName] = ctx[propertyName];
+ }
+ }
+
+ // Override the getError function with one that returns our saved results.
+ wrapper.getError = function() {
+ for (var err in glErrorShadow) {
+ if (glErrorShadow[err]) {
+ glErrorShadow[err] = false;
+ return err;
+ }
+ }
+ return ctx.NO_ERROR;
+ };
+
+ return wrapper;
+}
+
+function resetToInitialState(ctx) {
+ var numAttribs = ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS);
+ var tmp = ctx.createBuffer();
+ ctx.bindBuffer(ctx.ARRAY_BUFFER, tmp);
+ for (var ii = 0; ii < numAttribs; ++ii) {
+ ctx.disableVertexAttribArray(ii);
+ ctx.vertexAttribPointer(ii, 4, ctx.FLOAT, false, 0, 0);
+ ctx.vertexAttrib1f(ii, 0);
+ }
+ ctx.deleteBuffer(tmp);
+
+ var numTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);
+ for (var ii = 0; ii < numTextureUnits; ++ii) {
+ ctx.activeTexture(ctx.TEXTURE0 + ii);
+ ctx.bindTexture(ctx.TEXTURE_CUBE_MAP, null);
+ ctx.bindTexture(ctx.TEXTURE_2D, null);
+ }
+
+ ctx.activeTexture(ctx.TEXTURE0);
+ ctx.useProgram(null);
+ ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
+ ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
+ ctx.bindFramebuffer(ctx.FRAMEBUFFER, null);
+ ctx.bindRenderbuffer(ctx.RENDERBUFFER, null);
+ ctx.disable(ctx.BLEND);
+ ctx.disable(ctx.CULL_FACE);
+ ctx.disable(ctx.DEPTH_TEST);
+ ctx.disable(ctx.DITHER);
+ ctx.disable(ctx.SCISSOR_TEST);
+ ctx.blendColor(0, 0, 0, 0);
+ ctx.blendEquation(ctx.FUNC_ADD);
+ ctx.blendFunc(ctx.ONE, ctx.ZERO);
+ ctx.clearColor(0, 0, 0, 0);
+ ctx.clearDepth(1);
+ ctx.clearStencil(-1);
+ ctx.colorMask(true, true, true, true);
+ ctx.cullFace(ctx.BACK);
+ ctx.depthFunc(ctx.LESS);
+ ctx.depthMask(true);
+ ctx.depthRange(0, 1);
+ ctx.frontFace(ctx.CCW);
+ ctx.hint(ctx.GENERATE_MIPMAP_HINT, ctx.DONT_CARE);
+ ctx.lineWidth(1);
+ ctx.pixelStorei(ctx.PACK_ALIGNMENT, 4);
+ ctx.pixelStorei(ctx.UNPACK_ALIGNMENT, 4);
+ ctx.pixelStorei(ctx.UNPACK_FLIP_Y_WEBGL, false);
+ ctx.pixelStorei(ctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
+ // TODO: Delete this IF.
+ if (ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL) {
+ ctx.pixelStorei(ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL, ctx.BROWSER_DEFAULT_WEBGL);
+ }
+ ctx.polygonOffset(0, 0);
+ ctx.sampleCoverage(1, false);
+ ctx.scissor(0, 0, ctx.canvas.width, ctx.canvas.height);
+ ctx.stencilFunc(ctx.ALWAYS, 0, 0xFFFFFFFF);
+ ctx.stencilMask(0xFFFFFFFF);
+ ctx.stencilOp(ctx.KEEP, ctx.KEEP, ctx.KEEP);
+ ctx.viewport(0, 0, ctx.canvas.clientWidth, ctx.canvas.clientHeight);
+ ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT | ctx.STENCIL_BUFFER_BIT);
+
+ // TODO: This should NOT be needed but Firefox fails with 'hint'
+ while(ctx.getError());
+}
+
+function makeLostContextSimulatingContext(ctx) {
+ var wrapper_ = {};
+ var contextId_ = 1;
+ var contextLost_ = false;
+ var resourceId_ = 0;
+ var resourceDb_ = [];
+ var onLost_ = undefined;
+ var onRestored_ = undefined;
+ var nextOnRestored_ = undefined;
+
+ // Holds booleans for each GL error so can simulate errors.
+ var glErrorShadow_ = { };
+
+ function isWebGLObject(obj) {
+ //return false;
+ return (obj instanceof WebGLBuffer ||
+ obj instanceof WebGLFramebuffer ||
+ obj instanceof WebGLProgram ||
+ obj instanceof WebGLRenderbuffer ||
+ obj instanceof WebGLShader ||
+ obj instanceof WebGLTexture);
+ }
+
+ function checkResources(args) {
+ for (var ii = 0; ii < args.length; ++ii) {
+ var arg = args[ii];
+ if (isWebGLObject(arg)) {
+ return arg.__webglDebugContextLostId__ == contextId_;
+ }
+ }
+ return true;
+ }
+
+ function clearErrors() {
+ var k = Object.keys(glErrorShadow_);
+ for (var ii = 0; ii < k.length; ++ii) {
+ delete glErrorShdow_[k];
+ }
+ }
+
+ // Makes a function that simulates WebGL when out of context.
+ function makeLostContextWrapper(ctx, functionName) {
+ var f = ctx[functionName];
+ return function() {
+ // Only call the functions if the context is not lost.
+ if (!contextLost_) {
+ if (!checkResources(arguments)) {
+ glErrorShadow_[ctx.INVALID_OPERATION] = true;
+ return;
+ }
+ var result = f.apply(ctx, arguments);
+ return result;
+ }
+ };
+ }
+
+ for (var propertyName in ctx) {
+ if (typeof ctx[propertyName] == 'function') {
+ wrapper_[propertyName] = makeLostContextWrapper(ctx, propertyName);
+ } else {
+ wrapper_[propertyName] = ctx[propertyName];
+ }
+ }
+
+ function makeWebGLContextEvent(statusMessage) {
+ return {statusMessage: statusMessage};
+ }
+
+ function freeResources() {
+ for (var ii = 0; ii < resourceDb_.length; ++ii) {
+ var resource = resourceDb_[ii];
+ if (resource instanceof WebGLBuffer) {
+ ctx.deleteBuffer(resource);
+ } else if (resource instanceof WebctxFramebuffer) {
+ ctx.deleteFramebuffer(resource);
+ } else if (resource instanceof WebctxProgram) {
+ ctx.deleteProgram(resource);
+ } else if (resource instanceof WebctxRenderbuffer) {
+ ctx.deleteRenderbuffer(resource);
+ } else if (resource instanceof WebctxShader) {
+ ctx.deleteShader(resource);
+ } else if (resource instanceof WebctxTexture) {
+ ctx.deleteTexture(resource);
+ }
+ }
+ }
+
+ wrapper_.loseContext = function() {
+ if (!contextLost_) {
+ contextLost_ = true;
+ ++contextId_;
+ while (ctx.getError());
+ clearErrors();
+ glErrorShadow_[ctx.CONTEXT_LOST_WEBGL] = true;
+ setTimeout(function() {
+ if (onLost_) {
+ onLost_(makeWebGLContextEvent("context lost"));
+ }
+ }, 0);
+ }
+ };
+
+ wrapper_.restoreContext = function() {
+ if (contextLost_) {
+ if (onRestored_) {
+ setTimeout(function() {
+ freeResources();
+ resetToInitialState(ctx);
+ contextLost_ = false;
+ if (onRestored_) {
+ var callback = onRestored_;
+ onRestored_ = nextOnRestored_;
+ nextOnRestored_ = undefined;
+ callback(makeWebGLContextEvent("context restored"));
+ }
+ }, 0);
+ } else {
+ throw "You can not restore the context without a listener"
+ }
+ }
+ };
+
+ // Wrap a few functions specially.
+ wrapper_.getError = function() {
+ if (!contextLost_) {
+ var err;
+ while (err = ctx.getError()) {
+ glErrorShadow_[err] = true;
+ }
+ }
+ for (var err in glErrorShadow_) {
+ if (glErrorShadow_[err]) {
+ delete glErrorShadow_[err];
+ return err;
+ }
+ }
+ return ctx.NO_ERROR;
+ };
+
+ var creationFunctions = [
+ "createBuffer",
+ "createFramebuffer",
+ "createProgram",
+ "createRenderbuffer",
+ "createShader",
+ "createTexture"
+ ];
+ for (var ii = 0; ii < creationFunctions.length; ++ii) {
+ var functionName = creationFunctions[ii];
+ wrapper_[functionName] = function(f) {
+ return function() {
+ if (contextLost_) {
+ return null;
+ }
+ var obj = f.apply(ctx, arguments);
+ obj.__webglDebugContextLostId__ = contextId_;
+ resourceDb_.push(obj);
+ return obj;
+ };
+ }(ctx[functionName]);
+ }
+
+ var functionsThatShouldReturnNull = [
+ "getActiveAttrib",
+ "getActiveUniform",
+ "getBufferParameter",
+ "getContextAttributes",
+ "getAttachedShaders",
+ "getFramebufferAttachmentParameter",
+ "getParameter",
+ "getProgramParameter",
+ "getProgramInfoLog",
+ "getRenderbufferParameter",
+ "getShaderParameter",
+ "getShaderInfoLog",
+ "getShaderSource",
+ "getTexParameter",
+ "getUniform",
+ "getUniformLocation",
+ "getVertexAttrib"
+ ];
+ for (var ii = 0; ii < functionsThatShouldReturnNull.length; ++ii) {
+ var functionName = functionsThatShouldReturnNull[ii];
+ wrapper_[functionName] = function(f) {
+ return function() {
+ if (contextLost_) {
+ return null;
+ }
+ return f.apply(ctx, arguments);
+ }
+ }(wrapper_[functionName]);
+ }
+
+ var isFunctions = [
+ "isBuffer",
+ "isEnabled",
+ "isFramebuffer",
+ "isProgram",
+ "isRenderbuffer",
+ "isShader",
+ "isTexture"
+ ];
+ for (var ii = 0; ii < isFunctions.length; ++ii) {
+ var functionName = isFunctions[ii];
+ wrapper_[functionName] = function(f) {
+ return function() {
+ if (contextLost_) {
+ return false;
+ }
+ return f.apply(ctx, arguments);
+ }
+ }(wrapper_[functionName]);
+ }
+
+ wrapper_.checkFramebufferStatus = function(f) {
+ return function() {
+ if (contextLost_) {
+ return ctx.FRAMEBUFFER_UNSUPPORTED;
+ }
+ return f.apply(ctx, arguments);
+ };
+ }(wrapper_.checkFramebufferStatus);
+
+ wrapper_.getAttribLocation = function(f) {
+ return function() {
+ if (contextLost_) {
+ return -1;
+ }
+ return f.apply(ctx, arguments);
+ };
+ }(wrapper_.getAttribLocation);
+
+ wrapper_.getVertexAttribOffset = function(f) {
+ return function() {
+ if (contextLost_) {
+ return 0;
+ }
+ return f.apply(ctx, arguments);
+ };
+ }(wrapper_.getVertexAttribOffset);
+
+ wrapper_.isContextLost = function() {
+ return contextLost_;
+ };
+
+ function wrapEvent(listener) {
+ if (typeof(listener) == "function") {
+ return listener;
+ } else {
+ return function(info) {
+ listener.handleEvent(info);
+ }
+ }
+ }
+
+ wrapper_.registerOnContextLostListener = function(listener) {
+ onLost_ = wrapEvent(listener);
+ };
+
+ wrapper_.registerOnContextRestoredListener = function(listener) {
+ if (contextLost_) {
+ nextOnRestored_ = wrapEvent(listener);
+ } else {
+ onRestored_ = wrapEvent(listener);
+ }
+ }
+
+ return wrapper_;
+}
+
+return {
+ /**
+ * Initializes this module. Safe to call more than once.
+ * @param {!WebGLRenderingContext} ctx A WebGL context. If
+ * you have more than one context it doesn't matter which one
+ * you pass in, it is only used to pull out constants.
+ */
+ 'init': init,
+
+ /**
+ * Returns true or false if value matches any WebGL enum
+ * @param {*} value Value to check if it might be an enum.
+ * @return {boolean} True if value matches one of the WebGL defined enums
+ */
+ 'mightBeEnum': mightBeEnum,
+
+ /**
+ * Gets an string version of an WebGL enum.
+ *
+ * Example:
+ * WebGLDebugUtil.init(ctx);
+ * var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+ *
+ * @param {number} value Value to return an enum for
+ * @return {string} The string version of the enum.
+ */
+ 'glEnumToString': glEnumToString,
+
+ /**
+ * Converts the argument of a WebGL function to a string.
+ * Attempts to convert enum arguments to strings.
+ *
+ * Example:
+ * WebGLDebugUtil.init(ctx);
+ * var str = WebGLDebugUtil.glFunctionArgToString('bindTexture', 0, gl.TEXTURE_2D);
+ *
+ * would return 'TEXTURE_2D'
+ *
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} argumentIndx the index of the argument.
+ * @param {*} value The value of the argument.
+ * @return {string} The value as a string.
+ */
+ 'glFunctionArgToString': glFunctionArgToString,
+
+ /**
+ * Given a WebGL context returns a wrapped context that calls
+ * gl.getError after every command and calls a function if the
+ * result is not NO_ERROR.
+ *
+ * You can supply your own function if you want. For example, if you'd like
+ * an exception thrown on any GL error you could do this
+ *
+ * function throwOnGLError(err, funcName, args) {
+ * throw WebGLDebugUtils.glEnumToString(err) + " was caused by call to" +
+ * funcName;
+ * };
+ *
+ * ctx = WebGLDebugUtils.makeDebugContext(
+ * canvas.getContext("webgl"), throwOnGLError);
+ *
+ * @param {!WebGLRenderingContext} ctx The webgl context to wrap.
+ * @param {!function(err, funcName, args): void} opt_onErrorFunc The function
+ * to call when gl.getError returns an error. If not specified the default
+ * function calls console.log with a message.
+ */
+ 'makeDebugContext': makeDebugContext,
+
+ /**
+ * Given a WebGL context returns a wrapped context that adds 4
+ * functions.
+ *
+ * ctx.loseContext:
+ * simulates a lost context event.
+ *
+ * ctx.restoreContext:
+ * simulates the context being restored.
+ *
+ * ctx.registerOnContextLostListener(listener):
+ * lets you register a listener for context lost. Use instead
+ * of addEventListener('webglcontextlostevent', listener);
+ *
+ * ctx.registerOnContextRestoredListener(listener):
+ * lets you register a listener for context restored. Use
+ * instead of addEventListener('webglcontextrestored',
+ * listener);
+ *
+ * @param {!WebGLRenderingContext} ctx The webgl context to wrap.
+ */
+ 'makeLostContextSimulatingContext': makeLostContextSimulatingContext,
+
+ /**
+ * Resets a context to the initial state.
+ * @param {!WebGLRenderingContext} ctx The webgl context to
+ * reset.
+ */
+ 'resetToInitialState': resetToInitialState
+};
+
+}();
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+if (!self["bigshot"]) {
+ /**
+ * @namespace Bigshot namespace.
+ *
+ * Bigshot is a toolkit for zoomable images and VR panoramas.
+ *
+ * <h3>Zoomable Images</h3>
+ *
+ * <p>The two classes that are needed for zoomable images are:
+ *
+ * <ul>
+ * <li>{@link bigshot.Image}: The main class for making zoomable images. See the class docs
+ * for a tutorial.
+ * <li>{@link bigshot.ImageParameters}: Parameters for zoomable images.
+ * <li>{@link bigshot.SimpleImage}: A class for making simple zoomable images that don't
+ * require the generation of an image pyramid.. See the class docs for a tutorial.
+ * </ul>
+ *
+ * For hotspots, see:
+ *
+ * <ul>
+ * <li>{@link bigshot.HotspotLayer}
+ * <li>{@link bigshot.Hotspot}
+ * <li>{@link bigshot.LabeledHotspot}
+ * <li>{@link bigshot.LinkHotspot}
+ * </ul>
+ *
+ * <h3>VR Panoramas</h3>
+ *
+ * <p>The two classes that are needed for zoomable VR panoramas (requires WebGL) are:
+ *
+ * <ul>
+ * <li>{@link bigshot.VRPanorama}: The main class for making VR panoramas. See the class docs
+ * for a tutorial.
+ * <li>{@link bigshot.VRPanoramaParameters}: Parameters for VR panoramas.
+ * </ul>
+ *
+ * For hotspots, see:
+ *
+ * <ul>
+ * <li>{@link bigshot.VRHotspot}
+ * <li>{@link bigshot.VRRectangleHotspot}
+ * <li>{@link bigshot.VRPointHotspot}
+ * </ul>
+ */
+ bigshot = {};
+
+ /*
+ * This is supposed to be processed using a minimalhttpd.IncludeProcessor
+ * during development. The files must be listed in dependency order.
+ */
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This class has no constructor, it is created as an object literal.
+ * @name bigshot.HomogeneousPoint3D
+ * @class A 3d homogenous point.
+ * @property {number} x the x-coordinate
+ * @property {number} y the y-coordinate
+ * @property {number} z the z-coordinate
+ * @property {number} w the w-coordinate
+ */
+
+/**
+ * This class has no constructor, it is created as an object literal.
+ * @name bigshot.Point3D
+ * @class A 3d point.
+ * @property {number} x the x-coordinate
+ * @property {number} y the y-coordinate
+ * @property {number} z the z-coordinate
+ */
+
+/**
+ * This class has no constructor, it is created as an object literal.
+ * @name bigshot.Point2D
+ * @class A 2d point.
+ * @property {number} x the x-coordinate
+ * @property {number} y the y-coordinate
+ */
+
+/**
+ * This class has no constructor, it is created as an object literal.
+ * @name bigshot.Rotation
+ * @class A rotation specified as a yaw-pitch-roll triplet.
+ * @property {number} y the rotation around the yaw (y) axis
+ * @property {number} p the rotation around the pitch (x) axis
+ * @property {number} r the rotation around the roll (z) axis
+ */
+
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Object-oriented support functions, used to make JavaScript
+ * a bit more palatable to a Java-head.
+ */
+bigshot.Object = {
+ /**
+ * Extends a base class with a derived class.
+ *
+ * @param {Function} derived the derived-class
+ * @param {Function} base the base-class
+ */
+ extend : function (derived, base) {
+ for (var k in base.prototype) {
+ if (derived.prototype[k]) {
+ derived.prototype[k]._super = base.prototype[k];
+ } else {
+ derived.prototype[k] = base.prototype[k];
+ }
+ }
+ },
+
+ /**
+ * Resolves a name relative to <code>self</code>.
+ *
+ * @param {String} name the name to resolve
+ * @type {Object}
+ */
+ resolve : function (name) {
+ var c = name.split (".");
+ var clazz = self;
+ for (var i = 0; i < c.length; ++i) {
+ clazz = clazz[c[i]];
+ }
+ return clazz;
+ },
+
+ validate : function (clazzName, iface) {
+ },
+
+ /**
+ * Utility function to show an object's fields in a message box.
+ *
+ * @param {Object} o the object
+ */
+ alertr : function (o) {
+ var sb = "";
+ for (var k in o) {
+ sb += k + ":" + o[k] + "\n";
+ }
+ alert (sb);
+ },
+
+ /**
+ * Utility function to show an object's fields in the console log.
+ *
+ * @param {Object} o the object
+ */
+ logr : function (o) {
+ var sb = "";
+ for (var k in o) {
+ sb += k + ":" + o[k] + "\n";
+ }
+ if (console) {
+ console.log (sb);
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new browser helper object.
+ *
+ * @class Encapsulates common browser functions for cross-browser portability
+ * and convenience.
+ */
+bigshot.Browser = function () {
+ this.requestAnimationFrameFunction =
+ window.requestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ function (callback, element) { return setTimeout (callback, 0); };
+}
+
+bigshot.Browser.prototype = {
+ /**
+ * Removes all children from an element.
+ *
+ * @public
+ * @param {HTMLElement} element the element whose children are to be removed.
+ */
+ removeAllChildren : function (element) {
+ element.innerHTML = "";
+ /*
+ if (element.children.length > 0) {
+ for (var i = element.children.length - 1; i >= 0; --i) {
+ element.removeChild (element.children[i]);
+ }
+ }
+ */
+ },
+
+ /**
+ * Thunk to implement a faked "mouseenter" event.
+ * @private
+ */
+ mouseEnter : function (_fn) {
+ var isAChildOf = this.isAChildOf;
+ return function(_evt)
+ {
+ var relTarget = _evt.relatedTarget;
+ if (this === relTarget || isAChildOf (this, relTarget))
+ { return; }
+
+ _fn.call (this, _evt);
+ }
+ },
+
+ isAChildOf : function (_parent, _child) {
+ if (_parent === _child) { return false; }
+ while (_child && _child !== _parent)
+ { _child = _child.parentNode; }
+
+ return _child === _parent;
+ },
+
+ /**
+ * Unregisters a listener from an element.
+ *
+ * @param {HTMLElement} elem the element
+ * @param {String} eventName the event name ("click", "mouseover", etc.)
+ * @param {function(e)} fn the callback function to detach
+ * @param {boolean} useCapture specifies if we should unregister a listener from the capture chain.
+ */
+ unregisterListener : function (elem, eventName, fn, useCapture) {
+ if (typeof (elem.removeEventListener) != 'undefined') {
+ elem.removeEventListener (eventName, fn, useCapture);
+ } else if (typeof (elem.detachEvent) != 'undefined') {
+ elem.detachEvent('on' + eventName, fn);
+ }
+ },
+
+ /**
+ * Registers a listener to an element.
+ *
+ * @param {HTMLElement} elem the element
+ * @param {String} eventName the event name ("click", "mouseover", etc.)
+ * @param {function(e)} fn the callback function to attach
+ * @param {boolean} useCapture specifies if we want to initiate capture.
+ * See <a href="https://developer.mozilla.org/en/DOM/element.addEventListener">element.addEventListener</a>
+ * on MDN for an explanation.
+ */
+ registerListener : function (_elem, _evtName, _fn, _useCapture) {
+ if (typeof _elem.addEventListener != 'undefined')
+ {
+ if (_evtName === 'mouseenter')
+ { _elem.addEventListener('mouseover', this.mouseEnter(_fn), _useCapture); }
+ else if (_evtName === 'mouseleave')
+ { _elem.addEventListener('mouseout', this.mouseEnter(_fn), _useCapture); }
+ else
+ { _elem.addEventListener(_evtName, _fn, _useCapture); }
+ }
+ else if (typeof _elem.attachEvent != 'undefined')
+ {
+ _elem.attachEvent('on' + _evtName, _fn);
+ }
+ else
+ {
+ _elem['on' + _evtName] = _fn;
+ }
+ },
+
+ /**
+ * Stops an event from bubbling.
+ *
+ * @param {Event} eventObject the event object
+ */
+ stopEventBubbling : function (eventObject) {
+ if (eventObject) {
+ if (eventObject.stopPropagation) {
+ eventObject.stopPropagation ();
+ } else {
+ eventObject.cancelBubble = true;
+ }
+ }
+ },
+
+ /**
+ * Creates a callback function that simply stops the event from bubbling.
+ *
+ * @example
+ * var browser = new bigshot.Browser ();
+ * browser.registerListener (element,
+ * "mousedown",
+ * browser.stopEventBubblingHandler (),
+ * false);
+ * @type function(event)
+ * @return a new function that can be used to stop an event from bubbling
+ */
+ stopEventBubblingHandler : function () {
+ var that = this;
+ return function (event) {
+ that.stopEventBubbling (event);
+ return false;
+ };
+ },
+
+ /**
+ * Stops bubbling for all mouse events on the element.
+ *
+ * @param {HTMLElement} element the element
+ */
+ stopMouseEventBubbling : function (element) {
+ this.registerListener (element, "mousedown", this.stopEventBubblingHandler (), false);
+ this.registerListener (element, "mouseup", this.stopEventBubblingHandler (), false);
+ this.registerListener (element, "mousemove", this.stopEventBubblingHandler (), false);
+ },
+
+ /**
+ * Returns the size in pixels of the element
+ *
+ * @param {HTMLElement} obj the element
+ * @return a size object with two integer members, w and h, for width and height respectively.
+ */
+ getElementSize : function (obj) {
+ var size = {};
+ if (obj.clientWidth) {
+ size.w = obj.clientWidth;
+ }
+ if (obj.clientHeight) {
+ size.h = obj.clientHeight;
+ }
+ return size;
+ },
+
+ /**
+ * Returns true if the browser is scaling the window, such as on Mobile Safari.
+ * The method used here is far from perfect, but it catches the most important use case:
+ * If we are running on an iDevice and the page is zoomed out.
+ */
+ browserIsViewporting : function () {
+ if (window.innerWidth <= screen.width) {
+ return false;
+ } else {
+ return true;
+ }
+ },
+
+ /**
+ * Returns the device pixel scale, which is equal to the number of device
+ * pixels each css pixel corresponds to. Used to render the proper level of detail
+ * on mobile devices, especially when zoomed out and more detailed textures are
+ * simply wasted.
+ *
+ * @returns The number of device pixels each css pixel corresponds to.
+ * For example, if the browser is zoomed out to 50% and a div with <code>width</code>
+ * set to <code>100px</code> occupies 50 physical pixels, the function will return
+ * <code>0.5</code>.
+ * @type number
+ */
+ getDevicePixelScale : function () {
+ if (this.browserIsViewporting ()) {
+ return screen.width / window.innerWidth;
+ } else {
+ return 1.0;
+ }
+ },
+
+ /**
+ * Requests an animation frame, if the API is supported
+ * on the browser. If not, a <code>setTimeout</code> with
+ * a timeout of zero is used.
+ *
+ * @param {function()} callback the animation frame render function
+ * @param {HTMLElement} element the element to use when requesting an
+ * animation frame
+ */
+ requestAnimationFrame : function (callback, element) {
+ var raff = this.requestAnimationFrameFunction;
+ raff (callback, element);
+ },
+
+ /**
+ * Returns the position in pixels of the element relative
+ * to the top left corner of the document.
+ *
+ * @param {HTMLElement} obj the element
+ * @return a position object with two integer members, x and y.
+ */
+ getElementPosition : function (obj) {
+ var position = new Object();
+ position.x = 0;
+ position.y = 0;
+
+ var o = obj;
+ while (o) {
+ position.x += o.offsetLeft;
+ position.y += o.offsetTop;
+ if (o.clientLeft) {
+ position.x += o.clientLeft;
+ }
+ if (o.clientTop) {
+ position.y += o.clientTop;
+ }
+
+ if (o.x) {
+ position.x += o.x;
+ }
+ if (o.y) {
+ position.y += o.y;
+ }
+ o = o.offsetParent;
+ }
+ return position;
+ },
+
+ /**
+ * Creates an XMLHttpRequest object.
+ *
+ * @type XMLHttpRequest
+ * @returns a XMLHttpRequest object.
+ */
+ createXMLHttpRequest : function () {
+ try {
+ return new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ }
+
+ try {
+ return new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (e) {
+ }
+
+ try {
+ return new XMLHttpRequest();
+ } catch(e) {
+ }
+
+ alert("XMLHttpRequest not supported");
+
+ return null;
+ },
+
+ /**
+ * Creates an opacity transition from opaque to transparent.
+ * If CSS transitions aren't supported, the element is
+ * immediately made transparent without a transition.
+ *
+ * @param {HTMLElement} element the element to fade out
+ * @param {function()} onComplete function to call when
+ * the transition is complete.
+ */
+ makeOpacityTransition : function (element, onComplete) {
+ if (element.style.WebkitTransitionProperty != undefined) {
+ element.style.opacity = 1.0;
+ element.style.WebkitTransitionProperty = "opacity";
+ element.style.WebkitTransitionTimingFunction = "linear";
+ element.style.WebkitTransitionDuration = "1s";
+ setTimeout (function () {
+ element.addEventListener ("webkitTransitionEnd", function () {
+ onComplete ();
+ });
+ element.style.opacity = 0.0;
+ }, 0);
+ } else {
+ element.style.opacity = 0.0;
+ onComplete ();
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates an event dispatcher.
+ *
+ * @class Base class for objects that dispatch events.
+ */
+bigshot.EventDispatcher = function () {
+ /**
+ * The event listeners. Each key-value pair in the map is
+ * an event name and an <code>Array</code> of listeners.
+ *
+ * @type Object
+ */
+ this.eventListeners = {};
+}
+
+bigshot.EventDispatcher.prototype = {
+ /**
+ * Adds an event listener to the specified event.
+ *
+ * @example
+ * image.addEventListener ("click", function (event) { ... });
+ *
+ * @param {String} eventName the name of the event to add a listener for
+ * @param {Function} handler function that is invoked with an event object
+ * when the event is fired
+ */
+ addEventListener : function (eventName, handler) {
+ if (this.eventListeners[eventName] == undefined) {
+ this.eventListeners[eventName] = new Array ();
+ }
+ this.eventListeners[eventName].push (handler);
+ },
+
+ /**
+ * Removes an event listener.
+ * @param {String} eventName the name of the event to remove a listener for
+ * @param {Function} handler the handler to remove
+ */
+ removeEventListener : function (eventName, handler) {
+ if (this.eventListeners[eventName] != undefined) {
+ var el = this.eventListeners[eventName];
+ for (var i = 0; i < el.length; ++i) {
+ if (el[i] === listener) {
+ el.splice (i, 1);
+ if (el.length == 0) {
+ delete this.eventListeners[eventName];
+ }
+ break;
+ }
+ }
+ }
+ },
+
+ /**
+ * Fires an event.
+ *
+ * @param {String} eventName the name of the event to fire
+ * @param {bigshot.Event} eventObject the event object to pass to the handlers
+ */
+ fireEvent : function (eventName, eventObject) {
+ if (this.eventListeners[eventName] != undefined) {
+ var el = this.eventListeners[eventName];
+ for (var i = 0; i < el.length; ++i) {
+ el[i](eventObject);
+ }
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates an event.
+ *
+ * @class Base class for events. The interface is supposed to be as similar to
+ * standard DOM events as possible.
+ * @param {Object} data a data object whose fields will be used to set the
+ * corresponding fields of the event object.
+ */
+bigshot.Event = function (data) {
+
+ /**
+ * Indicates whether the event bubbles.
+ * @default false
+ * @type boolean
+ */
+ this.bubbles = false;
+
+ /**
+ * Indicates whether the event is cancelable.
+ * @default false
+ * @type boolean
+ */
+ this.cancelable = false;
+
+ /**
+ * The current target of the event
+ * @default null
+ */
+ this.currentTarget = null;
+
+ /**
+ * Set if the preventDefault method has been called.
+ * @default false
+ * @type boolean
+ */
+ this.defaultPrevented = false;
+
+ /**
+ * The target to which the event is dispatched.
+ * @default null
+ */
+ this.target = null;
+
+ /**
+ * The time the event was created, in milliseconds since the epoch.
+ * @default the current time, as given by <code>new Date ().getTime ()</code>
+ * @type number
+ */
+ this.timeStamp = new Date ().getTime ();
+
+ /**
+ * The event type.
+ * @default null
+ * @type String
+ */
+ this.type = null;
+
+ /**
+ * Flag indicating origin of event.
+ * @default false
+ * @type boolean
+ */
+ this.isTrusted = false;
+
+ for (var k in data) {
+ this[k] = data[k];
+ }
+}
+
+bigshot.Event.prototype = {
+ /**
+ * Prevents default handling of the event.
+ */
+ preventDefault : function () {
+ this.defaultPrevented = true;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Creates a new instance of the cached resource. May return
+ * null, in which case that value is cached. The function
+ * may be called multiple times, but a corresponding call to
+ * the dispose function will always occur inbetween.
+ * @name bigshot.TimedWeakReference.Create
+ * @function
+ */
+
+/**
+ * Disposes a of the cached resource.
+ * @name bigshot.TimedWeakReference.Dispose
+ * @function
+ * @param {Object} resource the resource that was created
+ * by the create function
+ */
+
+/**
+ * Creates a new instance.
+ *
+ * @class Caches a lazy-created resource for a given time before
+ * disposing it.
+ *
+ * @param {bigshot.TimedWeakReference.Create} create a function that creates the
+ * held resource. May be called multiple times, but not without a call to
+ * dispose inbetween.
+ * @param {bigshot.TimedWeakReference.Dispose} dispose a function that disposes the
+ * resource created by create.
+ * @param {int} interval the polling interval in milliseconds. If the last
+ * access time is further back than one interval, the held resource is
+ * disposed (and will be re-created
+ * on the next call to get).
+ */
+bigshot.TimedWeakReference = function (create, dispose, interval) {
+ this.object = null;
+ this.hasObject = false;
+ this.fnCreate = create;
+ this.fnDispose = dispose;
+ this.lastAccess = new Date ().getTime ();
+ this.hasTimer = false;
+ this.interval = interval;
+};
+
+bigshot.TimedWeakReference.prototype = {
+ /**
+ * Disposes of this instance. The resource is disposed.
+ */
+ dispose : function () {
+ this.clear ();
+ },
+
+ /**
+ * Gets the resource. The resource is created if needed.
+ * The last access time is updated.
+ */
+ get : function () {
+ if (!this.hasObject) {
+ this.hasObject = true;
+ this.object = this.fnCreate ();
+ this.startTimer ();
+ }
+ this.lastAccess = new Date ().getTime ();
+ return this.object;
+ },
+
+ /**
+ * Forcibly disposes the held resource, if any.
+ */
+ clear : function () {
+ if (this.hasObject) {
+ this.hasObject = false;
+ this.fnDispose (this.object);
+ this.object = null;
+ this.stopTimer ();
+ }
+ },
+
+ /**
+ * Stops the polling timer if it is running.
+ * @private
+ */
+ stopTimer : function () {
+ if (this.hasTimer) {
+ clearTimeout (this.timerId);
+ this.hasTimer = false;
+ }
+ },
+
+ /**
+ * Starts the polling timer if it isn't already running.
+ * @private
+ */
+ startTimer : function () {
+ if (!this.hasTimer) {
+ var that = this;
+ this.hasTimer = true;
+ this.timerId = setTimeout (function () {
+ that.hasTimer = false;
+ that.update ();
+ }, this.interval);
+ }
+ },
+
+ /**
+ * Disposes of the held resource if it hasn't been
+ * accessed in {@link #interval} milliseconds.
+ * @private
+ */
+ update : function () {
+ if (this.hasObject) {
+ var now = new Date ().getTime ();
+ if (now - this.lastAccess > this.interval) {
+ this.clear ();
+ } else {
+ this.startTimer ();
+ }
+ }
+ }
+}
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates an image event.
+ *
+ * @class Base class for events dispatched by bigshot.ImageBase.
+ * @param {Object} data a data object whose fields will be used to set the
+ * corresponding fields of the event object.
+ * @extends bigshot.Event
+ * @see bigshot.ImageBase
+ */
+bigshot.ImageEvent = function (data) {
+ bigshot.Event.call (this, data);
+}
+
+/**
+ * The image X coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#imageX
+ * @field
+ * @type number
+ */
+
+/**
+ * The image Y coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#imageY
+ * @field
+ * @type number
+ */
+
+/**
+ * The client X coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#clientX
+ * @field
+ * @type number
+ */
+
+/**
+ * The client Y coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#clientY
+ * @field
+ * @type number
+ */
+
+/**
+ * The local X coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#localX
+ * @field
+ * @type number
+ */
+
+/**
+ * The local Y coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#localY
+ * @field
+ * @type number
+ */
+
+
+bigshot.ImageEvent.prototype = {
+};
+
+bigshot.Object.extend (bigshot.ImageEvent, bigshot.Event);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates an image event.
+ *
+ * @class Base class for events dispatched by bigshot.VRPanorama.
+ * @param {Object} data a data object whose fields will be used to set the
+ * corresponding fields of the event object.
+ * @extends bigshot.Event
+ * @see bigshot.VRPanorama
+ */
+bigshot.VREvent = function (data) {
+ bigshot.Event.call (this, data);
+}
+
+/**
+ * The yaw coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#yaw
+ * @field
+ * @type number
+ */
+
+/**
+ * The pitch coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#pitch
+ * @field
+ * @type number
+ */
+
+/**
+ * The client X coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#clientX
+ * @field
+ * @type number
+ */
+
+/**
+ * The client Y coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#clientY
+ * @field
+ * @type number
+ */
+
+/**
+ * The local X coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#localX
+ * @field
+ * @type number
+ */
+
+/**
+ * The local Y coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#localY
+ * @field
+ * @type number
+ */
+
+/**
+ * A x,y,z triplet specifying a 3D ray from the viewer in the direction the
+ * event took place. The same as the yaw and pitch fields, but in Cartesian
+ * coordinates.
+ *
+ * @name bigshot.VREvent#ray
+ * @field
+ * @type xyz-triplet
+ */
+
+
+bigshot.VREvent.prototype = {
+};
+
+bigshot.Object.extend (bigshot.VREvent, bigshot.Event);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new full-screen handler for an element.
+ *
+ * @class A utility class for making an element "full screen", or as close to that
+ * as browser security allows. If the browser supports the <code>requestFullScreen</code>
+ * API - as standard or as <code>moz</code>- or <code>webkit</code>- extensions,
+ * this will be used.
+ *
+ * @param {HTMLElement} container the element that is to be made full screen
+ */
+bigshot.FullScreen = function (container) {
+ this.container = container;
+
+ this.isFullScreen = false;
+ this.savedBodyStyle = null;
+ this.savedParent = null;
+ this.savedSize = null;
+ this.expanderDiv = null;
+ this.restoreSize = false;
+
+ this.onCloseHandlers = new Array ();
+ this.onResizeHandlers = new Array ();
+
+ var findFunc = function (el, list) {
+ for (var i = 0; i < list.length; ++i) {
+ if (el[list[i]]) {
+ return list[i];
+ }
+ }
+ return null;
+ };
+
+ this.requestFullScreen = findFunc (container, ["requestFullScreen", "mozRequestFullScreen", "webkitRequestFullScreen"]);
+ this.cancelFullScreen = findFunc (document, ["cancelFullScreen", "mozCancelFullScreen", "webkitCancelFullScreen"]);
+
+ this.restoreSize = this.requestFullScreen != null;
+}
+
+bigshot.FullScreen.prototype = {
+ browser : new bigshot.Browser (),
+
+ getRootElement : function () {
+ return this.div;
+ },
+
+ /**
+ * Adds a function that will run when exiting full screen mode.
+ *
+ * @param {function()} onClose the function to call
+ */
+ addOnClose : function (onClose) {
+ this.onCloseHandlers.push (onClose);
+ },
+
+ /**
+ * Notifies all <code>onClose</code> handlers.
+ *
+ * @private
+ */
+ onClose : function () {
+ for (var i = 0; i < this.onCloseHandlers.length; ++i) {
+ this.onCloseHandlers[i] ();
+ }
+ },
+
+ /**
+ * Adds a function that will run when the element is resized.
+ *
+ * @param {function()} onResize the function to call
+ */
+ addOnResize : function (onResize) {
+ this.onResizeHandlers.push (onResize);
+ },
+
+ /**
+ * Notifies all resize handlers.
+ *
+ * @private
+ */
+ onResize : function () {
+ for (var i = 0; i < this.onResizeHandlers.length; ++i) {
+ this.onResizeHandlers[i] ();
+ }
+ },
+
+ /**
+ * Begins full screen mode.
+ */
+ open : function () {
+ this.isFullScreen = true;
+
+ if (this.requestFullScreen) {
+ return this.openRequestFullScreen ();
+ } else {
+ return this.openCompat ();
+ }
+ },
+
+ /**
+ * Makes the element really full screen using the <code>requestFullScreen</code>
+ * API.
+ *
+ * @private
+ */
+ openRequestFullScreen : function () {
+ this.savedSize = {
+ width : this.container.style.width,
+ height : this.container.style.height
+ };
+
+ this.container.style.width = "100%";
+ this.container.style.height = "100%";
+
+ var that = this;
+
+ if (this.requestFullScreen == "mozRequestFullScreen") {
+ /**
+ * @private
+ */
+ var errFun = function () {
+ that.container.removeEventListener ("mozfullscreenerror", errFun);
+ that.isFullScreen = false;
+ that.exitFullScreenHandler ();
+ that.onClose ();
+ };
+ this.container.addEventListener ("mozfullscreenerror", errFun);
+
+ /**
+ * @private
+ */
+ var changeFun = function () {
+ if (document.mozFullScreenElement !== that.container) {
+ document.removeEventListener ("mozfullscreenchange", changeFun);
+ that.exitFullScreenHandler ();
+ } else {
+ that.onResize ();
+ }
+ };
+ document.addEventListener ("mozfullscreenchange", changeFun);
+ } else {
+ /**
+ * @private
+ */
+ var changeFun = function () {
+ if (document.webkitCurrentFullScreenElement !== that.container) {
+ that.container.removeEventListener ("webkitfullscreenchange", changeFun);
+ that.exitFullScreenHandler ();
+ } else {
+ that.onResize ();
+ }
+ };
+ this.container.addEventListener ("webkitfullscreenchange", changeFun);
+ }
+
+ this.exitFullScreenHandler = function () {
+ if (that.isFullScreen) {
+ that.isFullScreen = false;
+ document[that.cancelFullScreen]();
+ if (that.restoreSize) {
+ that.container.style.width = that.savedSize.width;
+ that.container.style.height = that.savedSize.height;
+ }
+ that.onResize ();
+ that.onClose ();
+ }
+ };
+ this.container[this.requestFullScreen]();
+ },
+
+ /**
+ * Makes the element "full screen" in older browsers by covering the browser's client area.
+ *
+ * @private
+ */
+ openCompat : function () {
+ this.savedParent = this.container.parentNode;
+
+ this.savedSize = {
+ width : this.container.style.width,
+ height : this.container.style.height
+ };
+ this.savedBodyStyle = document.body.style.cssText;
+
+ document.body.style.overflow = "hidden";
+
+ this.expanderDiv = document.createElement ("div");
+ this.expanderDiv.style.position = "absolute";
+ this.expanderDiv.style.top = "0px";
+ this.expanderDiv.style.left = "0px";
+ this.expanderDiv.style.width = Math.max (window.innerWidth, document.documentElement.clientWidth) + "px";
+ this.expanderDiv.style.height = Math.max (window.innerHeight, document.documentElement.clientHeight) + "px";
+
+ document.body.appendChild (this.expanderDiv);
+
+ this.div = document.createElement ("div");
+ this.div.style.position = "fixed";
+ this.div.style.top = window.pageYOffset + "px";
+ this.div.style.left = window.pageXOffset + "px";
+
+ this.div.style.width = window.innerWidth + "px";
+ this.div.style.height = window.innerHeight + "px";
+ this.div.style.zIndex = 9998;
+
+ this.div.appendChild (this.container);
+
+ //this.container.style.width = window.innerWidth + "px";
+ //this.container.style.height = window.innerHeight + "px";
+
+ document.body.appendChild (this.div);
+
+ var that = this;
+ var resizeHandler = function (e) {
+ setTimeout (function () {
+ that.div.style.width = window.innerWidth + "px";
+ that.div.style.height = window.innerHeight + "px";
+ setTimeout (function () {
+ that.onResize ();
+ }, 1);
+ }, 1);
+ };
+
+
+ var rotationHandler = function (e) {
+ that.expanderDiv.style.width = Math.max (window.innerWidth, document.documentElement.clientWidth) + "px";
+ that.expanderDiv.style.height = Math.max (window.innerHeight, document.documentElement.clientHeight) + "px";
+ setTimeout (function () {
+ that.div.style.top = window.pageYOffset + "px";
+ that.div.style.left = window.pageXOffset + "px";
+ that.div.style.width = window.innerWidth + "px";
+ that.div.style.height = window.innerHeight + "px";
+ setTimeout (function () {
+ that.onResize ();
+ }, 1);
+ }, 1);
+ };
+
+ var escHandler = function (e) {
+ if (e.keyCode == 27) {
+ that.exitFullScreenHandler ();
+ }
+ };
+
+ this.exitFullScreenHandler = function () {
+ that.isFullScreen = false;
+ that.browser.unregisterListener (document, "keydown", escHandler);
+ that.browser.unregisterListener (window, "resize", resizeHandler);
+ that.browser.unregisterListener (document.body, "orientationchange", rotationHandler);
+ if (that.restoreSize) {
+ that.container.style.width = that.savedSize.width;
+ that.container.style.height = that.savedSize.height;
+ }
+
+ document.body.style.cssText = that.savedBodyStyle;
+
+ that.savedParent.appendChild (that.container);
+ document.body.removeChild (that.div);
+ document.body.removeChild (that.expanderDiv);
+
+ that.onResize ();
+ that.onClose ();
+ setTimeout (function () {
+ that.onResize ();
+ }, 1);
+ };
+
+ this.browser.registerListener (document, "keydown", escHandler, false);
+ this.browser.registerListener (window, "resize", resizeHandler, false);
+ this.browser.registerListener (document.body, "orientationchange", rotationHandler, false);
+
+ this.onResize ();
+
+ return this.exitFullScreenHandler;
+ },
+
+ /**
+ * Ends full screen mode.
+ */
+ close : function () {
+ this.exitFullScreenHandler ();
+ }
+};
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Loads image and XML data.
+ */
+bigshot.DataLoader = function () {
+}
+
+bigshot.DataLoader.prototype = {
+ /**
+ * Loads an image.
+ *
+ * @param {String} url the url to load
+ * @param {function(success,img)} onloaded called on complete
+ */
+ loadImage : function (url, onloaded) {},
+
+ /**
+ * Loads XML data.
+ *
+ * @param {String} url the url to load
+ * @param {boolean} async use async request
+ * @param {function(success,xml)} [onloaded] called on complete for async requests
+ * @return the xml for synchronous calls
+ */
+ loadXml : function (url, async, onloaded) {}
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new data loader.
+ *
+ * @param {int} [maxRetries=0] the maximum number of times to retry requests
+ * @param {String} [crossOrigin] the CORS crossOrigin parameter to use when loading images
+ * @class Data loader using standard browser functions.
+ * @augments bigshot.DataLoader
+ */
+bigshot.DefaultDataLoader = function (maxRetries, crossOrigin) {
+ this.maxRetries = maxRetries;
+ this.crossOrigin = crossOrigin;
+
+ if (!this.maxRetries) {
+ this.maxRetries = 0;
+ }
+}
+
+bigshot.DefaultDataLoader.prototype = {
+ browser : new bigshot.Browser (),
+
+ loadImage : function (url, onloaded) {
+ var tile = document.createElement ("img");
+ tile.retries = 0;
+ if (this.crossOrigin != null) {
+ tile.crossOrigin = this.crossOrigin;
+ }
+ var that = this;
+ this.browser.registerListener (tile, "load", function () {
+ if (onloaded) {
+ onloaded (tile);
+ }
+ }, false);
+ this.browser.registerListener (tile, "error", function () {
+ tile.retries++;
+ if (tile.retries <= that.maxRetries) {
+ setTimeout (function () {
+ tile.src = url;
+ }, tile.retries * 1000);
+ } else {
+ if (onloaded) {
+ onloaded (null);
+ }
+ }
+ }, false);
+ tile.src = url;
+ return tile;
+ },
+
+ loadXml : function (url, synchronous, onloaded) {
+ for (var tries = 0; tries <= this.maxRetries; ++tries) {
+ var req = this.browser.createXMLHttpRequest ();
+
+ req.open("GET", url, false);
+ req.send(null);
+ if(req.status == 200) {
+ var xml = req.responseXML;
+ if (xml != null) {
+ if (onloaded) {
+ onloaded (xml);
+ }
+ return xml;
+ }
+ }
+
+ if (tries == that.maxRetries) {
+ if (onloaded) {
+ onloaded (null);
+ }
+ return null;
+ }
+ }
+ }
+}
+
+bigshot.Object.validate ("bigshot.DefaultDataLoader", bigshot.DataLoader);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Data loader using standard browser functions that maintains
+ * an in-memory cache of everything loaded.
+ * @augments bigshot.DataLoader
+ */
+bigshot.CachingDataLoader = function () {
+ this.cache = {};
+ this.requested = {};
+ this.requestedTiles = {};
+}
+
+bigshot.CachingDataLoader.prototype = {
+
+ browser : new bigshot.Browser (),
+
+ loadImage : function (url, onloaded) {
+ if (this.cache[url]) {
+ if (onloaded) {
+ onloaded (this.cache[url]);
+ }
+ return this.cache[url];
+ } else if (this.requested[url]) {
+ if (onloaded) {
+ this.requested[url].push (onloaded);
+ }
+ return this.requestedTiles[url];
+ } else {
+ var that = this;
+ this.requested[url] = new Array ();
+ if (onloaded) {
+ this.requested[url].push (onloaded);
+ }
+
+ var tile = document.createElement ("img");
+ this.requestedTiles[url] = tile;
+ this.browser.registerListener (tile, "load", function () {
+ var listeners = that.requested[url];
+ delete that.requested[url];
+ delete that.requestedTiles[url];
+ that.cache[url] = tile;
+
+ for (var i = 0; i < listeners.length; ++i) {
+ listeners[i] (tile);
+ }
+ }, false);
+ tile.src = url;
+ return tile;
+ }
+ },
+
+ loadXml : function (url, async, onloaded) {
+ if (this.cache[url]) {
+ if (onloaded) {
+ onloaded (this.cache[url]);
+ }
+ return this.cache[url];
+ } else if (this.requested[url] && async) {
+ if (onloaded) {
+ this.requested[url].push (onloaded);
+ }
+ } else {
+ var req = this.browser.createXMLHttpRequest ();
+
+ if (!this.requested[url]) {
+ this.requested[url] = new Array ();
+ }
+
+ if (async) {
+ if (onloaded) {
+ this.requested[url].push (onloaded);
+ }
+ }
+
+ var that = this;
+ var finishRequest = function () {
+ if (that.requested[url]) {
+ var xml = null;
+ if(req.status == 200) {
+ xml = req.responseXML;
+ }
+ var listeners = that.requested[url];
+ delete that.requested[url];
+ that.cache[url] = xml
+
+ for (var i = 0; i < listeners.length; ++i) {
+ listeners[i](xml);
+ }
+ }
+ return xml;
+ };
+
+ if (async) {
+ req.onreadystatechange = function () {
+ if (req.readyState == 4) {
+ finishRequest ();
+ }
+ };
+ req.open("GET", url, true);
+ req.send ();
+ } else {
+ req.open("GET", url, false);
+ req.send ();
+ return finishRequest ();
+ }
+ }
+ }
+}
+
+bigshot.Object.validate ("bigshot.CachingDataLoader", bigshot.DataLoader);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new hotspot instance.
+ *
+ * @class Base class for hotspots in a {@link bigshot.HotspotLayer}. See {@link bigshot.HotspotLayer} for
+ * examples.
+ *
+ * @param {number} x x-coordinate of the top-left corner, given in full image pixels
+ * @param {number} y y-coordinate of the top-left corner, given in full image pixels
+ * @param {number} w width of the hotspot, given in full image pixels
+ * @param {number} h height of the hotspot, given in full image pixels
+ * @see bigshot.HotspotLayer
+ * @see bigshot.LabeledHotspot
+ * @see bigshot.LinkHotspot
+ * @constructor
+ */
+bigshot.Hotspot = function (x, y, w, h) {
+ var element = document.createElement ("div");
+ element.style.position = "absolute";
+ element.style.overflow = "visible";
+
+ this.element = element;
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+}
+
+bigshot.Hotspot.prototype = {
+
+ browser : new bigshot.Browser (),
+
+ /**
+ * Lays out the hotspot in the viewport.
+ *
+ * @name bigshot.Hotspot#layout
+ * @param x0 x-coordinate of top-left corner of the full image in css pixels
+ * @param y0 y-coordinate of top-left corner of the full image in css pixels
+ * @param zoomFactor the zoom factor.
+ * @function
+ */
+ layout : function (x0, y0, zoomFactor) {
+ var sx = this.x * zoomFactor + x0;
+ var sy = this.y * zoomFactor + y0;
+ var sw = this.w * zoomFactor;
+ var sh = this.h * zoomFactor;
+ this.element.style.top = sy + "px";
+ this.element.style.left = sx + "px";
+ this.element.style.width = sw + "px";
+ this.element.style.height = sh + "px";
+ },
+
+ /**
+ * Returns the HTMLDivElement used to show the hotspot.
+ * Clients can access this element in order to style it.
+ *
+ * @type HTMLDivElement
+ */
+ getElement : function () {
+ return this.element;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new labeled hotspot instance.
+ *
+ * @class A point hotspot consisting of an image.
+ *
+ * @see bigshot.HotspotLayer
+ * @param {number} x x-coordinate of the center corner, given in full image pixels
+ * @param {number} y y-coordinate of the center corner, given in full image pixels
+ * @param {number} w width of the hotspot, given in screen pixels
+ * @param {number} h height of the hotspot, given in screen pixels
+ * @param {number} xo x-offset, given in screen pixels
+ * @param {number} yo y-offset, given in screen pixels
+ * @param {HTMLElement} element the HTML element to position
+ * @param {String} [imageUrl] the image to use as hotspot sprite
+ * @augments bigshot.Hotspot
+ */
+bigshot.PointHotspot = function (x, y, w, h, xo, yo, imageUrl) {
+ bigshot.Hotspot.call (this, x, y, w, h);
+ this.xo = xo;
+ this.yo = yo;
+
+ if (imageUrl) {
+ var el = this.getElement ();
+ el.style.backgroundImage = "url('" + imageUrl + "')";
+ el.style.backgroundRepeat = "no-repeat";
+ }
+}
+
+bigshot.PointHotspot.prototype = {
+ /**
+ * Returns the label element.
+ *
+ * @type HTMLDivElement
+ */
+ getLabel : function () {
+ return this.label;
+ },
+
+ layout : function (x0, y0, zoomFactor) {
+ var sx = this.x * zoomFactor + x0 + this.xo;
+ var sy = this.y * zoomFactor + y0 + this.yo;
+ this.element.style.top = sy + "px";
+ this.element.style.left = sx + "px";
+ this.element.style.width = this.w + "px";
+ this.element.style.height = this.h + "px";
+ }
+};
+
+bigshot.Object.extend (bigshot.PointHotspot, bigshot.Hotspot);
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Abstract interface description for a Layer.
+ *
+ * @class Abstract interface description for a layer.
+ */
+bigshot.Layer = function () {
+}
+
+bigshot.Layer.prototype = {
+ /**
+ * Returns the layer container.
+ *
+ * @type HTMLDivElement
+ */
+ getContainer : function () {},
+
+ /**
+ * Sets the maximum number of image tiles that will be visible in the image.
+ *
+ * @param {int} x the number of tiles horizontally
+ * @param {int} y the number of tiles vertically
+ */
+ setMaxTiles : function (x, y) {},
+
+ /**
+ * Called when the image's viewport is resized.
+ *
+ * @param {int} w the new width of the viewport, in css pixels
+ * @param {int} h the new height of the viewport, in css pixels
+ */
+ resize : function (w, h) {},
+
+ /**
+ * Lays out the layer.
+ *
+ * @param {number} zoom the zoom level, adjusted for texture stretching
+ * @param {number} x0 the x-coordinate of the top-left corner of the top-left tile in css pixels
+ * @param {number} y0 the y-coordinate of the top-left corner of the top-left tile in css pixels
+ * @param {number} tx0 column number (starting at zero) of the top-left tile
+ * @param {number} ty0 row number (starting at zero) of the top-left tile
+ * @param {number} size the {@link bigshot.ImageParameters#tileSize} - width of each
+ * image tile in pixels - of the image
+ * @param {number} stride offset (vertical and horizontal) from the top-left corner
+ * of a tile to the next tile's top-left corner.
+ * @param {number} opacity the opacity of the layer as a CSS opacity value.
+ */
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {}
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new labeled hotspot instance.
+ *
+ * @class A hotspot with a label under it. The label element can be accessed using
+ * the getLabel method and styled as any HTMLElement. See {@link bigshot.HotspotLayer} for
+ * examples.
+ *
+ * @see bigshot.HotspotLayer
+ * @param {number} x x-coordinate of the top-left corner, given in full image pixels
+ * @param {number} y y-coordinate of the top-left corner, given in full image pixels
+ * @param {number} w width of the hotspot, given in full image pixels
+ * @param {number} h height of the hotspot, given in full image pixels
+ * @param {String} labelText text of the label
+ * @augments bigshot.Hotspot
+ */
+bigshot.LabeledHotspot = function (x, y, w, h, labelText) {
+ bigshot.Hotspot.call (this, x, y, w, h);
+
+ this.label = document.createElement ("div");
+ this.label.style.position = "relative";
+ this.label.style.display = "inline-block";
+
+ this.getElement ().appendChild (this.label);
+ this.label.innerHTML = labelText;
+ this.labelSize = this.browser.getElementSize (this.label);
+}
+
+bigshot.LabeledHotspot.prototype = {
+ /**
+ * Returns the label element.
+ *
+ * @type HTMLDivElement
+ */
+ getLabel : function () {
+ return this.label;
+ },
+
+ layout : function (x0, y0, zoomFactor) {
+ this.layout._super.call (this, x0, y0, zoomFactor);
+ var sw = this.w * zoomFactor;
+ var sh = this.h * zoomFactor;
+ this.label.style.top = (sh + 4) + "px";
+ this.label.style.left = ((sw - this.labelSize.w) / 2) + "px";
+ }
+};
+
+bigshot.Object.extend (bigshot.LabeledHotspot, bigshot.Hotspot);
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new link-hotspot instance.
+ *
+ * @class A labeled hotspot that takes the user to another
+ * location when it is clicked on. See {@link bigshot.HotspotLayer} for
+ * examples.
+ *
+ * @see bigshot.HotspotLayer
+ * @param {number} x x-coordinate of the top-left corner, given in full image pixels
+ * @param {number} y y-coordinate of the top-left corner, given in full image pixels
+ * @param {number} w width of the hotspot, given in full image pixels
+ * @param {number} h height of the hotspot, given in full image pixels
+ * @param {String} labelText text of the label
+ * @param {String} url url to go to on click
+ * @augments bigshot.LabeledHotspot
+ * @constructor
+ */
+bigshot.LinkHotspot = function (x, y, w, h, labelText, url) {
+ bigshot.LabeledHotspot.call (this, x, y, w, h, labelText);
+ this.browser.registerListener (this.getElement (), "click", function () {
+ document.location.href = url;
+ });
+};
+
+bigshot.Object.extend (bigshot.LinkHotspot, bigshot.LabeledHotspot);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new hotspot layer. The layer must be added to the image using
+ * {@link bigshot.ImageBase#addLayer}.
+ *
+ * @class A hotspot layer.
+ * @example
+ * var image = new bigshot.Image (...);
+ * var hotspotLayer = new bigshot.HotspotLayer (image);
+ * var hotspot = new bigshot.LinkHotspot (100, 100, 200, 100,
+ * "Bigshot on Google Code",
+ * "http://code.google.com/p/bigshot/");
+ *
+ * // Style the hotspot a bit
+ * hotspot.getElement ().className = "hotspot";
+ * hotspot.getLabel ().className = "label";
+ *
+ * hotspotLayer.addHotspot (hotspot);
+ *
+ * image.addLayer (hotspotLayer);
+ *
+ * @param {bigshot.ImageBase} image the image this hotspot layer will be part of
+ * @augments bigshot.Layer
+ * @constructor
+ */
+bigshot.HotspotLayer = function (image) {
+ this.image = image;
+ this.hotspots = new Array ();
+ this.browser = new bigshot.Browser ();
+ this.container = image.createLayerContainer ();
+ this.parentContainer = image.getContainer ();
+ this.resize (0, 0);
+}
+
+bigshot.HotspotLayer.prototype = {
+
+ getContainer : function () {
+ return this.container;
+ },
+
+ resize : function (w, h) {
+ this.container.style.width = this.parentContainer.clientWidth + "px";
+ this.container.style.height = this.parentContainer.clientHeight + "px";
+ },
+
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {
+ var zoomFactor = Math.pow (2, this.image.getZoom ());
+ x0 -= stride * tx0;
+ y0 -= stride * ty0;
+ for (var i = 0; i < this.hotspots.length; ++i) {
+ this.hotspots[i].layout (x0, y0, zoomFactor);
+ }
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ },
+
+ /**
+ * Adds a hotspot to the layer.
+ *
+ * @param {bigshot.Hotspot} hotspot the hotspot to add.
+ */
+ addHotspot : function (hotspot) {
+ this.container.appendChild (hotspot.getElement ());
+ this.hotspots.push (hotspot);
+ }
+}
+
+bigshot.Object.validate ("bigshot.HotspotLayer", bigshot.Layer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new image layer.
+ *
+ * @param {bigshot.ImageBase} image the image that this layer is part of
+ * @param {bigshot.ImageParameters} parameters the associated image parameters
+ * @param {number} w the current width in css pixels of the viewport
+ * @param {number} h the current height in css pixels of the viewport
+ * @param {bigshot.ImageTileCache} itc the tile cache to use
+ * @class A tiled, zoomable image layer.
+ * @constructor
+ */
+bigshot.TileLayer = function (image, parameters, w, h, itc) {
+ this.rows = new Array ();
+ this.browser = new bigshot.Browser ();
+ this.container = image.createLayerContainer ();
+ this.parentContainer = image.getContainer ();
+ this.parameters = parameters;
+ this.w = w;
+ this.h = h;
+ this.imageTileCache = itc;
+
+ this.resize (w, h);
+ return this;
+}
+
+bigshot.TileLayer.prototype = {
+ getContainer : function () {
+ return this.container;
+ },
+
+ resize : function (w, h) {
+ this.container.style.width = this.parentContainer.clientWidth + "px";
+ this.container.style.height = this.parentContainer.clientHeight + "px";
+ this.pixelWidth = this.parentContainer.clientWidth;
+ this.pixelHeight = this.parentContainer.clientHeight;
+ this.w = w;
+ this.h = h;
+ this.rows = new Array ();
+ this.browser.removeAllChildren (this.container);
+ for (var r = 0; r < h; ++r) {
+ var row = new Array ();
+ for (var c = 0; c < w; ++c) {
+ var tileAnchor = document.createElement ("div");
+ tileAnchor.style.position = "absolute";
+ tileAnchor.style.overflow = "hidden";
+ tileAnchor.style.width = this.container.clientWidth + "px";
+ tileAnchor.style.height = this.container.clientHeight + "px";
+
+ var tile = document.createElement ("div");
+ tile.style.position = "relative";
+ tile.style.border = "hidden";
+ tile.style.visibility = "hidden";
+ tile.bigshotData = {
+ visible : false
+ };
+ row.push (tile);
+ this.container.appendChild (tileAnchor);
+ tileAnchor.appendChild (tile);
+ }
+ this.rows.push (row);
+ }
+ },
+
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {
+ zoom = Math.min (0, Math.ceil (zoom));
+
+ this.imageTileCache.resetUsed ();
+ var y = y0;
+
+ var visible = 0;
+ for (var r = 0; r < this.h; ++r) {
+ var x = x0;
+ for (var c = 0; c < this.w; ++c) {
+ var tile = this.rows[r][c];
+ var bigshotData = tile.bigshotData;
+ if (x + size < 0 || x > this.pixelWidth || y + size < 0 || y > this.pixelHeight) {
+ if (bigshotData.visible) {
+ bigshotData.visible = false;
+ tile.style.visibility = "hidden";
+ }
+ } else {
+ visible++;
+ tile.style.left = x + "px";
+ tile.style.top = y + "px";
+ tile.style.width = size + "px";
+ tile.style.height = size + "px";
+ tile.style.opacity = opacity;
+ if (!bigshotData.visible) {
+ bigshotData.visible = true;
+ tile.style.visibility = "visible";
+ }
+ var tx = c + tx0;
+ var ty = r + ty0;
+ if (this.parameters.wrapX) {
+ if (tx < 0 || tx >= this.imageTileCache.maxTileX) {
+ tx = (tx + this.imageTileCache.maxTileX) % this.imageTileCache.maxTileX;
+ }
+ }
+
+ if (this.parameters.wrapY) {
+ if (ty < 0 || ty >= this.imageTileCache.maxTileY) {
+ ty = (ty + this.imageTileCache.maxTileY) % this.imageTileCache.maxTileY;
+ }
+ }
+
+ var imageKey = tx + "_" + ty + "_" + zoom;
+ var isOutside = tx < 0 || tx >= this.imageTileCache.maxTileX || ty < 0 || ty >= this.imageTileCache.maxTileY;
+ if (isOutside) {
+ if (!bigshotData.isOutside) {
+ var image = this.imageTileCache.getImage (tx, ty, zoom);
+
+ this.browser.removeAllChildren (tile);
+ tile.appendChild (image);
+ bigshotData.image = image;
+ }
+ bigshotData.isOutside = true;
+ bigshotData.imageKey = "EMPTY";
+ bigshotData.image.style.width = size + "px";
+ bigshotData.image.style.height = size + "px";
+ } else {
+ var image = this.imageTileCache.getImage (tx, ty, zoom);
+
+ bigshotData.isOutside = false;
+
+ if (bigshotData.imageKey !== imageKey || bigshotData.isPartial) {
+ this.browser.removeAllChildren (tile);
+ tile.appendChild (image);
+ bigshotData.image = image;
+ bigshotData.imageKey = imageKey;
+ bigshotData.isPartial = image.isPartial;
+ }
+ bigshotData.image.style.width = size + "px";
+ bigshotData.image.style.height = size + "px";
+
+ }
+ }
+ x += stride;
+ }
+ y += stride;
+ }
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ this.imageTileCache.setMaxTiles (mtx, mty);
+ }
+};
+
+bigshot.Object.validate ("bigshot.TileLayer", bigshot.Layer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new, empty, LRUMap instance.
+ *
+ * @class Implementation of a Least-Recently-Used cache map.
+ * Used by the ImageTileCache to keep track of cache entries.
+ * @constructor
+ */
+bigshot.LRUMap = function () {
+ /**
+ * Key to last-accessed time mapping.
+ *
+ * @type Object
+ */
+ this.keyToTime = {};
+
+ /**
+ * Current time counter. Incremented for each access of
+ * a key in the map.
+ * @type int
+ */
+ this.counter = 0;
+
+ /**
+ * Current size of the map.
+ * @type int
+ */
+ this.size = 0;
+}
+
+bigshot.LRUMap.prototype = {
+ /**
+ * Marks access to an item, represented by its key in the map.
+ * The key's last-accessed time is updated to the current time
+ * and the current time is incremented by one step.
+ *
+ * @param {String} key the key associated with the accessed item
+ */
+ access : function (key) {
+ this.remove (key);
+ this.keyToTime[key] = this.counter;
+ ++this.counter;
+ ++this.size;
+ },
+
+ /**
+ * Removes a key from the map.
+ *
+ * @param {String} key the key to remove
+ * @returns true iff the key existed in the map.
+ * @type boolean
+ */
+ remove : function (key) {
+ if (this.keyToTime[key]) {
+ delete this.keyToTime[key];
+ --this.size;
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ /**
+ * Returns the current number of keys in the map.
+ * @type int
+ */
+ getSize : function () {
+ return this.size;
+ },
+
+ /**
+ * Returns the key in the map with the lowest
+ * last-accessed time. This is done as a linear
+ * search through the map. It could be done much
+ * faster with a sorted map, but unless this becomes
+ * a bottleneck it is just not worth the effort.
+ * @type String
+ */
+ leastUsed : function () {
+ var least = this.counter + 1;
+ var leastKey = null;
+ for (var k in this.keyToTime) {
+ if (this.keyToTime[k] < least) {
+ least = this.keyToTime[k];
+ leastKey = k;
+ }
+ }
+ return leastKey;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new cache instance.
+ *
+ * @class Tile cache for the {@link bigshot.TileLayer}.
+ * @constructor
+ */
+bigshot.ImageTileCache = function (onLoaded, onCacheInit, parameters) {
+ var that = this;
+
+ this.parameters = parameters;
+
+ /**
+ * Reduced-resolution preview of the full image.
+ * Loaded from the "poster" image created by
+ * MakeImagePyramid
+ *
+ * @private
+ * @type HTMLImageElement
+ */
+ this.fullImage = null;
+ parameters.dataLoader.loadImage (parameters.fileSystem.getPosterFilename (), function (tile) {
+ that.fullImage = tile;
+ if (onCacheInit) {
+ onCacheInit ();
+ }
+ });
+
+ /**
+ * Maximum number of tiles in the cache.
+ * @private
+ * @type int
+ */
+ this.maxCacheSize = 512;
+ this.maxTileX = 0;
+ this.maxTileY = 0;
+ this.cachedImages = {};
+ this.requestedImages = {};
+ this.usedImages = {};
+ this.lastOnLoadFiredAt = 0;
+ this.imageRequests = 0;
+ this.lruMap = new bigshot.LRUMap ();
+ this.onLoaded = onLoaded;
+ this.browser = new bigshot.Browser ();
+ this.partialImageSize = parameters.tileSize / 4;
+ this.POSTER_ZOOM_LEVEL = Math.log (parameters.posterSize / Math.max (parameters.width, parameters.height)) / Math.log (2);
+}
+
+bigshot.ImageTileCache.prototype = {
+ resetUsed : function () {
+ this.usedImages = {};
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ this.maxTileX = mtx;
+ this.maxTileY = mty;
+ },
+
+ getPartialImage : function (tileX, tileY, zoomLevel) {
+ var img = this.getPartialImageFromDownsampled (tileX, tileY, zoomLevel, 0, 0, this.parameters.tileSize, this.parameters.tileSize);
+ if (img == null) {
+ img = this.getPartialImageFromPoster (tileX, tileY, zoomLevel);
+ }
+ return img;
+ },
+
+ getPartialImageFromPoster : function (tileX, tileY, zoomLevel) {
+ if (this.fullImage && this.fullImage.complete) {
+ var posterScale = this.fullImage.width / this.parameters.width;
+ var tileSizeAtZoom = posterScale * this.parameters.tileSize / Math.pow (2, zoomLevel);
+
+ x0 = Math.floor (tileSizeAtZoom * tileX);
+ y0 = Math.floor (tileSizeAtZoom * tileY);
+ w = Math.floor (tileSizeAtZoom);
+ h = Math.floor (tileSizeAtZoom);
+
+ return this.createPartialImage (this.fullImage, this.fullImage.width, x0, y0, w, h);
+ } else {
+ return null;
+ }
+ },
+
+ createPartialImage : function (sourceImage, expectedSourceImageSize, x0, y0, w, h) {
+ var canvas = document.createElement ("canvas");
+ if (!canvas["width"]) {
+ return null;
+ }
+ canvas.width = this.partialImageSize;
+ canvas.height = this.partialImageSize;
+ var ctx = canvas.getContext('2d');
+
+ var scale = sourceImage.width / expectedSourceImageSize;
+
+ var sx = Math.floor (x0 * scale);
+ var sy = Math.floor (y0 * scale);
+ var dw = this.partialImageSize;
+ var dh = this.partialImageSize;
+
+ w *= scale;
+ if (sx + w >= sourceImage.width) {
+ var w0 = w;
+ w = sourceImage.width - sx;
+ dw *= w / w0;
+ }
+
+ h *= scale;
+ if (sy + h >= sourceImage.height) {
+ var h0 = h;
+ h = sourceImage.height - sy;
+ dh *= h / h0;
+ }
+
+ try {
+ ctx.drawImage (sourceImage, sx, sy, w, h, -0.1, -0.1, dw + 0.2, dh + 0.2);
+ } catch (e) {
+ // DOM INDEX error on iPad.
+ return null;
+ }
+
+ return canvas;
+ },
+
+ getPartialImageFromDownsampled : function (tileX, tileY, zoomLevel, x0, y0, w, h) {
+ // Give up if the poster image has higher resolution.
+ if (zoomLevel < this.POSTER_ZOOM_LEVEL || zoomLevel < this.parameters.minZoom) {
+ return null;
+ }
+
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ var sourceImage = this.cachedImages[key];
+
+ if (sourceImage == null) {
+ this.requestImage (tileX, tileY, zoomLevel);
+ }
+
+ if (sourceImage) {
+ return this.createPartialImage (sourceImage, this.parameters.tileSize, x0, y0, w, h);
+ } else {
+ w /= 2;
+ h /= 2;
+ x0 /= 2;
+ y0 /= 2;
+ if ((tileX % 2) == 1) {
+ x0 += this.parameters.tileSize / 2;
+ }
+ if ((tileY % 2) == 1) {
+ y0 += this.parameters.tileSize / 2;
+ }
+ tileX = Math.floor (tileX / 2);
+ tileY = Math.floor (tileY / 2);
+ --zoomLevel;
+ return this.getPartialImageFromDownsampled (tileX, tileY, zoomLevel, x0, y0, w, h);
+ }
+ },
+
+ getEmptyImage : function () {
+ var tile = document.createElement ("img");
+ if (this.parameters.emptyImage) {
+ tile.src = this.parameters.emptyImage;
+ } else {
+ tile.src = "data:image/gif,GIF89a%01%00%01%00%80%00%00%00%00%00%FF%FF%FF!%F9%04%00%00%00%00%00%2C%00%00%00%00%01%00%01%00%00%02%02D%01%00%3B";
+ }
+ return tile;
+ },
+
+ getImage : function (tileX, tileY, zoomLevel) {
+ if (tileX < 0 || tileY < 0 || tileX >= this.maxTileX || tileY >= this.maxTileY) {
+ return this.getEmptyImage ();
+ }
+
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ this.lruMap.access (key);
+
+ if (this.cachedImages[key]) {
+ if (this.usedImages[key]) {
+ var tile = this.parameters.dataLoader.loadImage (this.getImageFilename (tileX, tileY, zoomLevel));
+ tile.isPartial = false;
+ return tile;
+ } else {
+ this.usedImages[key] = true;
+ var img = this.cachedImages[key];
+ return img;
+ }
+ } else {
+ this.requestImage (tileX, tileY, zoomLevel);
+ var img = this.getPartialImage (tileX, tileY, zoomLevel);
+ if (img != null) {
+ img.isPartial = true;
+ this.cachedImages[key] = img;
+ } else {
+ img = this.getEmptyImage ();
+ if (img != null) {
+ img.isPartial = true;
+ }
+ }
+ return img;
+ }
+ },
+
+ requestImage : function (tileX, tileY, zoomLevel) {
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ if (!this.requestedImages[key]) {
+ this.imageRequests++;
+ var that = this;
+ this.requestedImages[key] = true;
+ this.parameters.dataLoader.loadImage (this.getImageFilename (tileX, tileY, zoomLevel), function (tile) {
+ delete that.requestedImages[key];
+ that.imageRequests--;
+ tile.isPartial = false;
+ that.cachedImages[key] = tile;
+ that.fireOnLoad ();
+ });
+ }
+ },
+
+ /**
+ * Fires the onload event, if it hasn't been fired for at least 50 ms
+ */
+ fireOnLoad : function () {
+ var now = new Date();
+ if (this.imageRequests == 0 || now.getTime () > (this.lastOnLoadFiredAt + 50)) {
+ this.purgeCache ();
+ this.lastOnLoadFiredAt = now.getTime ();
+ this.onLoaded ();
+ }
+ },
+
+ /**
+ * Removes the least-recently used objects from the cache,
+ * if the size of the cache exceeds the maximum cache size.
+ * A maximum of four objects will be removed per call.
+ *
+ * @private
+ */
+ purgeCache : function () {
+ for (var i = 0; i < 4; ++i) {
+ if (this.lruMap.getSize () > this.maxCacheSize) {
+ var leastUsed = this.lruMap.leastUsed ();
+ this.lruMap.remove (leastUsed);
+ delete this.cachedImages[leastUsed];
+ }
+ }
+ },
+
+ getImageKey : function (tileX, tileY, zoomLevel) {
+ return "I" + tileX + "_" + tileY + "_" + zoomLevel;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var f = this.parameters.fileSystem.getImageFilename (tileX, tileY, zoomLevel);
+ return f;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new image parameter object and populates it with default values for
+ * all values not explicitly given.
+ *
+ * @class ImageParameters parameter object.
+ * You need not set any fields that can be read from the image descriptor that
+ * MakeImagePyramid creates. See the {@link bigshot.Image} documentation for
+ * required parameters.
+ *
+ * <p>Usage:
+ *
+ * @example
+ * var bsi = new bigshot.Image (
+ * new bigshot.ImageParameters ({
+ * basePath : "/bigshot.php?file=myshot.bigshot",
+ * fileSystemType : "archive",
+ * container : document.getElementById ("bigshot_div")
+ * }));
+ *
+ * @param values named parameter map, see the fields below for parameter names and types.
+ * @see bigshot.Image
+ */
+bigshot.ImageParameters = function (values) {
+ /**
+ * Size of low resolution preview image along the longest image
+ * dimension. The preview is assumed to have the same aspect
+ * ratio as the full image (specified by width and height).
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ * @public
+ */
+ this.posterSize = 0;
+
+ /**
+ * Url for the image tile to show while the tile is loading and no
+ * low-resolution preview is available.
+ *
+ * @default <code>null</code>, which results in an all-black image
+ * @type String
+ * @public
+ */
+ this.emptyImage = null;
+
+ /**
+ * Suffix to append to the tile filenames. Typically <code>".jpg"</code> or
+ * <code>".png"</code>.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type String
+ */
+ this.suffix = null;
+
+ /**
+ * The width of the full image; in pixels.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ */
+ this.width = 0;
+
+ /**
+ * The height of the full image; in pixels.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ */
+ this.height = 0;
+
+ /**
+ * For {@link bigshot.Image} and {@link bigshot.SimpleImage}, the <code>div</code>
+ * to use as a container for the image.
+ *
+ * @type HTMLDivElement
+ */
+ this.container = null;
+
+ /**
+ * The minimum zoom value. Zoom values are specified as a magnification; where
+ * 2<sup>n</sup> is the magnification and n is the zoom value. So a zoom value of
+ * 2 means a 4x magnification of the full image. -3 means showing an image that
+ * is a eighth (1/8 or 1/2<sup>3</sup>) of the full size.
+ *
+ * @type number
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.minZoom = 0.0;
+
+ /**
+ * The maximum zoom value. Zoom values are specified as a magnification; where
+ * 2<sup>n</sup> is the magnification and n is the zoom value. So a zoom value of
+ * 2 means a 4x magnification of the full image. -3 means showing an image that
+ * is a eighth (1/8 or 1/2<sup>3</sup>) of the full size.
+ *
+ * @type number
+ * @default 0.0
+ */
+ this.maxZoom = 0.0;
+
+ /**
+ * Size of one tile in pixels.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.tileSize = 0;
+
+ /**
+ * Tile overlap. Not implemented.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.overlap = 0;
+
+ /**
+ * Flag indicating that the image should wrap horizontally. The image wraps on tile
+ * boundaries; so in order to get a seamless wrap at zoom level -n; the image width must
+ * be evenly divisible by <code>tileSize * 2^n</code>. Set the minZoom value appropriately.
+ *
+ * @type boolean
+ * @default false
+ */
+ this.wrapX = false;
+
+ /**
+ * Flag indicating that the image should wrap vertically. The image wraps on tile
+ * boundaries; so in order to get a seamless wrap at zoom level -n; the image height must
+ * be evenly divisible by <code>tileSize * 2^n</code>. Set the minZoom value appropriately.
+ *
+ * @type boolean
+ * @default false
+ */
+ this.wrapY = false;
+
+ /**
+ * Base path for the image. This is filesystem dependent; but for the two most common cases
+ * the following should be set
+ *
+ * <ul>
+ * <li><b>archive</b>= The basePath is <code>"&lt;path&gt;/bigshot.php?file=&lt;path-to-bigshot-archive-relative-to-bigshot.php&gt;"</code>;
+ * for example; <code>"/bigshot.php?file=images/bigshot-sample.bigshot"</code>.
+ * <li><b>folder</b>= The basePath is <code>"&lt;path-to-image-folder&gt;"</code>;
+ * for example; <code>"/images/bigshot-sample"</code>.
+ * </ul>
+ *
+ * @type String
+ */
+ this.basePath = null;
+
+ /**
+ * The file system type. Used to create a filesystem instance unless
+ * the fileSystem field is set. Possible values are <code>"archive"</code>,
+ * <code>"folder"</code> or <code>"dzi"</code>.
+ *
+ * @type String
+ * @default "folder"
+ */
+ this.fileSystemType = "folder";
+
+ /**
+ * A reference to a filesystem implementation. If set; it overrides the
+ * fileSystemType field.
+ *
+ * @default set depending on value of bigshot.ImageParameters.fileSystemType
+ * @type bigshot.FileSystem
+ */
+ this.fileSystem = null;
+
+ /**
+ * Object used to load data files.
+ *
+ * @default bigshot.DefaultDataLoader
+ * @type bigshot.DataLoader
+ */
+ this.dataLoader = new bigshot.DefaultDataLoader ();
+
+ /**
+ * Enable the touch-friendly ui. The touch-friendly UI splits the viewport into
+ * three click-sensitive regions:
+ * <p style="text-align:center"><img src="../images/touch-ui.png"/></p>
+ *
+ * <p>Clicking (or tapping with a finger) on the outer region causes the viewport to zoom out.
+ * Clicking anywhere within the middle, "pan", region centers the image on the spot clicked.
+ * Finally, clicking in the center hotspot will center the image on the spot clicked and zoom
+ * in half a zoom level.
+ *
+ * <p>As before, you can drag to pan anywhere.
+ *
+ * <p>If you have navigation tools for mouse users that hover over the image container, it
+ * is recommended that any click events on them are kept from bubbling, otherwise the click
+ * will propagate to the touch ui. One way is to use the
+ * {@link bigshot.Browser#stopMouseEventBubbling} method:
+ *
+ * @example
+ * var browser = new bigshot.Browser ();
+ * browser.stopMouseEventBubbling (document.getElementById ("myBigshotControlDiv"));
+ *
+ * @see bigshot.ImageBase#showTouchUI
+ *
+ * @type boolean
+ * @default true
+ * @deprecated Bigshot supports all common touch-gestures.
+ */
+ this.touchUI = false;
+
+ /**
+ * Lets you "fling" the image.
+ *
+ * @type boolean
+ * @default true
+ */
+ this.fling = true;
+
+ /**
+ * The maximum amount that a tile will be stretched until we try to show
+ * the next more detailed level.
+ *
+ * @type float
+ * @default 1.0
+ */
+ this.maxTextureMagnification = 1.0;
+
+ if (values) {
+ for (var k in values) {
+ this[k] = values[k];
+ }
+ }
+
+ this.merge = function (values, overwrite) {
+ for (var k in values) {
+ if (overwrite || !this[k]) {
+ this[k] = values[k];
+ }
+ }
+ }
+ return this;
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Sets up base image functionality.
+ *
+ * @param {bigshot.ImageParameters} parameters the image parameters
+ * @class Base class for image viewers.
+ * @extends bigshot.EventDispatcher
+ */
+bigshot.ImageBase = function (parameters) {
+ // Base class init
+ bigshot.EventDispatcher.call (this);
+
+ this.parameters = parameters;
+ this.flying = 0;
+ this.container = parameters.container;
+ this.x = parameters.width / 2.0;
+ this.y = parameters.height / 2.0;
+ this.zoom = 0.0;
+ this.width = parameters.width;
+ this.height = parameters.height;
+ this.minZoom = parameters.minZoom;
+ this.maxZoom = parameters.maxZoom;
+ this.tileSize = parameters.tileSize;
+ this.overlap = 0;
+ this.imageTileCache = null;
+
+ this.dragStart = null;
+ this.dragged = false;
+
+ this.layers = new Array ();
+
+ this.fullScreenHandler = null;
+ this.currentGesture = null;
+
+ var that = this;
+ this.onresizeHandler = function (e) {
+ that.onresize ();
+ }
+
+ /**
+ * Helper function to consume events.
+ * @private
+ */
+ var consumeEvent = function (event) {
+ if (event.preventDefault) {
+ event.preventDefault ();
+ }
+ return false;
+ };
+
+ /**
+ * Helper function to translate touch events to mouse-like events.
+ * @private
+ */
+ var translateEvent = function (event) {
+ if (event.clientX) {
+ return event;
+ } else {
+ return {
+ clientX : event.changedTouches[0].clientX,
+ clientY : event.changedTouches[0].clientY,
+ changedTouches : event.changedTouches
+ };
+ };
+ };
+
+ this.setupLayers ();
+
+ this.resize ();
+
+ this.allListeners = {
+ "DOMMouseScroll" : function (e) {
+ that.mouseWheel (e);
+ return consumeEvent (e);
+ },
+ "mousewheel" : function (e) {
+ that.mouseWheel (e);
+ return consumeEvent (e);
+ },
+ "dblclick" : function (e) {
+ that.mouseDoubleClick (e);
+ return consumeEvent (e);
+ },
+ "mousedown" : function (e) {
+ that.dragMouseDown (e);
+ return consumeEvent (e);
+ },
+ "gesturestart" : function (e) {
+ that.gestureStart (e);
+ return consumeEvent (e);
+ },
+ "gesturechange" : function (e) {
+ that.gestureChange (e);
+ return consumeEvent (e);
+ },
+ "gestureend" : function (e) {
+ that.gestureEnd (e);
+ return consumeEvent (e);
+ },
+ "touchstart" : function (e) {
+ that.dragMouseDown (translateEvent (e));
+ return consumeEvent (e);
+ },
+ "mouseup" : function (e) {
+ that.dragMouseUp (e);
+ return consumeEvent (e);
+ },
+ "touchend" : function (e) {
+ that.dragMouseUp (translateEvent (e));
+ return consumeEvent (e);
+ },
+ "mousemove" : function (e) {
+ that.dragMouseMove (e);
+ return consumeEvent (e);
+ },
+ "mouseout" : function (e) {
+ //that.dragMouseUp (e);
+ return consumeEvent (e);
+ },
+ "touchmove" : function (e) {
+ that.dragMouseMove (translateEvent (e));
+ return consumeEvent (e);
+ }
+ };
+
+ this.addEventListeners ();
+ this.browser.registerListener (window, 'resize', that.onresizeHandler, false);
+ this.zoomToFit ();
+}
+
+bigshot.ImageBase.prototype = {
+ /**
+ * Browser helper and compatibility functions.
+ *
+ * @private
+ * @type bigshot.Browser
+ */
+ browser : new bigshot.Browser (),
+
+ /**
+ * Adds all event listeners to the container object.
+ * @private
+ */
+ addEventListeners : function () {
+ for (var k in this.allListeners) {
+ this.browser.registerListener (this.container, k, this.allListeners[k], false);
+ }
+ },
+
+ /**
+ * Removes all event listeners from the container object.
+ * @private
+ */
+ removeEventListeners : function () {
+ for (var k in this.allListeners) {
+ this.browser.unregisterListener (this.container, k, this.allListeners[k], false);
+ }
+ },
+
+ /**
+ * Sets up the initial layers of the image. Override in subclass.
+ */
+ setupLayers : function () {
+ },
+
+ /**
+ * Returns the base 2 logarithm of the maximum texture stretching, allowing for device pixel scaling.
+ * @type number
+ * @private
+ */
+ getTextureStretch : function () {
+ var ts = Math.log (this.parameters.maxTextureMagnification / this.browser.getDevicePixelScale ()) / Math.LN2;
+ return ts;
+ },
+
+ /**
+ * Constrains the x and y coordinates to allowed values
+ * @param {number} x the initial x coordinate
+ * @param {number} y the initial y coordinate
+ * @return {number} .x the constrained x coordinate
+ * @return {number} .y the constrained y coordinate
+ */
+ clampXY : function (x, y) {
+ var viewportWidth = this.container.clientWidth;
+ var viewportHeight = this.container.clientHeight;
+
+ var realZoomFactor = Math.pow (2, this.zoom);
+ /*
+ Constrain X and Y
+ */
+ var viewportWidthInImagePixels = viewportWidth / realZoomFactor;
+ var viewportHeightInImagePixels = viewportHeight / realZoomFactor;
+
+ var constrain = function (viewportSizeInImagePixels, imageSizeInImagePixels, p) {
+ var min = viewportSizeInImagePixels / 2;
+ min = Math.min (imageSizeInImagePixels / 2, min);
+ if (p < min) {
+ p = min;
+ }
+
+ var max = imageSizeInImagePixels - viewportSizeInImagePixels / 2;
+ max = Math.max (imageSizeInImagePixels / 2, max);
+ if (p > max) {
+ p = max;
+ }
+ return p;
+ };
+
+ var o = {};
+ if (x != null) {
+ o.x = constrain (viewportWidthInImagePixels, this.width, x);
+ }
+
+ if (y != null) {
+ o.y = constrain (viewportHeightInImagePixels, this.height, y);
+ }
+
+ return o;
+ },
+
+ /**
+ * Lays out all layers according to the current
+ * x, y and zoom values.
+ *
+ * @public
+ */
+ layout : function () {
+ var viewportWidth = this.container.clientWidth;
+ var viewportHeight = this.container.clientHeight;
+
+ var zoomWithStretch = Math.min (this.maxZoom, Math.max (this.zoom - this.getTextureStretch (), this.minZoom));
+
+ var zoomLevel = Math.min (0, Math.ceil (zoomWithStretch));
+ var zoomFactor = Math.pow (2, zoomLevel);
+
+ var clamped = this.clampXY (this.x, this.y);
+
+ if (!this.parameters.wrapY) {
+ this.y = clamped.y;
+ }
+
+ if (!this.parameters.wrapX) {
+ this.x = clamped.x;
+ }
+
+ var tileWidthInRealPixels = this.tileSize / zoomFactor;
+
+ var fractionalZoomFactor = Math.pow (2, this.zoom - zoomLevel);
+ var tileDisplayWidth = this.tileSize * fractionalZoomFactor;
+
+ var widthInTiles = this.width / tileWidthInRealPixels;
+ var heightInTiles = this.height / tileWidthInRealPixels;
+ var centerInTilesX = this.x / tileWidthInRealPixels;
+ var centerInTilesY = this.y / tileWidthInRealPixels;
+
+ var topLeftInTilesX = centerInTilesX - (viewportWidth / 2) / tileDisplayWidth;
+ var topLeftInTilesY = centerInTilesY - (viewportHeight / 2) / tileDisplayWidth;
+
+ var topLeftTileX = Math.floor (topLeftInTilesX);
+ var topLeftTileY = Math.floor (topLeftInTilesY);
+ var topLeftTileXoffset = Math.round ((topLeftInTilesX - topLeftTileX) * tileDisplayWidth);
+ var topLeftTileYoffset = Math.round ((topLeftInTilesY - topLeftTileY) * tileDisplayWidth);
+
+ for (var i = 0; i < this.layers.length; ++i) {
+ this.layers[i].layout (
+ zoomWithStretch,
+ -topLeftTileXoffset - tileDisplayWidth, -topLeftTileYoffset - tileDisplayWidth,
+ topLeftTileX - 1, topLeftTileY - 1,
+ Math.ceil (tileDisplayWidth), Math.ceil (tileDisplayWidth),
+ 1.0);
+ }
+ },
+
+ /**
+ * Resizes the layers of this image.
+ *
+ * @public
+ */
+ resize : function () {
+ var tilesW = Math.ceil (2 * this.container.clientWidth / this.tileSize) + 2;
+ var tilesH = Math.ceil (2 * this.container.clientHeight / this.tileSize) + 2;
+ for (var i = 0; i < this.layers.length; ++i) {
+ this.layers[i].resize (tilesW, tilesH);
+ }
+ },
+
+ /**
+ * Creates a HTML div container for a layer. This method
+ * is called by the layer's constructor to obtain a
+ * container.
+ *
+ * @public
+ * @type HTMLDivElement
+ */
+ createLayerContainer : function () {
+ var layerContainer = document.createElement ("div");
+ layerContainer.style.position = "absolute";
+ layerContainer.style.overflow = "hidden";
+ return layerContainer;
+ },
+
+ /**
+ * Returns the div element used as viewport.
+ *
+ * @public
+ * @type HTMLDivElement
+ */
+ getContainer : function () {
+ return this.container;
+ },
+
+ /**
+ * Adds a new layer to the image.
+ *
+ * @public
+ * @see bigshot.HotspotLayer for usage example
+ * @param {bigshot.Layer} layer the layer to add.
+ */
+ addLayer : function (layer) {
+ this.container.appendChild (layer.getContainer ());
+ this.layers.push (layer);
+ },
+
+ /**
+ * Clamps the zoom value to be between minZoom and maxZoom.
+ *
+ * @param {number} zoom the zoom value
+ * @type number
+ */
+ clampZoom : function (zoom) {
+ return Math.min (this.maxZoom, Math.max (zoom, this.minZoom));
+ },
+
+ /**
+ * Sets the current zoom value.
+ *
+ * @private
+ * @param {number} zoom the zoom value.
+ * @param {boolean} [layout] trigger a viewport update after setting. Defaults to <code>false</code>.
+ */
+ setZoom : function (zoom, updateViewport) {
+ this.zoom = this.clampZoom (zoom);
+ var zoomLevel = Math.ceil (this.zoom - this.getTextureStretch ());
+ var zoomFactor = Math.pow (2, zoomLevel);
+ var maxTileX = Math.ceil (zoomFactor * this.width / this.tileSize);
+ var maxTileY = Math.ceil (zoomFactor * this.height / this.tileSize);
+ for (var i = 0; i < this.layers.length; ++i) {
+ this.layers[i].setMaxTiles (maxTileX, maxTileY);
+ }
+ if (updateViewport) {
+ this.layout ();
+ }
+ },
+
+ /**
+ * Sets the maximum zoom value. The maximum magnification (of the full-size image)
+ * is 2<sup>maxZoom</sup>. Set to 0.0 to avoid pixelation.
+ *
+ * @public
+ * @param {number} maxZoom the maximum zoom value
+ */
+ setMaxZoom : function (maxZoom) {
+ this.maxZoom = maxZoom;
+ },
+
+ /**
+ * Gets the maximum zoom value. The maximum magnification (of the full-size image)
+ * is 2<sup>maxZoom</sup>.
+ *
+ * @public
+ * @type number
+ */
+ getMaxZoom : function () {
+ return this.maxZoom;
+ },
+
+ /**
+ * Sets the minimum zoom value. The minimum magnification (of the full-size image)
+ * is 2<sup>minZoom</sup>, so a minZoom of <code>-3</code> means that the smallest
+ * image shown will be one-eighth of the full-size image.
+ *
+ * @public
+ * @param {number} minZoom the minimum zoom value for this image
+ */
+ setMinZoom : function (minZoom) {
+ this.minZoom = minZoom;
+ },
+
+ /**
+ * Gets the minimum zoom value. The minimum magnification (of the full-size image)
+ * is 2<sup>minZoom</sup>, so a minZoom of <code>-3</code> means that the smallest
+ * image shown will be one-eighth of the full-size image.
+ *
+ * @public
+ * @type number
+ */
+ getMinZoom : function () {
+ return this.minZoom;
+ },
+
+ /**
+ * Adjusts a coordinate so that the center of zoom
+ * remains constant during zooming operations. The
+ * method is intended to be called twice, once for x
+ * and once for y. The <code>current</code> and
+ * <code>centerOfZoom</code> values will be the current
+ * and the center for the x and y, respectively.
+ *
+ * @example
+ * this.x = this.adjustCoordinateForZoom (this.x, zoomCenterX, oldZoom, newZoom);
+ * this.y = this.adjustCoordinateForZoom (this.y, zoomCenterY, oldZoom, newZoom);
+ *
+ * @param {number} current the current value of the coordinate
+ * @param {number} centerOfZoom the center of zoom along the coordinate axis
+ * @param {number} oldZoom the old zoom value
+ * @param {number} oldZoom the new zoom value
+ * @type number
+ * @returns the new value for the coordinate
+ */
+ adjustCoordinateForZoom : function (current, centerOfZoom, oldZoom, newZoom) {
+ var zoomRatio = Math.pow (2, oldZoom) / Math.pow (2, newZoom);
+ return centerOfZoom + (current - centerOfZoom) * zoomRatio;
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ gestureStart : function (event) {
+ this.currentGesture = {
+ startZoom : this.zoom,
+ scale : event.scale
+ };
+ },
+
+ /**
+ * Ends a gesture.
+ *
+ * @param {Event} event the <code>gestureend</code> event
+ * @private
+ */
+ gestureEnd : function (event) {
+ this.currentGesture = null;
+ if (this.dragStart) {
+ this.dragStart.hadGesture = true;
+ }
+ },
+
+ /**
+ * Adjusts the zoom level based on the scale property of the
+ * gesture.
+ *
+ * @private
+ */
+ gestureChange : function (event) {
+ if (this.currentGesture) {
+ if (this.dragStart) {
+ this.dragStart.hadGesture = true;
+ }
+
+ var newZoom = this.clampZoom (this.currentGesture.startZoom + Math.log (event.scale) / Math.log (2));
+ var oldZoom = this.getZoom ();
+ if (this.currentGesture.clientX !== undefined && this.currentGesture.clientY !== undefined) {
+ var centerOfZoom = this.clientToImage (this.currentGesture.clientX, this.currentGesture.clientY);
+
+ var nx = this.adjustCoordinateForZoom (this.x, centerOfZoom.x, oldZoom, newZoom);
+ var ny = this.adjustCoordinateForZoom (this.y, centerOfZoom.y, oldZoom, newZoom);
+
+ this.moveTo (nx, ny, newZoom);
+ } else {
+ this.setZoom (newZoom);
+ this.layout ();
+ }
+ }
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ dragMouseDown : function (event) {
+ this.dragStart = {
+ x : event.clientX,
+ y : event.clientY
+ };
+ this.dragLast = {
+ clientX : event.clientX,
+ clientY : event.clientY,
+ dx : 0,
+ dy : 0,
+ dt : 1000000,
+ time : new Date ().getTime ()
+ };
+ this.dragged = false;
+ },
+
+ /**
+ * Handles a mouse drag event by panning the image.
+ * Also sets the dragged flag to indicate that the
+ * following <code>click</code> event should be ignored.
+ * @private
+ */
+ dragMouseMove : function (event) {
+ if (this.currentGesture != null && event.changedTouches != null && event.changedTouches.length > 0) {
+ var cx = 0;
+ var cy = 0;
+ for (var i = 0; i < event.changedTouches.length; ++i) {
+ cx += event.changedTouches[i].clientX;
+ cy += event.changedTouches[i].clientY;
+ }
+ this.currentGesture.clientX = cx / event.changedTouches.length;
+ this.currentGesture.clientY = cy / event.changedTouches.length;
+ }
+
+ if (this.currentGesture == null && this.dragStart != null) {
+ var delta = {
+ x : event.clientX - this.dragStart.x,
+ y : event.clientY - this.dragStart.y
+ };
+ if (delta.x != 0 || delta.y != 0) {
+ this.dragged = true;
+ }
+ var zoomFactor = Math.pow (2, this.zoom);
+ var realX = delta.x / zoomFactor;
+ var realY = delta.y / zoomFactor;
+
+ this.dragStart = {
+ x : event.clientX,
+ y : event.clientY
+ };
+
+ var dt = new Date ().getTime () - this.dragLast.time;
+ if (dt > 20) {
+ this.dragLast = {
+ dx : this.dragLast.clientX - event.clientX,
+ dy : this.dragLast.clientY - event.clientY,
+ dt : dt,
+ clientX : event.clientX,
+ clientY : event.clientY,
+ time : new Date ().getTime ()
+ };
+ }
+
+ this.moveTo (this.x - realX, this.y - realY);
+ }
+ },
+
+ /**
+ * Ends a drag event by freeing the associated structures.
+ * @private
+ */
+ dragMouseUp : function (event) {
+ if (this.currentGesture == null && !this.dragStart.hadGesture && this.dragStart != null) {
+ this.dragStart = null;
+ if (!this.dragged) {
+ this.mouseClick (event);
+ } else {
+ var scale = Math.pow (2, this.zoom);
+ var dx = this.dragLast.dx / scale;
+ var dy = this.dragLast.dy / scale;
+ var ds = Math.sqrt (dx * dx + dy * dy);
+ var dt = this.dragLast.dt;
+ var dtb = new Date ().getTime () - this.dragLast.time;
+ this.dragLast = null;
+
+ var v = dt > 0 ? (ds / dt) : 0;
+ if (v > 0.05 && dtb < 250 && dt > 20 && this.parameters.fling) {
+ var t0 = new Date ().getTime ();
+
+ dx /= dt;
+ dy /= dt;
+
+ this.flyTo (this.x + dx * 250, this.y + dy * 250, this.zoom);
+ }
+ }
+ }
+ },
+
+ /**
+ * Mouse double-click handler. Pans to the clicked point and
+ * zooms in half a zoom level (approx 40%).
+ * @private
+ */
+ mouseDoubleClick : function (event) {
+ var eventData = this.createImageEventData ({
+ type : "dblclick",
+ clientX : event.clientX,
+ clientY : event.clientY
+ });
+ this.fireEvent ("dblclick", eventData);
+ if (!eventData.defaultPrevented) {
+ this.flyTo (eventData.imageX, eventData.imageY, this.zoom + 0.5);
+ }
+ },
+
+ /**
+ * Returns the current zoom level.
+ *
+ * @public
+ * @type number
+ */
+ getZoom : function () {
+ return this.zoom;
+ },
+
+ /**
+ * Stops any current flyTo operation and sets the current position.
+ *
+ * @param [x] the new x-coordinate
+ * @param [y] the new y-coordinate
+ * @param [zoom] the new zoom level
+ * @param [updateViewport=true] updates the viewport
+ * @public
+ */
+ moveTo : function (x, y, zoom, updateViewport) {
+ this.stopFlying ();
+
+ if (x != null || y != null) {
+ this.setPosition (x, y, false);
+ }
+ if (zoom != null) {
+ this.setZoom (zoom, false);
+ }
+ if (updateViewport == undefined || updateViewport == true) {
+ this.layout ();
+ }
+ },
+
+ /**
+ * Sets the current position.
+ *
+ * @param [x] the new x-coordinate
+ * @param [y] the new y-coordinate
+ * @param [updateViewport=true] if the viewport should be updated
+ * @private
+ */
+ setPosition : function (x, y, updateViewport) {
+ var clamped = this.clampXY (x, y);
+
+ if (x != null) {
+ if (this.parameters.wrapX) {
+ if (x < 0 || x >= this.width) {
+ x = (x + this.width) % this.width;
+ }
+ } else {
+ x = clamped.x;
+ }
+ this.x = Math.max (0, Math.min (this.width, x));
+ }
+
+ if (y != null) {
+ if (this.parameters.wrapY) {
+ if (y < 0 || y >= this.height) {
+ y = (y + this.height) % this.height;
+ }
+ } else {
+ y = clamped.y;
+ }
+ this.y = Math.max (0, Math.min (this.height, y));
+ }
+
+ if (updateViewport != false) {
+ this.layout ();
+ }
+ },
+
+ /**
+ * Helper function for calculating zoom levels.
+ *
+ * @public
+ * @returns the zoom level at which the given number of full-image pixels
+ * occupy the given number of screen pixels.
+ * @param {number} imageDimension the image dimension in full-image pixels
+ * @param {number} containerDimension the container dimension in screen pixels
+ * @type number
+ */
+ fitZoom : function (imageDimension, containerDimension) {
+ var scale = containerDimension / imageDimension;
+ return Math.log (scale) / Math.LN2;
+ },
+
+ /**
+ * Returns the maximum zoom level at which the full image
+ * is visible in the viewport.
+ * @public
+ * @type number
+ */
+ getZoomToFitValue : function () {
+ return Math.min (
+ this.fitZoom (this.parameters.width, this.container.clientWidth),
+ this.fitZoom (this.parameters.height, this.container.clientHeight));
+ },
+
+ /**
+ * Returns the zoom level at which the image fills the whole
+ * viewport.
+ * @public
+ * @type number
+ */
+ getZoomToFillValue : function () {
+ return Math.max (
+ this.fitZoom (this.parameters.width, this.container.clientWidth),
+ this.fitZoom (this.parameters.height, this.container.clientHeight));
+ },
+
+ /**
+ * Adjust the zoom level to fit the image in the viewport.
+ * @public
+ */
+ zoomToFit : function () {
+ this.moveTo (null, null, this.getZoomToFitValue ());
+ },
+
+ /**
+ * Adjust the zoom level to fit the image in the viewport.
+ * @public
+ */
+ zoomToFill : function () {
+ this.moveTo (null, null, this.getZoomToFillValue ());
+ },
+
+ /**
+ * Adjust the zoom level to fit the
+ * image height in the viewport.
+ * @public
+ */
+ zoomToFitHeight : function () {
+ this.moveTo (null, null, this.fitZoom (this.parameters.height, this.container.clientHeight));
+ },
+
+ /**
+ * Adjust the zoom level to fit the
+ * image width in the viewport.
+ * @public
+ */
+ zoomToFitWidth : function () {
+ this.moveTo (null, null, this.fitZoom (this.parameters.width, this.container.clientWidth));
+ },
+
+ /**
+ * Smoothly adjust the zoom level to fit the
+ * image height in the viewport.
+ * @public
+ */
+ flyZoomToFitHeight : function () {
+ this.flyTo (null, this.parameters.height / 2, this.fitZoom (this.parameters.height, this.container.clientHeight));
+ },
+
+ /**
+ * Smoothly adjust the zoom level to fit the
+ * image width in the viewport.
+ * @public
+ */
+ flyZoomToFitWidth : function () {
+ this.flyTo (this.parameters.width / 2, null, this.fitZoom (this.parameters.width, this.container.clientWidth));
+ },
+
+ /**
+ * Smoothly adjust the zoom level to fit the
+ * full image in the viewport.
+ * @public
+ */
+ flyZoomToFit : function () {
+ this.flyTo (this.parameters.width / 2, this.parameters.height / 2, this.getZoomToFitValue ());
+ },
+
+ /**
+ * Converts client-relative screen coordinates to image coordinates.
+ *
+ * @param {number} clientX the client x-coordinate
+ * @param {number} clientY the client y-coordinate
+ *
+ * @returns {number} .x the image x-coordinate
+ * @returns {number} .y the image y-coordinate
+ * @type Object
+ */
+ clientToImage : function (clientX, clientY) {
+ var zoomFactor = Math.pow (2, this.zoom);
+ return {
+ x : (clientX - this.container.clientWidth / 2) / zoomFactor + this.x,
+ y : (clientY - this.container.clientHeight / 2) / zoomFactor + this.y
+ };
+ },
+
+ /**
+ * Handles mouse wheel actions.
+ * @private
+ */
+ mouseWheelHandler : function (delta, event) {
+ var zoomDelta = false;
+ if (delta > 0) {
+ zoomDelta = 0.5;
+ } else if (delta < 0) {
+ zoomDelta = -0.5;
+ }
+
+ if (zoomDelta) {
+ var centerOfZoom = this.clientToImage (event.clientX, event.clientY);
+ var newZoom = Math.min (this.maxZoom, Math.max (this.getZoom () + zoomDelta, this.minZoom));
+
+ var nx = this.adjustCoordinateForZoom (this.x, centerOfZoom.x, this.getZoom (), newZoom);
+ var ny = this.adjustCoordinateForZoom (this.y, centerOfZoom.y, this.getZoom (), newZoom);
+
+ this.flyTo (nx, ny, newZoom, true);
+ }
+ },
+
+ /**
+ * Translates mouse wheel events.
+ * @private
+ */
+ mouseWheel : function (event){
+ var delta = 0;
+ if (!event) /* For IE. */
+ event = window.event;
+ if (event.wheelDelta) { /* IE/Opera. */
+ delta = event.wheelDelta / 120;
+ /*
+ * In Opera 9, delta differs in sign as compared to IE.
+ */
+ if (window.opera)
+ delta = -delta;
+ } else if (event.detail) { /* Mozilla case. */
+ /*
+ * In Mozilla, sign of delta is different than in IE.
+ * Also, delta is multiple of 3.
+ */
+ delta = -event.detail;
+ }
+
+ /*
+ * If delta is nonzero, handle it.
+ * Basically, delta is now positive if wheel was scrolled up,
+ * and negative, if wheel was scrolled down.
+ */
+ if (delta) {
+ this.mouseWheelHandler (delta, event);
+ }
+
+ /*
+ * Prevent default actions caused by mouse wheel.
+ * That might be ugly, but we handle scrolls somehow
+ * anyway, so don't bother here..
+ */
+ if (event.preventDefault) {
+ event.preventDefault ();
+ }
+ event.returnValue = false;
+ },
+
+ /**
+ * Triggers a right-sizing of all layers.
+ * Called on window resize via the {@link bigshot.ImageBase#onresizeHandler} stub.
+ * @public
+ */
+ onresize : function () {
+ this.resize ();
+ this.layout ();
+ },
+
+ /**
+ * Returns the current x-coordinate, which is the full-image x coordinate
+ * in the center of the viewport.
+ * @public
+ * @type number
+ */
+ getX : function () {
+ return this.x;
+ },
+
+ /**
+ * Returns the current y-coordinate, which is the full-image x coordinate
+ * in the center of the viewport.
+ * @public
+ * @type number
+ */
+ getY : function () {
+ return this.y;
+ },
+
+ /**
+ * Interrupts the current {@link #flyTo}, if one is active.
+ * @public
+ */
+ stopFlying : function () {
+ this.flying++;
+ },
+
+ /**
+ * Smoothly flies to the specified position.
+ *
+ * @public
+ * @param {number} [x=current x] the new x-coordinate
+ * @param {number} [y=current y] the new y-coordinate
+ * @param {number} [zoom=current zoom] the new zoom level
+ * @param {boolean} [uniformApproach=false] if true, uses the same interpolation curve for x, y and zoom.
+ */
+ flyTo : function (x, y, zoom, uniformApproach) {
+ var that = this;
+
+ x = x != null ? x : this.x;
+ y = y != null ? y : this.y;
+ zoom = zoom != null ? zoom : this.zoom;
+ uniformApproach = uniformApproach != null ? uniformApproach : false;
+
+ var startX = this.x;
+ var startY = this.y;
+ var startZoom = this.zoom;
+
+ var clamped = this.clampXY (x, y);
+ var targetX = this.parameters.wrapX ? x : clamped.x;
+ var targetY = this.parameters.wrapY ? y : clamped.y;
+ var targetZoom = Math.min (this.maxZoom, Math.max (zoom, this.minZoom));
+
+ this.flying++;
+ var flyingAtStart = this.flying;
+
+ var t0 = new Date ().getTime ();
+
+ var approach = function (start, target, dt, step, linear) {
+ var delta = (target - start);
+
+ var diff = - delta * Math.pow (2, -dt * step);
+
+ var lin = dt * linear;
+ if (delta < 0) {
+ diff = Math.max (0, diff - lin);
+ } else {
+ diff = Math.min (0, diff + lin);
+ }
+
+ return target + diff;
+ };
+
+
+ var iter = function () {
+ if (that.flying == flyingAtStart) {
+ var dt = (new Date ().getTime () - t0) / 1000;
+
+ var nx = approach (startX, targetX, dt, uniformApproach ? 10 : 4, uniformApproach ? 0.2 : 1.0);
+ var ny = approach (startY, targetY, dt, uniformApproach ? 10 : 4, uniformApproach ? 0.2 : 1.0);
+ var nz = approach (startZoom, targetZoom, dt, 10, 0.2);
+ var done = true;
+
+ var zoomFactor = Math.min (Math.pow (2, that.getZoom ()), 1);
+
+ if (Math.abs (nx - targetX) < (0.5 * zoomFactor)) {
+ nx = targetX;
+ } else {
+ done = false;
+ }
+ if (Math.abs (ny - targetY) < (0.5 * zoomFactor)) {
+ ny = targetY;
+ } else {
+ done = false;
+ }
+ if (Math.abs (nz - targetZoom) < 0.02) {
+ nz = targetZoom;
+ } else {
+ done = false;
+ }
+ that.setPosition (nx, ny, false);
+ that.setZoom (nz, false);
+ that.layout ();
+ if (!done) {
+ that.browser.requestAnimationFrame (iter, that.container);
+ }
+ };
+ }
+ this.browser.requestAnimationFrame (iter, this.container);
+ },
+
+ /**
+ * Returns the maximum zoom level at which a rectangle with the given dimensions
+ * fit into the viewport.
+ *
+ * @public
+ * @param {number} w the width of the rectangle, given in full-image pixels
+ * @param {number} h the height of the rectangle, given in full-image pixels
+ * @type number
+ * @returns the zoom level that will precisely fit the given rectangle
+ */
+ rectVisibleAtZoomLevel : function (w, h) {
+ return Math.min (
+ this.fitZoom (w, this.container.clientWidth),
+ this.fitZoom (h, this.container.clientHeight));
+ },
+
+ /**
+ * Returns the base size in screen pixels of the two zoom touch areas.
+ * The zoom out border will be getTouchAreaBaseSize() pixels wide,
+ * and the center zoom in hotspot will be 2*getTouchAreaBaseSize() pixels wide
+ * and tall.
+ * @deprecated
+ * @type number
+ * @public
+ */
+ getTouchAreaBaseSize : function () {
+ var averageSize = ((this.container.clientWidth + this.container.clientHeight) / 2) * 0.2;
+ return Math.min (averageSize, Math.min (this.container.clientWidth, this.container.clientHeight) / 6);
+ },
+
+ /**
+ * Creates a new {@link bigshot.ImageEvent} using the supplied data object,
+ * transforming the client x- and y-coordinates to local and image coordinates.
+ * The returned event object will have the {@link bigshot.ImageEvent#localX},
+ * {@link bigshot.ImageEvent#localY}, {@link bigshot.ImageEvent#imageX},
+ * {@link bigshot.ImageEvent#imageY}, {@link bigshot.Event#target} and
+ * {@link bigshot.Event#currentTarget} fields set.
+ *
+ * @param {Object} data data object with initial values for the event object
+ * @param {number} data.clientX the clientX of the event
+ * @param {number} data.clientY the clientY of the event
+ * @returns the new event object
+ * @type bigshot.ImageEvent
+ */
+ createImageEventData : function (data) {
+ var elementPos = this.browser.getElementPosition (this.container);
+ data.localX = data.clientX - elementPos.x;
+ data.localY = data.clientY - elementPos.y;
+
+ var scale = Math.pow (2, this.zoom);
+
+ data.imageX = (data.localX - this.container.clientWidth / 2) / scale + this.x;
+ data.imageY = (data.localY - this.container.clientHeight / 2) / scale + this.y;
+
+ data.target = this;
+ data.currentTarget = this;
+
+ return new bigshot.ImageEvent (data);
+ },
+
+ /**
+ * Handles mouse click events. If the touch UI is active,
+ * we'll pan and/or zoom, as appropriate. If not, we just ignore
+ * the event.
+ * @private
+ */
+ mouseClick : function (event) {
+ var eventData = this.createImageEventData ({
+ type : "click",
+ clientX : event.clientX,
+ clientY : event.clientY
+ });
+ this.fireEvent ("click", eventData);
+ /*
+ if (!eventData.defaultPrevented) {
+ if (!this.parameters.touchUI) {
+ return;
+ }
+ if (this.dragged) {
+ return;
+ }
+
+ var zoomOutBorderSize = this.getTouchAreaBaseSize ();
+ var zoomInHotspotSize = this.getTouchAreaBaseSize ();
+
+ if (Math.abs (clickPos.x) > (this.container.clientWidth / 2 - zoomOutBorderSize) || Math.abs (clickPos.y) > (this.container.clientHeight / 2 - zoomOutBorderSize)) {
+ this.flyTo (this.x, this.y, this.zoom - 0.5);
+ } else {
+ var newZoom = this.zoom;
+ if (Math.abs (clickPos.x) < zoomInHotspotSize && Math.abs (clickPos.y) < zoomInHotspotSize) {
+ newZoom += 0.5;
+ }
+ var scale = Math.pow (2, this.zoom);
+ clickPos.x /= scale;
+ clickPos.y /= scale;
+ this.flyTo (this.x + clickPos.x, this.y + clickPos.y, newZoom);
+ }
+ }
+ */
+ },
+
+ /**
+ * Briefly shows the touch ui zones. See the {@link bigshot.ImageParameters#touchUI}
+ * documentation for an explanation of the touch ui.
+ *
+ * @public
+ * @deprecated All common touch gestures are supported by default.
+ * @see bigshot.ImageParameters#touchUI
+ * @param {int} [delay] milliseconds before fading out
+ * @param {int} [fadeOut] milliseconds to fade out the zone overlays in
+ */
+ showTouchUI : function (delay, fadeOut) {
+ if (!delay) {
+ delay = 2500;
+ }
+ if (!fadeOut) {
+ fadeOut = 1000;
+ }
+
+ var zoomOutBorderSize = this.getTouchAreaBaseSize ();
+ var zoomInHotspotSize = this.getTouchAreaBaseSize ();
+ var centerX = this.container.clientWidth / 2;
+ var centerY = this.container.clientHeight / 2;
+
+ var frameDiv = document.createElement ("div");
+ frameDiv.style.position = "absolute";
+ frameDiv.style.zIndex = "9999";
+ frameDiv.style.opacity = 0.9;
+ frameDiv.style.width = this.container.clientWidth + "px";
+ frameDiv.style.height = this.container.clientHeight + "px";
+
+ var centerSpotAnchor = document.createElement ("div");
+ centerSpotAnchor.style.position = "absolute";
+
+ var centerSpot = document.createElement ("div");
+ centerSpot.style.position = "relative";
+ centerSpot.style.background = "black";
+ centerSpot.style.textAlign = "center";
+ centerSpot.style.top = (centerY - zoomInHotspotSize) + "px";
+ centerSpot.style.left = (centerX - zoomInHotspotSize) + "px";
+ centerSpot.style.width = (2 * zoomInHotspotSize) + "px";
+ centerSpot.style.height = (2 * zoomInHotspotSize) + "px";
+
+ frameDiv.appendChild (centerSpotAnchor);
+ centerSpotAnchor.appendChild (centerSpot);
+ centerSpot.innerHTML = "<span style='display:inline-box; position:relative; vertical-align:middle; font-size: 20pt; top: 10pt; color:white'>ZOOM IN</span>";
+
+ var zoomOutBorderAnchor = document.createElement ("div");
+ zoomOutBorderAnchor.style.position = "absolute";
+
+ var zoomOutBorder = document.createElement ("div");
+ zoomOutBorder.style.position = "relative";
+ zoomOutBorder.style.border = zoomOutBorderSize + "px solid black";
+ zoomOutBorder.style.top = "0px";
+ zoomOutBorder.style.left = "0px";
+ zoomOutBorder.style.textAlign = "center";
+ zoomOutBorder.style.width = this.container.clientWidth + "px";
+ zoomOutBorder.style.height = this.container.clientHeight + "px";
+ zoomOutBorder.style.MozBoxSizing =
+ zoomOutBorder.style.boxSizing =
+ zoomOutBorder.style.WebkitBoxSizing =
+ "border-box";
+
+ zoomOutBorder.innerHTML = "<span style='position:relative; font-size: 20pt; top: -25pt; color:white'>ZOOM OUT</span>";
+
+ zoomOutBorderAnchor.appendChild (zoomOutBorder);
+ frameDiv.appendChild (zoomOutBorderAnchor);
+
+ this.container.appendChild (frameDiv);
+
+ var that = this;
+ var opacity = 0.9;
+ var fadeOutSteps = fadeOut / 50;
+ if (fadeOutSteps < 1) {
+ fadeOutSteps = 1;
+ }
+ var iter = function () {
+ opacity = opacity - (0.9 / fadeOutSteps);
+ if (opacity < 0.0) {
+ that.container.removeChild (frameDiv);
+ } else {
+ frameDiv.style.opacity = opacity;
+ setTimeout (iter, 50);
+ }
+ };
+ setTimeout (iter, delay);
+ },
+
+ /**
+ * Forces exit from full screen mode, if we're there.
+ * @public
+ */
+ exitFullScreen : function () {
+ if (this.fullScreenHandler) {
+ this.removeEventListeners ();
+ this.fullScreenHandler.close ();
+ this.addEventListeners ();
+ this.fullScreenHandler = null;
+ return;
+ }
+ },
+
+ /**
+ * Maximizes the image to cover the browser viewport.
+ * The container div is removed from its parent node upon entering
+ * full screen mode. When leaving full screen mode, the container
+ * is appended to its old parent node. To avoid rearranging the
+ * nodes, wrap the container in an extra div.
+ *
+ * <p>For unknown reasons (probably security), browsers will
+ * not let you open a window that covers the entire screen.
+ * Even when specifying "fullscreen=yes", all you get is a window
+ * that has a title bar and only covers the desktop (not any task
+ * bars or the like). For now, this is the best that I can do,
+ * but should the situation change I'll update this to be
+ * full-screen<i>-ier</i>.
+ * @public
+ */
+ fullScreen : function (onClose) {
+ if (this.fullScreenHandler) {
+ return;
+ }
+
+ var message = document.createElement ("div");
+ message.style.position = "absolute";
+ message.style.fontSize = "16pt";
+ message.style.top = "128px";
+ message.style.width = "100%";
+ message.style.color = "white";
+ message.style.padding = "16px";
+ message.style.zIndex = "9999";
+ message.style.textAlign = "center";
+ message.style.opacity = "0.75";
+ message.innerHTML = "<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";
+
+ var that = this;
+
+ this.fullScreenHandler = new bigshot.FullScreen (this.container);
+ this.fullScreenHandler.restoreSize = true;
+
+ this.fullScreenHandler.addOnResize (function () {
+ if (that.fullScreenHandler && that.fullScreenHandler.isFullScreen) {
+ that.container.style.width = window.innerWidth + "px";
+ that.container.style.height = window.innerHeight + "px";
+ }
+ that.onresize ();
+ });
+
+ this.fullScreenHandler.addOnClose (function () {
+ if (message.parentNode) {
+ try {
+ div.removeChild (message);
+ } catch (x) {
+ }
+ }
+ that.fullScreenHandler = null;
+ });
+
+ if (onClose) {
+ this.fullScreenHandler.addOnClose (function () {
+ onClose ();
+ });
+ }
+
+ this.removeEventListeners ();
+ this.fullScreenHandler.open ();
+ this.addEventListeners ();
+ if (this.fullScreenHandler.getRootElement ()) {
+ this.fullScreenHandler.getRootElement ().appendChild (message);
+
+ setTimeout (function () {
+ var opacity = 0.75;
+ var iter = function () {
+ opacity -= 0.02;
+ if (message.parentNode) {
+ if (opacity <= 0) {
+ try {
+ div.removeChild (message);
+ } catch (x) {}
+ } else {
+ message.style.opacity = opacity;
+ setTimeout (iter, 20);
+ }
+ }
+ };
+ setTimeout (iter, 20);
+ }, 3500);
+ }
+
+ return function () {
+ that.fullScreenHandler.close ();
+ };
+ },
+
+ /**
+ * Unregisters event handlers and other page-level hooks. The client need not call this
+ * method unless bigshot images are created and removed from the page
+ * dynamically. In that case, this method must be called when the client wishes to
+ * free the resources allocated by the image. Otherwise the browser will garbage-collect
+ * all resources automatically.
+ * @public
+ */
+ dispose : function () {
+ this.browser.unregisterListener (window, "resize", this.onresizeHandler, false);
+ this.removeEventListeners ();
+ }
+};
+
+/**
+ * Fired when the user double-clicks on the image
+ *
+ * @name bigshot.ImageBase#dblclick
+ * @event
+ * @param {bigshot.ImageEvent} event the event object
+ */
+
+/**
+ * Fired when the user clicks on (but does not drag) the image
+ *
+ * @name bigshot.ImageBase#click
+ * @event
+ * @param {bigshot.ImageEvent} event the event object
+ */
+
+bigshot.Object.extend (bigshot.ImageBase, bigshot.EventDispatcher);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Creates a new tiled image viewer. (Note: See {@link bigshot.ImageBase#dispose} for important information.)
+ *
+ * @example
+ * var bsi = new bigshot.Image (
+ * new bigshot.ImageParameters ({
+ * basePath : "/bigshot.php?file=myshot.bigshot",
+ * fileSystemType : "archive",
+ * container : document.getElementById ("bigshot_div")
+ * }));
+ *
+ * @param {bigshot.ImageParameters} parameters the image parameters. Required fields are: <code>basePath</code> and <code>container</code>.
+ * If you intend to use the archive filesystem, you need to set the <code>fileSystemType</code> to <code>"archive"</code>
+ * as well.
+ * @see bigshot.ImageBase#dispose
+ * @class A tiled, zoomable image viewer.
+ *
+ * <h3 id="creating-a-wrapping-image">Creating a Wrapping Image</h3>
+ *
+ * <p>If you have set the wrapX or wrapY parameters in the {@link bigshot.ImageParameters}, the
+ * image must be an integer multiple of the tile size at the desired minimum zoom level, otherwise
+ * there will be a gap at the wrap point:
+ *
+ * <p>The way to figure out the proper input size is this:
+ *
+ * <ol>
+ * <li><p>Decide on a tile size and call this <i>tileSize</i>.</p></li>
+ * <li><p>Decide on a minimum integer zoom level, and call this <i>minZoom</i>.</p></li>
+ * <li><p>Compute <i>tileSize * 2<sup>-minZoom</sup></i>, call this <i>S</i>.</p></li>
+ * <li><p>The source image size along the wrapped axis must be evenly divisible by <i>S</i>.</p></li>
+ * </ol>
+ *
+ * <p>An example:</p>
+ *
+ * <ol>
+ * <li><p>I have an image that is 23148x3242 pixels.</p></li>
+ * <li><p>I chose 256x256 pixel tiles: <i>tileSize = 256</i>.</p></li>
+ * <li><p>When displaying the image, I want the user to be able to zoom out so that the
+ * whole image is less than or equal to 600 pixels tall. Since the image is 3242 pixels
+ * tall originally, I will need a <i>minZoom</i> of -3. A <i>minZoom</i> of -2 would only let me
+ * zoom out to 1/4 (2<sup>-2</sup>), or an image that is 810 pixels tall. A <i>minZoom</i> of -3, however lets me
+ * zoom out to 1/8 (2<sup>-3</sup>), or an image that is 405 pixels tall. Thus: <i>minZoom = -3</i></p></li>
+ * <li><p>Computing <i>S</i> gives: <i>S = 256 * 2<sup>3</sup> = 256 * 8 = 2048</i></p></li>
+ * <li><p>I want it to wrap along the X axis. Therefore I may have to adjust the width,
+ * currently 23148 pixels.</p></li>
+ * <li><p>Rounding 23148 down to the nearest multiple of 2048 gives 22528. (23148 divided by 2048 is 11.3, and 11 times 2048 is 22528.)</p></li>
+ * <li><p>I will shrink my source image to be 22528 pixels wide before building the image pyramid,
+ * and I will set the <code>minZoom</code> parameter to -3 in the {@link bigshot.ImageParameters} when creating
+ * the image. (I will also set <code>wrapX</code> to <code>true</code>.)</p></li>
+ * </ol>
+ *
+ * @augments bigshot.ImageBase
+ */
+bigshot.Image = function (parameters) {
+ bigshot.setupFileSystem (parameters);
+ parameters.merge (parameters.fileSystem.getDescriptor (), false);
+
+ bigshot.ImageBase.call (this, parameters);
+}
+
+bigshot.Image.prototype = {
+ setupLayers : function () {
+ var that = this;
+ this.thisTileCache = new bigshot.ImageTileCache (function () {
+ that.layout ();
+ }, null, this.parameters);
+
+ this.addLayer (
+ new bigshot.TileLayer (this, this.parameters, 0, 0, this.thisTileCache)
+ );
+ }
+};
+
+bigshot.Object.extend (bigshot.Image, bigshot.ImageBase);
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new HTML element layer. The layer must be added to the image using
+ * {@link bigshot.ImageBase#addLayer}.
+ *
+ * @class A layer consisting of a single HTML element that is moved and scaled to cover
+ * the layer.
+ * @example
+ * var image = new bigshot.Image (...);
+ * image.addLayer (
+ * new bigshot.HTMLElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height)
+ * );
+ * @param {bigshot.ImageBase} image the image this hotspot layer will be part of
+ * @param {HTMLElement} element the element to present in this layer
+ * @param {int} width the width, in image pixels (display size at zoom level 0), of the HTML element
+ * @param {int} height the height, in image pixels (display size at zoom level 0), of the HTML element
+ * @augments bigshot.Layer
+ */
+bigshot.HTMLElementLayer = function (image, element, width, height) {
+ this.hotspots = new Array ();
+ this.browser = new bigshot.Browser ();
+ this.image = image;
+ this.container = image.createLayerContainer ();
+ this.parentContainer = image.getContainer ();
+ this.element = element;
+ this.parentContainer.appendChild (element);
+ this.w = width;
+ this.h = height;
+ this.resize (0, 0);
+}
+
+bigshot.HTMLElementLayer.prototype = {
+
+ getContainer : function () {
+ return this.container;
+ },
+
+ resize : function (w, h) {
+ this.container.style.width = this.parentContainer.clientWidth + "px";
+ this.container.style.height = this.parentContainer.clientHeight + "px";
+ },
+
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {
+ var zoomFactor = Math.pow (2, this.image.getZoom ());
+ x0 -= stride * tx0;
+ y0 -= stride * ty0;
+
+ this.element.style.top = y0 + "px";
+ this.element.style.left = x0 + "px";
+ this.element.style.width = (this.w * zoomFactor) + "px";
+ this.element.style.height = (this.h * zoomFactor) + "px";
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ }
+}
+
+bigshot.Object.validate ("bigshot.HTMLElementLayer", bigshot.Layer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new HTML element layer. The layer must be added to the image using
+ * {@link bigshot.ImageBase#addLayer}.
+ *
+ * @class A layer consisting of a single HTML element that is moved and scaled to cover
+ * the layer.
+ * @example
+ * var image = new bigshot.Image (...);
+ * image.addLayer (
+ * new bigshot.HTMLElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height)
+ * );
+ * @param {bigshot.ImageBase} image the image this hotspot layer will be part of
+ * @param {HTMLElement} element the element to present in this layer
+ * @param {int} width the width, in image pixels (display size at zoom level 0), of the HTML element
+ * @param {int} height the height, in image pixels (display size at zoom level 0), of the HTML element
+ * @augments bigshot.Layer
+ */
+bigshot.HTMLDivElementLayer = function (image, element, width, height, wrapX, wrapY) {
+ this.wrapX = wrapX;
+ this.wrapY = wrapY;
+ this.hotspots = new Array ();
+ this.browser = new bigshot.Browser ();
+ this.image = image;
+ this.container = image.createLayerContainer ();
+ this.parentContainer = image.getContainer ();
+ this.element = element;
+ this.parentContainer.appendChild (element);
+ this.w = width;
+ this.h = height;
+ this.resize (0, 0);
+}
+
+bigshot.HTMLDivElementLayer.prototype = {
+
+ getContainer : function () {
+ return this.container;
+ },
+
+ resize : function (w, h) {
+ this.container.style.width = this.parentContainer.clientWidth + "px";
+ this.container.style.height = this.parentContainer.clientHeight + "px";
+ },
+
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {
+ var zoomFactor = Math.pow (2, this.image.getZoom ());
+ x0 -= stride * tx0;
+ y0 -= stride * ty0;
+
+ var imW = (this.w * zoomFactor);
+ var imH = (this.h * zoomFactor);
+
+ this.element.style.backgroundSize = imW + "px " + imH + "px";
+
+ var bposX = "0px";
+ var bposY = "0px";
+
+ if (this.wrapY) {
+ this.element.style.top = "0px";
+ this.element.style.height = (this.parentContainer.clientHeight) + "px";
+ bposY = y0 + "px";
+ } else {
+ this.element.style.top = y0 + "px";
+ this.element.style.height = imH + "px";
+ }
+
+ if (this.wrapX) {
+ this.element.style.left = "0px";
+ this.element.style.width = (this.parentContainer.clientWidth) + "px";
+ bposX = x0 + "px";
+ } else {
+ this.element.style.left = x0 + "px";
+ this.element.style.width = imW + "px";
+ }
+
+ this.element.style.backgroundPosition = bposX + " " + bposY;
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ }
+}
+
+bigshot.Object.validate ("bigshot.HTMLDivElementLayer", bigshot.Layer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Creates a new image viewer. (Note: See {@link bigshot.SimpleImage#dispose} for important information.)
+ *
+ * @example
+ * var bsi = new bigshot.SimpleImage (
+ * new bigshot.ImageParameters ({
+ * basePath : "myimage.jpg",
+ * width : 681,
+ * height : 1024,
+ * container : document.getElementById ("bigshot_div")
+ * }));
+ *
+ * @param {bigshot.ImageParameters} parameters the image parameters. Required fields are: <code>container</code>.
+ * If the <code>imgElement</code> parameter is not given, then <code>basePath</code>, <code>width</code> and <code>height</code> are also required. The
+ * following parameters are not supported and should be left as defaults: <code>fileSystem</code>, <code>fileSystemType</code>,
+ * <code>maxTextureMagnification</code> and <code>tileSize</code>. <code>wrapX</code> and <code>wrapY</code> may only be used if the imgElement is <b>not</b>
+ * set.
+ *
+ * @param {HTMLImageElement} [imgElement] an img element to use. The element should have <code>style.position = "absolute"</code>.
+ * @see bigshot.ImageBase#dispose
+ * @class A zoomable image viewer.
+ * @augments bigshot.ImageBase
+ */
+bigshot.SimpleImage = function (parameters, imgElement) {
+ parameters.merge ({
+ fileSystem : null,
+ fileSystemType : "simple",
+ maxTextureMagnification : 1.0,
+ tileSize : 1024
+ }, true);
+
+ if (imgElement) {
+ parameters.merge ({
+ width : imgElement.width,
+ height : imgElement.height
+ });
+ this.imgElement = imgElement;
+ } else {
+ if (parameters.width == 0 || parameters.height == 0) {
+ throw new Error ("No imgElement and missing width or height in ImageParameters");
+ }
+ }
+ bigshot.setupFileSystem (parameters);
+
+ bigshot.ImageBase.call (this, parameters);
+}
+
+bigshot.SimpleImage.prototype = {
+ setupLayers : function () {
+ if (!this.imgElement) {
+ /*
+ this.imgElement = document.createElement ("img");
+ this.imgElement.src = this.parameters.basePath;
+ this.imgElement.style.position = "absolute";
+ */
+ this.imgElement = document.createElement ("div");
+ this.imgElement.style.backgroundImage = "url('" + this.parameters.basePath + "')";
+ this.imgElement.style.position = "absolute";
+ if (!this.parameters.wrapX && !this.parameters.wrapY) {
+ this.imgElement.style.backgroundRepeat = "no-repeat";
+ } else if (this.parameters.wrapX && !this.parameters.wrapY) {
+ this.imgElement.style.backgroundRepeat = "repeat-x";
+ } else if (!this.parameters.wrapX && this.parameters.wrapY) {
+ this.imgElement.style.backgroundRepeat = "repeat-y";
+ } else if (this.parameters.wrapX && this.parameters.wrapY) {
+ this.imgElement.style.backgroundRepeat = "repeat";
+ }
+ }
+
+ this.addLayer (
+ new bigshot.HTMLDivElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height, this.parameters.wrapX, this.parameters.wrapY)
+ );
+ }
+};
+
+bigshot.Object.extend (bigshot.SimpleImage, bigshot.ImageBase);
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Abstract filesystem definition.
+ *
+ * @class Abstract filesystem definition.
+ */
+bigshot.FileSystem = function () {
+}
+
+bigshot.FileSystem.prototype = {
+ /**
+ * Returns the URL filename for the given filesystem entry.
+ *
+ * @param {String} name the entry name
+ */
+ getFilename : function (name) {},
+
+ /**
+ * Returns the entry filename for the given tile.
+ *
+ * @param {int} tileX the column of the tile
+ * @param {int} tileY the row of the tile
+ * @param {int} zoomLevel the zoom level
+ */
+ getImageFilename : function (tileX, tileY, zoomLevel) {},
+
+ /**
+ * Sets an optional prefix that is prepended, along with a forward
+ * slash ("/"), to all names.
+ *
+ * @param {String} prefix the prefix
+ */
+ setPrefix : function (prefix) {},
+
+ /**
+ * Returns an image descriptor object from the descriptor file.
+ *
+ * @return a descriptor object
+ */
+ getDescriptor : function () {},
+
+ /**
+ * Returns the poster URL filename. For Bigshot images this is
+ * typically the URL corresponding to the entry "poster.jpg",
+ * but for other filesystems it can be different.
+ */
+ getPosterFilename : function () {}
+};
+
+/**
+ * Sets up a filesystem instance in the given parameters object, if none exist.
+ * If the {@link bigshot.ImageParameters#fileSystem} member isn't set, the
+ * {@link bigshot.ImageParameters#fileSystemType} member is used to create a new
+ * {@link bigshot.FileSystem} instance and set it.
+ *
+ * @param {bigshot.ImageParameters or bigshot.VRPanoramaParameters or bigshot.ImageCarouselPanoramaParameters} parameters the parameters object to populate
+ */
+bigshot.setupFileSystem = function (parameters) {
+ if (!parameters.fileSystem) {
+ if (parameters.fileSystemType == "archive") {
+ parameters.fileSystem = new bigshot.ArchiveFileSystem (parameters);
+ } else if (parameters.fileSystemType == "dzi") {
+ parameters.fileSystem = new bigshot.DeepZoomImageFileSystem (parameters);
+ } else if (parameters.fileSystemType == "simple") {
+ parameters.fileSystem = new bigshot.SimpleFileSystem (parameters);
+ } else {
+ parameters.fileSystem = new bigshot.FolderFileSystem (parameters);
+ }
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new instance of a filesystem adapter for the SimpleImage class.
+ *
+ * @class Filesystem adapter for bigshot.SimpleImage. This class is not
+ * supposed to be used outside of the {@link bigshot.SimpleImage} class.
+ * @param {bigshot.ImageParameters} parameters the associated image parameters
+ * @augments bigshot.FileSystem
+ * @see bigshot.SimpleImage
+ */
+bigshot.SimpleFileSystem = function (parameters) {
+ this.parameters = parameters;
+};
+
+
+bigshot.SimpleFileSystem.prototype = {
+ getDescriptor : function () {
+ return {};
+ },
+
+ getPosterFilename : function () {
+ return null;
+ },
+
+ getFilename : function (name) {
+ return null;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ return null;
+ },
+
+ getPrefix : function () {
+ return "";
+ },
+
+ setPrefix : function (prefix) {
+ this.prefix = prefix;
+ }
+}
+
+bigshot.Object.validate ("bigshot.SimpleFileSystem", bigshot.FileSystem);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new instance of a folder-based filesystem adapter.
+ *
+ * @augments bigshot.FileSystem
+ * @class Folder-based filesystem.
+ * @param {bigshot.ImageParameters|bigshot.VRPanoramaParameters} parameters the associated image parameters
+ * @constructor
+ */
+bigshot.FolderFileSystem = function (parameters) {
+ this.prefix = null;
+ this.suffix = "";
+ this.parameters = parameters;
+}
+
+
+bigshot.FolderFileSystem.prototype = {
+ getDescriptor : function () {
+ this.browser = new bigshot.Browser ();
+ var req = this.browser.createXMLHttpRequest ();
+
+ req.open("GET", this.getFilename ("descriptor"), false);
+ req.send(null);
+ var descriptor = {};
+ if(req.status == 200) {
+ var substrings = req.responseText.split (":");
+ for (var i = 0; i < substrings.length; i += 2) {
+ if (substrings[i] == "suffix") {
+ descriptor[substrings[i]] = substrings[i + 1];
+ } else {
+ descriptor[substrings[i]] = parseInt (substrings[i + 1]);
+ }
+ }
+ this.suffix = descriptor.suffix;
+ return descriptor;
+ } else {
+ throw new Error ("Unable to find descriptor.");
+ }
+ },
+
+ getPosterFilename : function () {
+ return this.getFilename ("poster" + this.suffix);
+ },
+
+ setPrefix : function (prefix) {
+ this.prefix = prefix;
+ },
+
+ getPrefix : function () {
+ if (this.prefix) {
+ return this.prefix + "/";
+ } else {
+ return "";
+ }
+ },
+
+ getFilename : function (name) {
+ return this.parameters.basePath + "/" + this.getPrefix () + name;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var key = (-zoomLevel) + "/" + tileX + "_" + tileY + this.suffix;
+ return this.getFilename (key);
+ }
+};
+
+bigshot.Object.validate ("bigshot.FolderFileSystem", bigshot.FileSystem);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new instance of a Deep Zoom Image folder-based filesystem adapter.
+ *
+ * @augments bigshot.FileSystem
+ * @class A Deep Zoom Image filesystem.
+ * @param {bigshot.ImageParameters|bigshot.VRPanoramaParameters} parameters the associated image parameters
+ * @constructor
+ */
+bigshot.DeepZoomImageFileSystem = function (parameters) {
+ this.prefix = "";
+ this.suffix = "";
+
+ this.DZ_NAMESPACE = "http://schemas.microsoft.com/deepzoom/2009";
+ this.fullZoomLevel = 0;
+ this.posterName = "";
+ this.parameters = parameters;
+}
+
+bigshot.DeepZoomImageFileSystem.prototype = {
+ getDescriptor : function () {
+ var descriptor = {};
+
+ var xml = this.parameters.dataLoader.loadXml (this.parameters.basePath + this.prefix + ".xml", false);
+ var image = xml.getElementsByTagName ("Image")[0];
+ var size = xml.getElementsByTagName ("Size")[0];
+ descriptor.width = parseInt (size.getAttribute ("Width"));
+ descriptor.height = parseInt (size.getAttribute ("Height"));
+ descriptor.tileSize = parseInt (image.getAttribute ("TileSize"));
+ descriptor.overlap = parseInt (image.getAttribute ("Overlap"));
+ descriptor.suffix = "." + image.getAttribute ("Format")
+ descriptor.posterSize = descriptor.tileSize;
+
+ this.suffix = descriptor.suffix;
+ this.fullZoomLevel = Math.ceil (Math.log (Math.max (descriptor.width, descriptor.height)) / Math.LN2);
+
+ descriptor.minZoom = -this.fullZoomLevel;
+ var posterZoomLevel = Math.ceil (Math.log (descriptor.tileSize) / Math.LN2);
+ this.posterName = this.getImageFilename (0, 0, posterZoomLevel - this.fullZoomLevel);
+ return descriptor;
+ },
+
+ setPrefix : function (prefix) {
+ this.prefix = prefix;
+ },
+
+ getPosterFilename : function () {
+ return this.posterName;
+ },
+
+ getFilename : function (name) {
+ return this.parameters.basePath + this.prefix + "/" + name;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var dziZoomLevel = this.fullZoomLevel + zoomLevel;
+ var key = dziZoomLevel + "/" + tileX + "_" + tileY + this.suffix;
+ return this.getFilename (key);
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new instance of a <code>.bigshot</code> archive filesystem adapter.
+ *
+ * @class Bigshot archive filesystem.
+ * @param {bigshot.ImageParameters|bigshot.VRPanoramaParameters} parameters the associated image parameters
+ * @augments bigshot.FileSystem
+ * @constructor
+ */
+bigshot.ArchiveFileSystem = function (parameters) {
+ this.indexSize = 0;
+ this.offset = 0;
+ this.index = {};
+ this.prefix = "";
+ this.suffix = "";
+ this.parameters = parameters;
+
+ var browser = new bigshot.Browser ();
+ var req = browser.createXMLHttpRequest ();
+ req.open("GET", this.parameters.basePath + "&start=0&length=24&type=text/plain", false);
+ req.send(null);
+ if(req.status == 200) {
+ if (req.responseText.substring (0, 7) != "BIGSHOT") {
+ alert ("\"" + this.parameters.basePath + "\" is not a valid bigshot file");
+ return;
+ }
+ this.indexSize = parseInt (req.responseText.substring (8), 16);
+ this.offset = this.indexSize + 24;
+
+ req.open("GET", this.parameters.basePath + "&type=text/plain&start=24&length=" + this.indexSize, false);
+ req.send(null);
+ if(req.status == 200) {
+ var substrings = req.responseText.split (":");
+ for (var i = 0; i < substrings.length; i += 3) {
+ this.index[substrings[i]] = {
+ start : parseInt (substrings[i + 1]) + this.offset,
+ length : parseInt (substrings[i + 2])
+ };
+ }
+ } else {
+ alert ("The index of \"" + this.parameters.basePath + "\" could not be loaded: " + req.status);
+ }
+ } else {
+ alert ("The header of \"" + this.parameters.basePath + "\" could not be loaded: " + req.status);
+ }
+};
+
+
+bigshot.ArchiveFileSystem.prototype = {
+ getDescriptor : function () {
+ this.browser = new bigshot.Browser ();
+ var req = this.browser.createXMLHttpRequest ();
+
+ req.open("GET", this.getFilename ("descriptor"), false);
+ req.send(null);
+ var descriptor = {};
+ if(req.status == 200) {
+ var substrings = req.responseText.split (":");
+ for (var i = 0; i < substrings.length; i += 2) {
+ if (substrings[i] == "suffix") {
+ descriptor[substrings[i]] = substrings[i + 1];
+ } else {
+ descriptor[substrings[i]] = parseInt (substrings[i + 1]);
+ }
+ }
+ this.suffix = descriptor.suffix;
+ return descriptor;
+ } else {
+ throw new Error ("Unable to find descriptor.");
+ }
+ },
+
+ getPosterFilename : function () {
+ return this.getFilename ("poster" + this.suffix);
+ },
+
+ getFilename : function (name) {
+ name = this.getPrefix () + name;
+ if (!this.index[name] && console) {
+ console.log ("Can't find " + name);
+ }
+ var f = this.parameters.basePath + "&start=" + this.index[name].start + "&length=" + this.index[name].length;
+ if (name.substring (name.length - 4) == ".jpg") {
+ f = f + "&type=image/jpeg";
+ } else if (name.substring (name.length - 4) == ".png") {
+ f = f + "&type=image/png";
+ } else {
+ f = f + "&type=text/plain";
+ }
+ return f;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var key = (-zoomLevel) + "/" + tileX + "_" + tileY + this.suffix;
+ return this.getFilename (key);
+ },
+
+ getPrefix : function () {
+ if (this.prefix) {
+ return this.prefix + "/";
+ } else {
+ return "";
+ }
+ },
+
+ setPrefix : function (prefix) {
+ this.prefix = prefix;
+ }
+}
+
+bigshot.Object.validate ("bigshot.ArchiveFileSystem", bigshot.FileSystem);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract base class.
+ */
+bigshot.VRTileCache = function () {
+}
+
+bigshot.VRTileCache.prototype = {
+ /**
+ * Returns the texture object for the given tile-x, tile-y and zoom level.
+ * The return type is dependent on the renderer. The WebGL renderer, for example
+ * uses a tile cache that returns WebGL textures, while the CSS3D renderer
+ * returns HTML img or canvas elements.
+ */
+ getTexture : function (tileX, tileY, zoomLevel) {},
+
+ /**
+ * Purges the cache of old entries.
+ *
+ * @type void
+ */
+ purge : function () {},
+
+ /**
+ * Disposes the cache and all its entries.
+ *
+ * @type void
+ */
+ dispose : function () {}
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class A VR tile cache backed by a {@link bigshot.ImageTileCache}.
+ * @augments bigshot.VRTileCache
+ */
+bigshot.ImageVRTileCache = function (onloaded, onCacheInit, parameters) {
+ this.imageTileCache = new bigshot.ImageTileCache (onloaded, onCacheInit, parameters);
+
+ // Keep the imageTileCache from wrapping around.
+ this.imageTileCache.setMaxTiles (999999, 999999);
+}
+
+bigshot.ImageVRTileCache.prototype = {
+ getTexture : function (tileX, tileY, zoomLevel) {
+ var res = this.imageTileCache.getImage (tileX, tileY, zoomLevel);
+ return res;
+ },
+
+ purge : function () {
+ this.imageTileCache.resetUsed ();
+ },
+
+ dispose : function () {
+
+ }
+}
+
+bigshot.Object.validate ("bigshot.ImageVRTileCache", bigshot.VRTileCache);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new cache instance.
+ *
+ * @class Tile texture cache for a {@link bigshot.VRFace}.
+ * @augments bigshot.VRTileCache
+ * @param {function()} onLoaded function that is called whenever a texture tile has been loaded
+ * @param {function()} onCacheInit function that is called when the texture cache is fully initialized
+ * @param {bigshot.VRPanoramaParameters} parameters image parameters
+ * @param {bigshot.WebGL} _webGl WebGL instance to use
+ */
+bigshot.TextureTileCache = function (onLoaded, onCacheInit, parameters, _webGl) {
+ this.parameters = parameters;
+ this.webGl = _webGl;
+
+ /**
+ * Reduced-resolution preview of the full image.
+ * Loaded from the "poster" image created by
+ * MakeImagePyramid
+ *
+ * @private
+ * @type HTMLImageElement
+ */
+ this.fullImage = parameters.dataLoader.loadImage (parameters.fileSystem.getPosterFilename (), onCacheInit);
+
+ /**
+ * Maximum number of WebGL textures in the cache. This is the
+ * "L1" cache.
+ *
+ * @private
+ * @type int
+ */
+ this.maxTextureCacheSize = 512;
+
+ /**
+ * Maximum number of HTMLImageElement images in the cache. This is the
+ * "L2" cache.
+ *
+ * @private
+ * @type int
+ */
+ this.maxImageCacheSize = 2048;
+ this.cachedTextures = {};
+ this.cachedImages = {};
+ this.requestedImages = {};
+ this.lastOnLoadFiredAt = 0;
+ this.imageRequests = 0;
+ this.partialImageSize = parameters.tileSize / 8;
+ this.imageLruMap = new bigshot.LRUMap ();
+ this.textureLruMap = new bigshot.LRUMap ();
+ this.onLoaded = onLoaded;
+ this.browser = new bigshot.Browser ();
+ this.disposed = false;
+}
+
+bigshot.TextureTileCache.prototype = {
+
+ getPartialTexture : function (tileX, tileY, zoomLevel) {
+ if (this.fullImage.complete) {
+ var canvas = document.createElement ("canvas");
+ if (!canvas["width"]) {
+ return null;
+ }
+ canvas.width = this.partialImageSize;
+ canvas.height = this.partialImageSize;
+ var ctx = canvas.getContext ("2d");
+
+ var posterScale = this.parameters.posterSize / Math.max (this.parameters.width, this.parameters.height);
+
+ var posterWidth = Math.floor (posterScale * this.parameters.width);
+ var posterHeight = Math.floor (posterScale * this.parameters.height);
+
+ var tileSizeAtZoom = posterScale * (this.parameters.tileSize - this.parameters.overlap) / Math.pow (2, zoomLevel);
+ var sx = Math.floor (tileSizeAtZoom * tileX);
+ var sy = Math.floor (tileSizeAtZoom * tileY);
+ var sw = Math.floor (tileSizeAtZoom);
+ var sh = Math.floor (tileSizeAtZoom);
+ var dw = this.partialImageSize + 2;
+ var dh = this.partialImageSize + 2;
+
+ if (sx + sw > posterWidth) {
+ sw = posterWidth - sx;
+ dw = this.partialImageSize * (sw / Math.floor (tileSizeAtZoom));
+ }
+ if (sy + sh > posterHeight) {
+ sh = posterHeight - sy;
+ dh = this.partialImageSize * (sh / Math.floor (tileSizeAtZoom));
+ }
+
+ ctx.drawImage (this.fullImage, sx, sy, sw, sh, -1, -1, dw, dh);
+
+ return this.webGl.createImageTextureFromImage (canvas, this.parameters.textureMinFilter, this.parameters.textureMagFilter);
+ } else {
+ return null;
+ }
+ },
+
+ setCachedTexture : function (key, newTexture) {
+ if (this.cachedTextures[key] != null) {
+ this.webGl.deleteTexture (this.cachedTextures[key]);
+ }
+ this.cachedTextures[key] = newTexture;
+ },
+
+ getTexture : function (tileX, tileY, zoomLevel) {
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ this.textureLruMap.access (key);
+ this.imageLruMap.access (key);
+
+ if (this.cachedTextures[key]) {
+ return this.cachedTextures[key];
+ } else if (this.cachedImages[key]) {
+ this.setCachedTexture (key, this.webGl.createImageTextureFromImage (this.cachedImages[key], this.parameters.textureMinFilter, this.parameters.textureMagFilter));
+ return this.cachedTextures[key];
+ } else {
+ this.requestImage (tileX, tileY, zoomLevel);
+ var partial = this.getPartialTexture (tileX, tileY, zoomLevel);
+ if (partial) {
+ this.setCachedTexture (key, partial);
+ }
+ return partial;
+ }
+ },
+
+ requestImage : function (tileX, tileY, zoomLevel) {
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ if (!this.requestedImages[key]) {
+ this.imageRequests++;
+ var that = this;
+ this.parameters.dataLoader.loadImage (this.getImageFilename (tileX, tileY, zoomLevel), function (tile) {
+ if (that.disposed) {
+ return;
+ }
+ that.cachedImages[key] = tile;
+ that.setCachedTexture (key, that.webGl.createImageTextureFromImage (tile, that.parameters.textureMinFilter, that.parameters.textureMagFilter));
+ delete that.requestedImages[key];
+ that.imageRequests--;
+ var now = new Date();
+ if (that.imageRequests == 0 || now.getTime () > (that.lastOnLoadFiredAt + 50)) {
+ that.lastOnLoadFiredAt = now.getTime ();
+ that.onLoaded ();
+ }
+ });
+ this.requestedImages[key] = true;
+ }
+ },
+
+ purge : function () {
+ var that = this;
+ this.purgeCache (this.textureLruMap, this.cachedTextures, this.maxTextureCacheSize, function (leastUsedKey) {
+ that.webGl.deleteTexture (that.cachedTextures[leastUsedKey]);
+ });
+ this.purgeCache (this.imageLruMap, this.cachedImages, this.maxImageCacheSize, function (leastUsedKey) {
+ });
+ },
+
+ purgeCache : function (lruMap, cache, maxCacheSize, onEvict) {
+ for (var i = 0; i < 64; ++i) {
+ if (lruMap.getSize () > maxCacheSize) {
+ var leastUsed = lruMap.leastUsed ();
+ lruMap.remove (leastUsed);
+ if (onEvict) {
+ onEvict (leastUsed);
+ }
+ delete cache[leastUsed];
+ } else {
+ break;
+ }
+ }
+ },
+
+ getImageKey : function (tileX, tileY, zoomLevel) {
+ return "I" + tileX + "_" + tileY + "_" + zoomLevel;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var f = this.parameters.fileSystem.getImageFilename (tileX, tileY, zoomLevel);
+ return f;
+ },
+
+ dispose : function () {
+ this.disposed = true;
+ for (var k in this.cachedTextures) {
+ this.webGl.deleteTexture (this.cachedTextures[k]);
+ }
+ }
+};
+
+
+bigshot.Object.validate ("bigshot.TextureTileCache", bigshot.VRTileCache);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new VR cube face.
+ *
+ * @class a VR cube face. The {@link bigshot.VRPanorama} instance holds
+ * six of these.
+ *
+ * @param {bigshot.VRPanorama} owner the VR panorama this face is part of.
+ * @param {String} key the identifier for the face. "f" is front, "b" is back, "u" is
+ * up, "d" is down, "l" is left and "r" is right.
+ * @param {bigshot.Point3D} topLeft_ the top-left corner of the quad.
+ * @param {number} width_ the length of the sides of the face, expressed in multiples of u and v.
+ * @param {bigshot.Point3D} u basis vector going from the top left corner along the top edge of the face
+ * @param {bigshot.Point3D} v basis vector going from the top left corner along the left edge of the face
+ */
+bigshot.VRFace = function (owner, key, topLeft_, width_, u, v, onLoaded) {
+ var that = this;
+ this.owner = owner;
+ this.key = key;
+ this.topLeft = topLeft_;
+ this.width = width_;
+ this.u = u;
+ this.v = v;
+ this.updated = false;
+ this.parameters = new Object ();
+
+ for (var k in this.owner.getParameters ()) {
+ this.parameters[k] = this.owner.getParameters ()[k];
+ }
+
+ bigshot.setupFileSystem (this.parameters);
+ this.parameters.fileSystem.setPrefix ("face_" + key);
+ this.parameters.merge (this.parameters.fileSystem.getDescriptor (), false);
+
+
+ /**
+ * Texture cache.
+ *
+ * @private
+ */
+ this.tileCache = owner.renderer.createTileCache (function () {
+ that.updated = true;
+ owner.renderUpdated (bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE);
+ }, onLoaded, this.parameters);
+
+ this.fullSize = this.parameters.width;
+ this.overlap = this.parameters.overlap;
+ this.tileSize = this.parameters.tileSize;
+
+ this.minDivisions = 0;
+ var fullZoom = Math.log (this.fullSize - this.overlap) / Math.LN2;
+ var singleTile = Math.log (this.tileSize - this.overlap) / Math.LN2;
+ this.maxDivisions = Math.floor (fullZoom - singleTile);
+ this.maxTesselation = this.parameters.maxTesselation >= 0 ? this.parameters.maxTesselation : this.maxDivisions;
+}
+
+bigshot.VRFace.prototype = {
+ browser : new bigshot.Browser (),
+
+ dispose : function () {
+ this.tileCache.dispose ();
+ },
+
+ /**
+ * Utility function to do a multiply-and-add of a 3d point.
+ *
+ * @private
+ * @param p {bigshot.Point3D} the point to multiply
+ * @param m {number} the number to multiply the elements of p with
+ * @param a {bigshot.Point3D} the point to add
+ * @return p * m + a
+ */
+ pt3dMultAdd : function (p, m, a) {
+ return {
+ x : p.x * m + a.x,
+ y : p.y * m + a.y,
+ z : p.z * m + a.z
+ };
+ },
+
+ /**
+ * Utility function to do an element-wise multiply of a 3d point.
+ *
+ * @private
+ * @param p {bigshot.Point3D} the point to multiply
+ * @param m {number} the number to multiply the elements of p with
+ * @return p * m
+ */
+ pt3dMult : function (p, m) {
+ return {
+ x : p.x * m,
+ y : p.y * m,
+ z : p.z * m
+ };
+ },
+
+ /**
+ * Creates a textured quad.
+ *
+ * @private
+ */
+ generateFace : function (scene, topLeft, width, tx, ty, divisions) {
+ width *= this.tileSize / (this.tileSize - this.overlap);
+ var texture = this.tileCache.getTexture (tx, ty, -this.maxDivisions + divisions);
+ scene.addQuad (this.owner.renderer.createTexturedQuad (
+ topLeft,
+ this.pt3dMult (this.u, width),
+ this.pt3dMult (this.v, width),
+ texture
+ )
+ );
+ },
+
+ VISIBLE_NONE : 0,
+ VISIBLE_SOME : 1,
+ VISIBLE_ALL : 2,
+
+ /**
+ * Tests whether the point is in the axis-aligned rectangle.
+ *
+ * @private
+ * @param point the point
+ * @param min top left corner of the rectangle
+ * @param max bottom right corner of the rectangle
+ */
+ pointInRect : function (point, min, max) {
+ return (point.x >= min.x && point.y >= min.y && point.x < max.x && point.y < max.y);
+ },
+
+ /**
+ * Intersects a quadrilateral with the view frustum.
+ * The test is a simple rectangle intersection of the AABB of
+ * the transformed quad with the viewport.
+ *
+ * @private
+ * @return VISIBLE_NONE, VISIBLE_SOME or VISIBLE_ALL
+ */
+ intersectWithView : function intersectWithView (transformed) {
+ var numNull = 0;
+ var tf = [];
+ var tfl = transformed.length;
+ for (var i = 0; i < tfl; ++i) {
+ if (transformed[i] == null) {
+ numNull++;
+ } else {
+ tf.push (transformed[i]);
+ }
+ }
+ if (numNull == 4) {
+ return this.VISIBLE_NONE;
+ }
+
+ var minX = tf[0].x;
+ var minY = tf[0].y;
+
+ var maxX = minX;
+ var maxY = minY;
+
+ var viewMinX = 0;
+ var viewMinY = 0;
+
+ var viewMaxX = this.viewportWidth;
+ var viewMaxY = this.viewportHeight;
+
+ var pointsInViewport = 0;
+ var tl = tf.length;
+ for (var i = 1; i < tl; ++i) {
+ var tix = tf[i].x;
+ var tiy = tf[i].y;
+
+ minX = minX < tix ? minX : tix;
+ minY = minY < tiy ? minY : tiy;
+
+
+ maxX = maxX > tix ? maxX : tix;
+ maxY = maxY > tiy ? maxY : tiy;
+ }
+
+ var iminX = minX > viewMinX ? minX : viewMinX;
+ var iminY = minY > viewMinY ? minY : viewMinY;
+
+ var imaxX = maxX < viewMaxX ? maxX : viewMaxX;
+ var imaxY = maxY < viewMaxY ? maxY : viewMaxY;
+
+ if (iminX <= imaxX && iminY <= imaxY) {
+ return this.VISIBLE_SOME;
+ }
+
+ return this.VISIBLE_NONE;
+ },
+
+ /**
+ * Quick and dirty computation of the on-screen distance in pixels
+ * between two 2d points. We use the max of the x and y differences.
+ * In case a point is null (that is, it's not on the screen), we
+ * return an arbitrarily high number.
+ *
+ * @private
+ */
+ screenDistance : function screenDistance (p0, p1) {
+ if (p0 == null || p1 == null) {
+ return 0;
+ }
+ return Math.max (Math.abs (p0.x - p1.x), Math.abs (p0.y - p1.y));
+ },
+
+ transformToScreen : function transformToScreen (v) {
+ return this.owner.renderer.transformToScreen (v);
+ },
+
+ /**
+ * Optionally subdivides a quad into fourn new quads, depending on the
+ * position and on-screen size of the quad.
+ *
+ * @private
+ * @param {bigshot.WebGLTexturedQuadScene} scene the scene to add quads to
+ * @param {bigshot.Point3D} topLeft the top left corner of this quad
+ * @param {number} width the sides of the quad, expressed in multiples of u and v
+ * @param {int} divisions the current number of divisions done (increases by one for each
+ * split-in-four).
+ * @param {int} tx the tile column this face is in
+ * @param {int} ty the tile row this face is in
+ */
+ generateSubdivisionFace : function generateSubdivisionFace (scene, topLeft, width, divisions, tx, ty, transformed) {
+ if (!transformed) {
+ transformed = new Array (4);
+ transformed[0] = this.transformToScreen (topLeft);
+ var topRight = this.pt3dMultAdd (this.u, width, topLeft);
+ transformed[1] = this.transformToScreen (topRight);
+
+ var bottomLeft = this.pt3dMultAdd (this.v, width, topLeft);
+ transformed[3] = this.transformToScreen (bottomLeft);
+
+ var bottomRight = this.pt3dMultAdd (this.v, width, topRight);
+ transformed[2] = this.transformToScreen (bottomRight);
+ };
+
+ var numVisible = this.intersectWithView (transformed);
+
+ if (numVisible == this.VISIBLE_NONE) {
+ return;
+ }
+
+ var dmax = 0;
+ for (var i = 0; i < transformed.length; ++i) {
+ var next = (i + 1) % 4;
+ dmax = Math.max (this.screenDistance (transformed[i], transformed[next]), dmax);
+ }
+
+ // Convert the distance to physical pixels
+ dmax *= this.owner.browser.getDevicePixelScale ();
+
+ if (divisions < this.minDivisions
+ ||
+ (
+ (
+ dmax > this.owner.maxTextureMagnification * (this.tileSize - this.overlap)
+ ) && divisions < this.maxDivisions && divisions < this.maxTesselation
+ )
+ ) {
+ var center = this.pt3dMultAdd ({x: this.u.x + this.v.x, y: this.u.y + this.v.y, z: this.u.z + this.v.z }, width / 2, topLeft);
+ var midTop = this.pt3dMultAdd (this.u, width / 2, topLeft);
+ var midLeft = this.pt3dMultAdd (this.v, width / 2, topLeft);
+
+ var tCenter = this.transformToScreen (center);
+ var tMidLeft = this.transformToScreen (midLeft);
+ var tMidTop = this.transformToScreen (midTop);
+ var tMidRight = this.transformToScreen (this.pt3dMultAdd (this.u, width, midLeft));
+ var tMidBottom = this.transformToScreen (this.pt3dMultAdd (this.v, width, midTop));
+
+ this.generateSubdivisionFace (scene, topLeft, width / 2, divisions + 1, tx * 2, ty * 2, [transformed[0], tMidTop, tCenter, tMidLeft]);
+ this.generateSubdivisionFace (scene, midTop, width / 2, divisions + 1, tx * 2 + 1, ty * 2, [tMidTop, transformed[1], tMidRight, tCenter]);
+ this.generateSubdivisionFace (scene, midLeft, width / 2, divisions + 1, tx * 2, ty * 2 + 1, [tMidLeft, tCenter, tMidBottom, transformed[3]]);
+ this.generateSubdivisionFace (scene, center, width / 2, divisions + 1, tx * 2 + 1, ty * 2 + 1, [tCenter, tMidRight, transformed[2], tMidBottom]);
+ } else {
+ this.generateFace (scene, topLeft, width, tx, ty, divisions);
+ }
+ },
+
+ /**
+ * Tests if the face has had any updated texture
+ * notifications from the tile cache.
+ *
+ * @public
+ */
+ isUpdated : function () {
+ return this.updated;
+ },
+
+ /**
+ * Renders this face into a scene.
+ *
+ * @public
+ * @param {bigshot.WebGLTexturedQuadScene} scene the scene to render into
+ */
+ render : function (scene) {
+ this.updated = false;
+ this.viewportWidth = this.owner.renderer.getViewportWidth ();
+ this.viewportHeight = this.owner.renderer.getViewportHeight ();
+ this.generateSubdivisionFace (scene, this.topLeft, this.width, 0, 0, 0);
+ },
+
+ /**
+ * Performs post-render cleanup.
+ */
+ endRender : function () {
+ this.tileCache.purge ();
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class WebGL utility functions.
+ */
+bigshot.WebGLUtil = {
+ /**
+ * Flag indicating whether we want to wrap the WebGL context in a
+ * WebGLDebugUtils.makeDebugContext. Defaults to false.
+ *
+ * @type boolean
+ * @public
+ */
+ debug : false,
+
+ /**
+ * List of context identifiers WebGL may be accessed via.
+ *
+ * @type String[]
+ * @private
+ */
+ contextNames : ["webgl", "experimental-webgl"],
+
+ /**
+ * Utility function for creating a context given a canvas and
+ * a context identifier.
+ * @type WebGLRenderingContext
+ * @private
+ */
+ createContext0 : function (canvas, context) {
+ var gl = this.debug
+ ?
+ WebGLDebugUtils.makeDebugContext(canvas.getContext(context))
+ :
+ canvas.getContext (context);
+ return gl;
+ },
+
+ /**
+ * Creates a WebGL context for the given canvas, if possible.
+ *
+ * @public
+ * @type WebGLRenderingContext
+ * @param {HTMLCanvasElement} canvas the canvas
+ * @return The WebGL context
+ * @throws {Error} If WebGL isn't supported.
+ */
+ createContext : function (canvas) {
+ for (var i = 0; i < this.contextNames.length; ++i) {
+ try {
+ var gl = this.createContext0 (canvas, this.contextNames[i]);
+ if (gl) {
+ return gl;
+ }
+ } catch (e) {
+ }
+ }
+ throw new Error ("Could not initialize WebGL.");
+ },
+
+ /**
+ * Tests whether WebGL is supported.
+ *
+ * @type boolean
+ * @public
+ * @return true If WebGL is supported, false otherwise.
+ */
+ isWebGLSupported : function () {
+ var canvas = document.createElement ("canvas");
+ if (!canvas["width"]) {
+ // Not even canvas support
+ return false;
+ }
+
+ try {
+ this.createContext (canvas);
+ return true;
+ } catch (e) {
+ // No WebGL support
+ return false;
+ }
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new transformation stack, initialized to the identity transform.
+ *
+ * @class A 3D transformation stack.
+ */
+bigshot.TransformStack = function () {
+ /**
+ * The current transform matrix.
+ *
+ * @type Matrix
+ */
+ this.mvMatrix = null;
+
+ /**
+ * The object-to-world transform matrix stack.
+ *
+ * @type Matrix[]
+ */
+ this.mvMatrixStack = [];
+
+ this.reset ();
+}
+
+bigshot.TransformStack.prototype = {
+ /**
+ * Pushes the current world transform onto the stack
+ * and returns a new, identical one.
+ *
+ * @return the new world transform matrix
+ * @param {Matrix} [matrix] the new world transform.
+ * If omitted, the current is used
+ * @type Matrix
+ */
+ push : function (matrix) {
+ if (matrix) {
+ this.mvMatrixStack.push (matrix.dup());
+ this.mvMatrix = matrix.dup();
+ return mvMatrix;
+ } else {
+ this.mvMatrixStack.push (this.mvMatrix.dup());
+ return mvMatrix;
+ }
+ },
+
+ /**
+ * Pops the last-pushed world transform off the stack, thereby restoring it.
+ *
+ * @type Matrix
+ * @return the previously-pushed matrix
+ */
+ pop : function () {
+ if (this.mvMatrixStack.length == 0) {
+ throw new Error ("Invalid popMatrix!");
+ }
+ this.mvMatrix = this.mvMatrixStack.pop();
+ return mvMatrix;
+ },
+
+ /**
+ * Resets the world transform to the identity transform.
+ */
+ reset : function () {
+ this.mvMatrix = Matrix.I(4);
+ },
+
+ /**
+ * Multiplies the current world transform with a matrix.
+ *
+ * @param {Matrix} matrix the matrix to multiply with
+ */
+ multiply : function (matrix) {
+ this.mvMatrix = matrix.x (this.mvMatrix);
+ },
+
+ /**
+ * Adds a translation to the world transform matrix.
+ *
+ * @param {bigshot.Point3D} vector the translation vector
+ */
+ translate : function (vector) {
+ var m = Matrix.Translation($V([vector.x, vector.y, vector.z])).ensure4x4 ();
+ this.multiply (m);
+ },
+
+ /**
+ * Adds a rotation to the world transform matrix.
+ *
+ * @param {number} ang the angle in degrees to rotate
+ * @param {bigshot.Point3D} vector the rotation vector
+ */
+ rotate : function (ang, vector) {
+ var arad = ang * Math.PI / 180.0;
+ var m = Matrix.Rotation(arad, $V([vector.x, vector.y, vector.z])).ensure4x4 ();
+ this.multiply (m);
+ },
+
+ /**
+ * Adds a rotation around the x-axis to the world transform matrix.
+ *
+ * @param {number} ang the angle in degrees to rotate
+ */
+ rotateX : function (ang) {
+ this.rotate (ang, { x : 1, y : 0, z : 0 });
+ },
+
+ /**
+ * Adds a rotation around the y-axis to the world transform matrix.
+ *
+ * @param {number} ang the angle in degrees to rotate
+ */
+ rotateY : function (ang) {
+ this.rotate (ang, { x : 0, y : 1, z : 0 });
+ },
+
+ /**
+ * Adds a rotation around the z-axis to the world transform matrix.
+ *
+ * @param {number} ang the angle in degrees to rotate
+ */
+ rotateZ : function (ang) {
+ this.rotate (ang, { x : 0, y : 0, z : 1 });
+ },
+
+ /**
+ * Multiplies the current matrix with a
+ * perspective transformation matrix.
+ *
+ * @param {number} fovy vertical field of view
+ * @param {number} aspect viewport aspect ratio
+ * @param {number} znear near image plane
+ * @param {number} zfar far image plane
+ */
+ perspective : function (fovy, aspect, znear, zfar) {
+ var m = makePerspective (fovy, aspect, znear, zfar);
+ this.multiply (m);
+ },
+
+ matrix : function () {
+ return this.mvMatrix;
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new WebGL wrapper instance.
+ *
+ * @class WebGL wrapper for common {@link bigshot.VRPanorama} uses.
+ * @param {HTMLCanvasElement} canvas_ the canvas
+ * @see #onresize()
+ */
+bigshot.WebGL = function (canvas_) {
+ /**
+ * The html canvas element we'll be rendering in.
+ *
+ * @type HTMLCanvasElement
+ */
+ this.canvas = canvas_;
+
+ /**
+ * Our WebGL context.
+ *
+ * @type WebGLRenderingContext
+ */
+ this.gl = bigshot.WebGLUtil.createContext (this.canvas);
+
+ /**
+ * The current object-to-world transform matrix.
+ *
+ * @type bigshot.TransformStack
+ */
+ this.mvMatrix = new bigshot.TransformStack ();
+
+ /**
+ * The current perspective transform matrix.
+ *
+ * @type bigshot.TransformStack
+ */
+ this.pMatrix = new bigshot.TransformStack ();
+
+ /**
+ * The current shader program.
+ */
+ this.shaderProgram = null;
+
+ this.onresize ();
+}
+
+bigshot.WebGL.prototype = {
+ /**
+ * Must be called when the canvas element is resized.
+ *
+ * @public
+ */
+ onresize : function () {
+ this.gl.viewportWidth = this.canvas.width;
+ this.gl.viewportHeight = this.canvas.height;
+ },
+
+ /**
+ * Fragment shader. Taken from the "Learning WebGL" lessons:
+ * http://learningwebgl.com/blog/?p=571
+ */
+ fragmentShader :
+ "#ifdef GL_ES\n" +
+ " precision highp float;\n" +
+ "#endif\n" +
+ "\n" +
+ "varying vec2 vTextureCoord;\n" +
+ "\n" +
+ "uniform sampler2D uSampler;\n" +
+ "\n" +
+ "void main(void) {\n" +
+ " gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n" +
+ "}\n",
+
+ /**
+ * Vertex shader. Taken from the "Learning WebGL" lessons:
+ * http://learningwebgl.com/blog/?p=571
+ */
+ vertexShader :
+ "attribute vec3 aVertexPosition;\n" +
+ "attribute vec2 aTextureCoord;\n" +
+ "\n" +
+ "uniform mat4 uMVMatrix;\n" +
+ "uniform mat4 uPMatrix;\n" +
+ "\n" +
+ "varying vec2 vTextureCoord;\n" +
+ "\n" +
+ "void main(void) {\n" +
+ " gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n" +
+ " vTextureCoord = aTextureCoord;\n" +
+ "}",
+
+ /**
+ * Creates a new shader.
+ *
+ * @type WebGLShader
+ * @param {String} source the source code
+ * @param {int} type the shader type, one of WebGLRenderingContext.FRAGMENT_SHADER or
+ * WebGLRenderingContext.VERTEX_SHADER
+ */
+ createShader : function (source, type) {
+ var shader = this.gl.createShader (type);
+ this.gl.shaderSource (shader, source);
+ this.gl.compileShader (shader);
+
+ if (!this.gl.getShaderParameter (shader, this.gl.COMPILE_STATUS)) {
+ alert (this.gl.getShaderInfoLog (shader));
+ return null;
+ }
+
+ return shader;
+ },
+
+ /**
+ * Creates a new fragment shader.
+ *
+ * @type WebGLShader
+ * @param {String} source the source code
+ */
+ createFragmentShader : function (source) {
+ return this.createShader (source, this.gl.FRAGMENT_SHADER);
+ },
+
+ /**
+ * Creates a new vertex shader.
+ *
+ * @type WebGLShader
+ * @param {String} source the source code
+ */
+ createVertexShader : function (source) {
+ return this.createShader (source, this.gl.VERTEX_SHADER);
+ },
+
+ /**
+ * Initializes the shaders.
+ */
+ initShaders : function () {
+ this.shaderProgram = this.gl.createProgram ();
+ this.gl.attachShader (this.shaderProgram, this.createVertexShader (this.vertexShader));
+ this.gl.attachShader (this.shaderProgram, this.createFragmentShader (this.fragmentShader));
+ this.gl.linkProgram (this.shaderProgram);
+
+ if (!this.gl.getProgramParameter (this.shaderProgram, this.gl.LINK_STATUS)) {
+ throw new Error ("Could not initialise shaders");
+ return;
+ }
+
+ this.gl.useProgram (this.shaderProgram);
+
+ this.shaderProgram.vertexPositionAttribute = this.gl.getAttribLocation (this.shaderProgram, "aVertexPosition");
+ this.gl.enableVertexAttribArray (this.shaderProgram.vertexPositionAttribute);
+
+ this.shaderProgram.textureCoordAttribute = this.gl.getAttribLocation (this.shaderProgram, "aTextureCoord");
+ this.gl.enableVertexAttribArray (this.shaderProgram.textureCoordAttribute);
+
+ this.shaderProgram.pMatrixUniform = this.gl.getUniformLocation(this.shaderProgram, "uPMatrix");
+ this.shaderProgram.mvMatrixUniform = this.gl.getUniformLocation(this.shaderProgram, "uMVMatrix");
+ this.shaderProgram.samplerUniform = this.gl.getUniformLocation(this.shaderProgram, "uSampler");
+ },
+
+
+ /**
+ * Sets the matrix parameters ("uniforms", since the variables are declared as uniform) in the shaders.
+ */
+ setMatrixUniforms : function () {
+ this.gl.uniformMatrix4fv (this.shaderProgram.pMatrixUniform, false, new Float32Array(this.pMatrix.matrix().flatten()));
+ this.gl.uniformMatrix4fv (this.shaderProgram.mvMatrixUniform, false, new Float32Array(this.mvMatrix.matrix().flatten()));
+ },
+
+ /**
+ * Creates a texture from an image.
+ *
+ * @param {HTMLImageElement or HTMLCanvasElement} image the image
+ * @type WebGLTexture
+ * @return An initialized texture
+ */
+ createImageTextureFromImage : function (image, minFilter, magFilter) {
+ var texture = this.gl.createTexture();
+ this.handleImageTextureLoaded (this, texture, image, minFilter, magFilter);
+ return texture;
+ },
+
+ /**
+ * Creates a texture from a source url.
+ *
+ * @param {String} source the URL of the image
+ * @return WebGLTexture
+ */
+ createImageTextureFromSource : function (source, minFilter, magFilter) {
+ var image = new Image();
+ var texture = this.gl.createTexture();
+
+ var that = this;
+ image.onload = function () {
+ that.handleImageTextureLoaded (that, texture, image, minFilter, magFilter);
+ }
+
+ image.src = source;
+
+ return texture;
+ },
+
+ /**
+ * Uploads the image data to the texture memory. Called when the texture image
+ * has finished loading.
+ *
+ * @private
+ */
+ handleImageTextureLoaded : function (that, texture, image, minFilter, magFilter) {
+ that.gl.bindTexture (that.gl.TEXTURE_2D, texture);
+ that.gl.texImage2D (that.gl.TEXTURE_2D, 0, that.gl.RGBA, that.gl.RGBA, that.gl.UNSIGNED_BYTE, image);
+ that.gl.texParameteri (that.gl.TEXTURE_2D, that.gl.TEXTURE_MAG_FILTER, magFilter ? magFilter : that.gl.NEAREST);
+ that.gl.texParameteri (that.gl.TEXTURE_2D, that.gl.TEXTURE_MIN_FILTER, minFilter ? minFilter : that.gl.NEAREST);
+ that.gl.texParameteri (that.gl.TEXTURE_2D, that.gl.TEXTURE_WRAP_S, that.gl.CLAMP_TO_EDGE);
+ that.gl.texParameteri (that.gl.TEXTURE_2D, that.gl.TEXTURE_WRAP_T, that.gl.CLAMP_TO_EDGE);
+ if (minFilter == that.gl.NEAREST_MIPMAP_NEAREST
+ || minFilter == that.gl.LINEAR_MIPMAP_NEAREST
+ || minFilter == that.gl.NEAREST_MIPMAP_LINEAR
+ || minFilter == that.gl.LINEAR_MIPMAP_LINEAR) {
+ that.gl.generateMipmap(that.gl.TEXTURE_2D);
+ }
+
+ that.gl.bindTexture (that.gl.TEXTURE_2D, null);
+ },
+
+ deleteTexture : function (texture) {
+ this.gl.deleteTexture (texture);
+ },
+
+ dispose : function () {
+ delete this.canvas;
+ delete this.gl;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract base for 3d rendering system.
+ */
+bigshot.VRRenderer = function () {
+}
+
+bigshot.VRRenderer.prototype = {
+ /**
+ * Creates a new {@link bigshot.VRTileCache}, appropriate for the rendering system.
+ *
+ * @param {function()} onloaded function that is called whenever a texture tile has been loaded
+ * @param {function()} onCacheInit function that is called when the texture cache is fully initialized
+ * @param {bigshot.VRPanoramaParameters} parameters the parameters for the panorama
+ */
+ createTileCache : function (onloaded, onCacheInit, parameters) {},
+
+ /**
+ * Creates a bigshot.TexturedQuadScene.
+ */
+ createTexturedQuadScene : function () {},
+
+ /**
+ * Creates a bigshot.TexturedQuad.
+ *
+ * @param {bigshot.Point3D} p the top-left corner of the quad
+ * @param {bigshot.Point3D} u a vector going along the top edge of the quad
+ * @param {bigshot.Point3D} v a vector going down the left edge of the quad
+ * @param {Object} texture a texture to use for the quad. The texture type may vary among different
+ * VRRenderer implementations. The VRTileCache that is created using the createTileCache method will
+ * supply the correct type.
+ */
+ createTexturedQuad : function (p, u, v, texture) {},
+
+ /**
+ * Returns the viewport width, in pixels.
+ *
+ * @type int
+ */
+ getViewportWidth : function () {},
+
+ /**
+ * Returns the viewport height, in pixels.
+ *
+ * @type int
+ */
+ getViewportHeight : function () {},
+
+ /**
+ * Transforms a vector to world coordinates.
+ *
+ * @param {bigshot.Point3D} v the view-space point to transform
+ */
+ transformToWorld : function (v) {},
+
+ /**
+ * Transforms a world vector to screen coordinates.
+ *
+ * @param {bigshot.Point3D} worldVector the world-space point to transform
+ */
+ transformWorldToScreen : function (worldVector) {},
+
+ /**
+ * Transforms a 3D vector to screen coordinates.
+ *
+ * @param {bigshot.Point3D} vector the vector to transform.
+ * If it is already in homogenous coordinates (4-element array)
+ * the transformation is faster. Otherwise it will be converted.
+ */
+ transformToScreen : function (vector) {},
+
+ /**
+ * Disposes the renderer and associated resources.
+ */
+ dispose : function () {},
+
+ /**
+ * Called to begin a render.
+ *
+ * @param {bigshot.Rotation} rotation the rotation of the viewer
+ * @param {number} fov the vertical field of view, in degrees
+ * @param {bigshot.Point3D} translation the position of the viewer in world space
+ * @param {bigshot.Rotation} rotationOffsets the rotation to apply to the VR cube
+ * before the viewer rotation is applied
+ */
+ beginRender : function (rotation, fov, translation, rotationOffsets) {},
+
+ /**
+ * Called to end a render.
+ */
+ endRender : function () {},
+
+ /**
+ * Called by client code to notify the renderer that the viewport has been resized.
+ */
+ onresize : function () {},
+
+ /**
+ * Resizes the viewport.
+ *
+ * @param {int} w the new width of the viewport, in pixels
+ * @param {int} h the new height of the viewport, in pixels
+ */
+ resize : function (w, h) {},
+
+ /**
+ * Gets the container element for the renderer. This is used
+ * when calling the requestAnimationFrame API.
+ */
+ getElement : function () {}
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract VR renderer base class.
+ */
+bigshot.AbstractVRRenderer = function () {
+}
+
+bigshot.AbstractVRRenderer.prototype = {
+ /**
+ * Transforms a vector to world coordinates.
+ *
+ * @param {bigshot.Point3D} vector the vector to transform
+ */
+ transformToWorld : function transformToWorld (vector) {
+ var world = this.mvMatrix.matrix ().xPoint3Dhom1 (vector);
+
+ return world;
+ },
+
+ /**
+ * Transforms a world vector to screen coordinates.
+ *
+ * @param {bigshot.Point3D} world the world-vector to transform
+ */
+ transformWorldToScreen : function transformWorldToScreen (world) {
+ if (world.z > 0) {
+ return null;
+ }
+
+ var screen = this.pMatrix.matrix ().xPoint3Dhom (world);
+ if (Math.abs (screen.w) < Sylvester.precision) {
+ return null;
+ }
+
+ var sx = screen.x;
+ var sy = screen.y;
+ var sz = screen.z;
+ var vw = this.getViewportWidth ();
+ var vh = this.getViewportHeight ();
+
+ var r = {
+ x: (vw / 2) * sx / sz + vw / 2,
+ y: - (vh / 2) * sy / sz + vh / 2
+ };
+ return r;
+ },
+
+ /**
+ * Transforms a vector to screen coordinates.
+ *
+ * @param {bigshot.Point3D} vector the vector to transform
+ * @return the transformed vector, or null if the vector is nearer than the near-z plane.
+ */
+ transformToScreen : function transformToScreen (vector) {
+ var sel = this.mvpMatrix.xPoint3Dhom (vector);
+
+ if (sel.z < 0) {
+ return null;
+ }
+
+ var sz = sel.w;
+
+ if (Math.abs (sel.w) < Sylvester.precision) {
+ return null;
+ }
+
+ var sx = sel.x;
+ var sy = sel.y;
+ var vw = this.getViewportWidth ();
+ var vh = this.getViewportHeight ();
+
+ var r = {
+ x: (vw / 2) * sx / sz + vw / 2,
+ y: - (vh / 2) * sy / sz + vh / 2
+ };
+
+ return r;
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class CSS 3D Transform-based renderer.
+ * @param {HTMLElement} _container the HTML container element for the render viewport
+ *
+ * @augments bigshot.VRRenderer
+ */
+bigshot.CSS3DVRRenderer = function (_container) {
+ this.container = _container;
+ this.canvasOrigin = document.createElement ("div");
+
+ this.canvasOrigin.style.WebkitTransformOrigin = "0px 0px 0px";
+ this.canvasOrigin.style.WebkitTransformStyle = "preserve-3d";
+ this.canvasOrigin.style.WebkitPerspective= "600px";
+
+ this.canvasOrigin.style.position = "relative";
+ this.canvasOrigin.style.left = "50%";
+ this.canvasOrigin.style.top = "50%";
+
+ this.container.appendChild (this.canvasOrigin);
+
+ this.viewport = document.createElement ("div");
+ this.viewport.style.WebkitTransformOrigin = "0px 0px 0px";
+ this.viewport.style.WebkitTransformStyle = "preserve-3d";
+ this.canvasOrigin.appendChild (this.viewport);
+
+ this.world = document.createElement ("div");
+ this.world.style.WebkitTransformOrigin = "0px 0px 0px";
+ this.world.style.WebkitTransformStyle = "preserve-3d";
+ this.viewport.appendChild (this.world);
+
+ this.browser.removeAllChildren (this.world);
+
+ this.view = null;
+
+ this.mvMatrix = new bigshot.TransformStack ();
+
+ this.yaw = 0;
+ this.pitch = 0;
+ this.fov = 0;
+ this.pMatrix = new bigshot.TransformStack ();
+
+ this.onresize = function () {
+ };
+
+ this.viewportSize = null;
+};
+
+bigshot.CSS3DVRRenderer.prototype = {
+ browser : new bigshot.Browser (),
+
+ dispose : function () {
+
+ },
+
+ createTileCache : function (onloaded, onCacheInit, parameters) {
+ return new bigshot.ImageVRTileCache (onloaded, onCacheInit, parameters);
+ },
+
+ createTexturedQuadScene : function () {
+ return new bigshot.CSS3DTexturedQuadScene (this.world, 128, this.view);
+ },
+
+ createTexturedQuad : function (p, u, v, texture) {
+ return new bigshot.CSS3DTexturedQuad (p, u, v, texture);
+ },
+
+ getElement : function () {
+ return this.container;
+ },
+
+ supportsUpdate : function () {
+ return false;
+ },
+
+ getViewportWidth : function () {
+ if (this.viewportSize) {
+ return this.viewportSize.w;
+ }
+ return this.browser.getElementSize (this.container).w;
+ },
+
+ getViewportHeight : function () {
+ if (this.viewportSize) {
+ return this.viewportSize.h;
+ }
+ return this.browser.getElementSize (this.container).h;
+ },
+
+ onresize : function () {
+ },
+
+ resize : function (w, h) {
+ if (this.container.style.width != "") {
+ this.container.style.width = w + "px";
+ }
+ if (this.container.style.height != "") {
+ this.container.style.height = h + "px";
+ }
+ },
+
+ beginRender : function (rotation, fov, translation, rotationOffsets) {
+ this.viewportSize = this.browser.getElementSize (this.container);
+
+ this.yaw = rotation.y;
+ this.pitch = rotation.p;
+ this.fov = fov;
+
+ var halfFovInRad = 0.5 * fov * Math.PI / 180;
+ var halfHeight = this.getViewportHeight () / 2;
+ var perspectiveDistance = halfHeight / Math.tan (halfFovInRad);
+
+ this.mvMatrix.reset ();
+
+ this.view = translation;
+ this.mvMatrix.translate (this.view);
+
+
+ this.mvMatrix.rotateZ (rotationOffsets.r);
+ this.mvMatrix.rotateX (rotationOffsets.p);
+ this.mvMatrix.rotateY (rotationOffsets.y);
+
+ this.mvMatrix.rotateY (this.yaw);
+ this.mvMatrix.rotateX (this.pitch);
+
+
+ this.pMatrix.reset ();
+ this.pMatrix.perspective (this.fov, this.getViewportWidth () / this.getViewportHeight (), 0.1, 100.0);
+
+ this.mvpMatrix = this.pMatrix.matrix ().multiply (this.mvMatrix.matrix ());
+
+ this.canvasOrigin.style.WebkitPerspective= perspectiveDistance + "px";
+
+ for (var i = this.world.children.length - 1; i >= 0; --i) {
+ this.world.children[i].inWorld = 1;
+ }
+
+ this.world.style.WebkitTransform =
+ "rotate3d(1,0,0," + (-rotation.p) + "deg) " +
+ "rotate3d(0,1,0," + rotation.y + "deg) " +
+ "rotate3d(0,1,0," + (rotationOffsets.y) + "deg) " +
+ "rotate3d(1,0,0," + (-rotationOffsets.p) + "deg) " +
+ "rotate3d(0,0,1," + (-rotationOffsets.r) + "deg) ";
+ this.world.style.WebkitTransformStyle = "preserve-3d";
+ this.world.style.WebKitBackfaceVisibility = "hidden";
+
+ this.viewport.style.WebkitTransform =
+ "translateZ(" + perspectiveDistance + "px)";
+ },
+
+ endRender : function () {
+ for (var i = this.world.children.length - 1; i >= 0; --i) {
+ var child = this.world.children[i];
+ if (!child.inWorld || child.inWorld != 2) {
+ delete child.inWorld;
+ this.world.removeChild (child);
+ }
+ }
+
+ this.viewportSize = null;
+ }
+};
+
+bigshot.Object.extend (bigshot.CSS3DVRRenderer, bigshot.AbstractVRRenderer);
+bigshot.Object.validate ("bigshot.CSS3DVRRenderer", bigshot.VRRenderer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a textured quad object.
+ *
+ * @class An abstraction for textured quads. Used in the
+ * {@link bigshot.CSS3DTexturedQuadScene}.
+ *
+ * @param {bigshot.Point3D} p the top-left corner of the quad
+ * @param {bigshot.Point3D} u vector pointing from p along the top edge of the quad
+ * @param {bigshot.Point3D} v vector pointing from p along the left edge of the quad
+ * @param {HTMLImageElement} the image to use.
+ */
+bigshot.CSS3DTexturedQuad = function (p, u, v, image) {
+ this.p = p;
+ this.u = u;
+ this.v = v;
+ this.image = image;
+}
+
+bigshot.CSS3DTexturedQuad.prototype = {
+ /**
+ * Computes the cross product of two vectors.
+ *
+ * @param {bigshot.Point3D} a the first vector
+ * @param {bigshot.Point3D} b the second vector
+ * @type bigshot.Point3D
+ * @return the cross product
+ */
+ crossProduct : function crossProduct (a, b) {
+ return {
+ x : a.y*b.z-a.z*b.y,
+ y : a.z*b.x-a.x*b.z,
+ z : a.x*b.y-a.y*b.x
+ };
+ },
+
+ /**
+ * Stringifies a vector as the x, y, and z components
+ * separated by commas.
+ *
+ * @param {bigshot.Point3D} u the vector
+ * @type String
+ * @return the stringified vector
+ */
+ vecToStr : function vecToStr (u) {
+ return (u.x) + "," + (u.y) + "," + (u.z);
+ },
+
+ /**
+ * Creates a CSS3D matrix3d transform from
+ * an origin point and two basis vectors
+ *
+ * @param {bigshot.Point3D} tl the top left corner
+ * @param {bigshot.Point3D} u the vector pointing along the top edge
+ * @param {bigshot.Point3D} y the vector pointing down the left edge
+ * @type String
+ * @return the matrix3d statement
+ */
+ quadTransform : function quadTransform (tl, u, v) {
+ var w = this.crossProduct (u, v);
+ var res =
+ "matrix3d(" +
+ this.vecToStr (u) + ",0," +
+ this.vecToStr (v) + ",0," +
+ this.vecToStr (w) + ",0," +
+ this.vecToStr (tl) + ",1)";
+ return res;
+ },
+
+ /**
+ * Computes the norm of a vector.
+ *
+ * @param {bigshot.Point3D} vec the vector
+ */
+ norm : function norm (vec) {
+ return Math.sqrt (vec.x * vec.x + vec.y * vec.y + vec.z * vec.z);
+ },
+
+ /**
+ * Renders the quad.
+ *
+ * @param {HTMLElement} world the world element
+ * @param {number} scale the scale factor to apply to world space to get CSS pixel distances
+ * @param {bigshot.Point3D} view the viewer position in world space
+ */
+ render : function render (world, scale, view) {
+ var s = scale / (this.image.width - 1);
+ var ps = scale * 1.0;
+ var p = this.p;
+ var u = this.u;
+ var v = this.v;
+
+ this.image.style.position = "absolute";
+ if (!this.image.inWorld || this.image.inWorld != 1) {
+ world.appendChild (this.image);
+ }
+ this.image.inWorld = 2;
+ this.image.style.WebkitTransformOrigin = "0px 0px 0px";
+ this.image.style.WebkitTransform =
+ this.quadTransform ({
+ x : (p.x + view.x) * ps,
+ y : (-p.y + view.y) * ps,
+ z : (p.z + view.z) * ps
+ }, {
+ x : u.x * s,
+ y : -u.y * s,
+ z : u.z * s
+ }, {
+ x : v.x * s,
+ y : -v.y * s,
+ z : v.z * s
+ });
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a textured quad scene.
+ *
+ * @param {HTMLElement} world element used as container for
+ * the world coordinate system.
+ * @param {number} scale the scaling factor to use to avoid
+ * numeric errors.
+ * @param {bigshot.Point3D} view the 3d-coordinates of the viewer
+ *
+ * @class A scene consisting of a number of quads, all with
+ * a unique texture. Used by the {@link bigshot.VRPanorama} to render the VR cube.
+ *
+ * @see bigshot.CSS3DTexturedQuad
+ */
+bigshot.CSS3DTexturedQuadScene = function (world, scale, view) {
+ this.quads = new Array ();
+ this.world = world;
+ this.scale = scale;
+ this.view = view;
+}
+
+bigshot.CSS3DTexturedQuadScene.prototype = {
+ /**
+ * Adds a new quad to the scene.
+ *
+ * @param {bigshot.TexturedQuad} quad the quad to add to the scene
+ */
+ addQuad : function (quad) {
+ this.quads.push (quad);
+ },
+
+ /**
+ * Renders all quads.
+ */
+ render : function () {
+ for (var i = 0; i < this.quads.length; ++i) {
+ this.quads[i].render (this.world, this.scale, this.view);
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract base for textured quad scenes.
+ */
+bigshot.TexturedQuadScene = function () {
+}
+
+bigshot.TexturedQuadScene.prototype = {
+ /**
+ * Adds a quad to the scene.
+ */
+ addQuad : function (quad) {},
+
+ /**
+ * Renders the scene.
+ */
+ render : function () {}
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class WebGL renderer.
+ */
+bigshot.WebGLVRRenderer = function (container) {
+ this.container = container;
+
+ this.canvas = document.createElement ("canvas");
+ this.canvas.width = 480;
+ this.canvas.height = 480;
+ this.canvas.style.position = "absolute";
+ this.container.appendChild (this.canvas);
+
+ this.webGl = new bigshot.WebGL (this.canvas);
+ this.webGl.initShaders ();
+ this.webGl.gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ this.webGl.gl.blendFunc (this.webGl.gl.ONE, this.webGl.gl.ZERO);
+ this.webGl.gl.enable (this.webGl.gl.BLEND);
+ this.webGl.gl.disable (this.webGl.gl.DEPTH_TEST);
+ this.webGl.gl.clearDepth (1.0);
+
+ var that = this;
+ this.buffers = new bigshot.TimedWeakReference (function () {
+ return that.setupBuffers ();
+ }, function (heldObject) {
+ that.disposeBuffers (heldObject);
+ }, 1000);
+}
+
+bigshot.WebGLVRRenderer.prototype = {
+ createTileCache : function (onloaded, onCacheInit, parameters) {
+ return new bigshot.TextureTileCache (onloaded, onCacheInit, parameters, this.webGl);
+ },
+
+ createTexturedQuadScene : function () {
+ return new bigshot.WebGLTexturedQuadScene (this.webGl, this.buffers);
+ },
+
+ setupBuffers : function () {
+ var vertexPositionBuffer = this.webGl.gl.createBuffer();
+
+ var textureCoordBuffer = this.webGl.gl.createBuffer();
+ this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER, textureCoordBuffer);
+ var textureCoords = [
+ // Front face
+ 0.0, 0.0,
+ 1.0, 0.0,
+ 1.0, 1.0,
+ 0.0, 1.0
+ ];
+ this.webGl.gl.bufferData (this.webGl.gl.ARRAY_BUFFER, new Float32Array (textureCoords), this.webGl.gl.STATIC_DRAW);
+
+ var vertexIndexBuffer = this.webGl.gl.createBuffer();
+ this.webGl.gl.bindBuffer(this.webGl.gl.ELEMENT_ARRAY_BUFFER, vertexIndexBuffer);
+ var vertexIndexes = [
+ 0, 2, 1,
+ 0, 3, 2
+ ];
+ this.webGl.gl.bufferData(this.webGl.gl.ELEMENT_ARRAY_BUFFER, new Uint16Array (vertexIndexes), this.webGl.gl.STATIC_DRAW);
+
+ this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER, textureCoordBuffer);
+ this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.textureCoordAttribute, 2, this.webGl.gl.FLOAT, false, 0, 0);
+
+ this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER, vertexPositionBuffer);
+ this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.vertexPositionAttribute, 3, this.webGl.gl.FLOAT, false, 0, 0);
+
+ return {
+ vertexPositionBuffer : vertexPositionBuffer,
+ textureCoordBuffer : textureCoordBuffer,
+ vertexIndexBuffer : vertexIndexBuffer
+ };
+ },
+
+ dispose : function () {
+ this.buffers.dispose ();
+ this.container.removeChild (this.canvas);
+ delete this.canvas;
+ this.webGl.dispose ();
+ delete this.webGl;
+ },
+
+ disposeBuffers : function (buffers) {
+ this.webGl.gl.deleteBuffer (buffers.vertexPositionBuffer);
+ this.webGl.gl.deleteBuffer (buffers.vertexIndexBuffer);
+ this.webGl.gl.deleteBuffer (buffers.textureCoordBuffer);
+ },
+
+ getElement : function () {
+ return this.canvas;
+ },
+
+ supportsUpdate : function () {
+ return false;
+ },
+
+ createTexturedQuad : function (p, u, v, texture) {
+ return new bigshot.WebGLTexturedQuad (p, u, v, texture);
+ },
+
+ getViewportWidth : function () {
+ return this.webGl.gl.viewportWidth;
+ },
+
+ getViewportHeight : function () {
+ return this.webGl.gl.viewportHeight;
+ },
+
+ beginRender : function (rotation, fov, translation, rotationOffsets) {
+ this.webGl.gl.viewport (0, 0, this.webGl.gl.viewportWidth, this.webGl.gl.viewportHeight);
+
+ this.webGl.pMatrix.reset ();
+ this.webGl.pMatrix.perspective (fov, this.webGl.gl.viewportWidth / this.webGl.gl.viewportHeight, 0.1, 100.0);
+
+ this.webGl.mvMatrix.reset ();
+ this.webGl.mvMatrix.translate (translation);
+ this.webGl.mvMatrix.rotateZ (rotationOffsets.r);
+ this.webGl.mvMatrix.rotateX (rotationOffsets.p);
+ this.webGl.mvMatrix.rotateY (rotationOffsets.y);
+ this.webGl.mvMatrix.rotateY (rotation.y);
+ this.webGl.mvMatrix.rotateX (rotation.p);
+
+ this.mvMatrix = this.webGl.mvMatrix;
+ this.pMatrix = this.webGl.pMatrix;
+ this.mvpMatrix = this.pMatrix.matrix ().multiply (this.mvMatrix.matrix ());
+ },
+
+ endRender : function () {
+
+ },
+
+ resize : function (w, h) {
+ this.canvas.width = w;
+ this.canvas.height = h;
+ if (this.container.style.width != "") {
+ this.container.style.width = w + "px";
+ }
+ if (this.container.style.height != "") {
+ this.container.style.height = h + "px";
+ }
+ },
+
+ onresize : function () {
+ this.webGl.onresize ();
+ }
+}
+
+bigshot.Object.extend (bigshot.WebGLVRRenderer, bigshot.AbstractVRRenderer);
+bigshot.Object.validate ("bigshot.WebGLVRRenderer", bigshot.VRRenderer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract base for textured quads.
+ */
+bigshot.TexturedQuad = function () {
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a textured quad object.
+ *
+ * @class An abstraction for textured quads. Used in the
+ * {@link bigshot.WebGLTexturedQuadScene}.
+ *
+ * @param {bigshot.Point3D} p the top-left corner of the quad
+ * @param {bigshot.Point3D} u vector pointing from p along the top edge of the quad
+ * @param {bigshot.Point3D} v vector pointing from p along the left edge of the quad
+ * @param {WebGLTexture} the texture to use.
+ */
+bigshot.WebGLTexturedQuad = function (p, u, v, texture) {
+ this.p = p;
+ this.u = u;
+ this.v = v;
+ this.texture = texture;
+}
+
+bigshot.WebGLTexturedQuad.prototype = {
+
+ /**
+ * Renders the quad using the given {@link bigshot.WebGL} instance.
+ * Currently creates, fills, draws with and then deletes three buffers -
+ * not very efficient, but works.
+ *
+ * @param {bigshot.WebGL} webGl the WebGL wrapper instance to use for rendering.
+ */
+ render : function (webGl, vertexPositionBuffer, textureCoordBuffer, vertexIndexBuffer) {
+ webGl.gl.bindBuffer(webGl.gl.ARRAY_BUFFER, vertexPositionBuffer);
+ var vertices = [
+ this.p.x, this.p.y, this.p.z,
+ this.p.x + this.u.x, this.p.y + this.u.y, this.p.z + this.u.z,
+ this.p.x + this.u.x + this.v.x, this.p.y + this.u.y + this.v.y, this.p.z + this.u.z + this.v.z,
+ this.p.x + this.v.x, this.p.y + this.v.y, this.p.z + this.v.z
+ ];
+ webGl.gl.bufferData(webGl.gl.ARRAY_BUFFER, new Float32Array (vertices), webGl.gl.STATIC_DRAW);
+
+ webGl.gl.activeTexture(webGl.gl.TEXTURE0);
+ webGl.gl.bindTexture(webGl.gl.TEXTURE_2D, this.texture);
+ webGl.gl.uniform1i(webGl.shaderProgram.samplerUniform, 0);
+
+ webGl.gl.bindBuffer(webGl.gl.ELEMENT_ARRAY_BUFFER, vertexIndexBuffer);
+ webGl.gl.drawElements(webGl.gl.TRIANGLES, 6, webGl.gl.UNSIGNED_SHORT, 0);
+
+ webGl.gl.bindTexture(webGl.gl.TEXTURE_2D, null);
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a textured quad scene.
+ *
+ * @param {bigshot.WebGL} webGl the webGl instance to use for rendering.
+ *
+ * @class A "scene" consisting of a number of quads, all with
+ * a unique texture. Used by the {@link bigshot.VRPanorama} to render the VR cube.
+ *
+ * @see bigshot.WebGLTexturedQuad
+ */
+bigshot.WebGLTexturedQuadScene = function (webGl, buffers) {
+ this.quads = new Array ();
+ this.webGl = webGl;
+ this.buffers = buffers;
+}
+
+bigshot.WebGLTexturedQuadScene.prototype = {
+ /**
+ * Adds a new quad to the scene.
+ */
+ addQuad : function (quad) {
+ this.quads.push (quad);
+ },
+
+ /**
+ * Renders all quads.
+ */
+ render : function () {
+ var b = this.buffers.get ();
+ var vertexPositionBuffer = b.vertexPositionBuffer;
+ var textureCoordBuffer = b.textureCoordBuffer;
+ var vertexIndexBuffer = b.vertexIndexBuffer;
+
+ this.webGl.setMatrixUniforms();
+
+ for (var i = 0; i < this.quads.length; ++i) {
+ this.quads[i].render (this.webGl, vertexPositionBuffer, textureCoordBuffer, vertexIndexBuffer);
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new VR panorama parameter object and populates it with default values for
+ * all values not explicitly given.
+ *
+ * @class VRPanoramaParameters parameter object.
+ * You need not set any fields that can be read from the image descriptor that
+ * MakeImagePyramid creates. See the {@link bigshot.VRPanorama}
+ * documentation for required parameters.
+ *
+ * <p>Usage:
+ *
+ * @example
+ * var bvr = new bigshot.VRPanorama (
+ * new bigshot.VRPanoramaParameters ({
+ * basePath : "/bigshot.php?file=myvr.bigshot",
+ * fileSystemType : "archive",
+ * container : document.getElementById ("bigshot_canvas")
+ * }));
+ * @param values named parameter map, see the fields below for parameter names and types.
+ * @see bigshot.VRPanorama
+ */
+bigshot.VRPanoramaParameters = function (values) {
+ /**
+ * Size of low resolution preview image along the longest image
+ * dimension. The preview is assumed to have the same aspect
+ * ratio as the full image (specified by width and height).
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ * @public
+ */
+ this.posterSize = 0;
+
+ /**
+ * Url for the image tile to show while the tile is loading and no
+ * low-resolution preview is available.
+ *
+ * @default <code>null</code>, which results in an all-black image
+ * @type String
+ * @public
+ */
+ this.emptyImage = null;
+
+ /**
+ * Suffix to append to the tile filenames. Typically <code>".jpg"</code> or
+ * <code>".png"</code>.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type String
+ */
+ this.suffix = null;
+
+ /**
+ * The width of the full image; in pixels.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ */
+ this.width = 0;
+
+ /**
+ * The height of the full image; in pixels.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ */
+ this.height = 0;
+
+ /**
+ * For {@link bigshot.VRPanorama}, the {@code div} to render into.
+ *
+ * @type HTMLDivElement
+ */
+ this.container = null;
+
+ /**
+ * The maximum number of times to split a cube face into four quads.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.maxTesselation = -1;
+
+ /**
+ * Size of one tile in pixels.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.tileSize = 0;
+
+ /**
+ * Tile overlap. Not implemented.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.overlap = 0;
+
+ /**
+ * Base path for the image. This is filesystem dependent; but for the two most common cases
+ * the following should be set
+ *
+ * <ul>
+ * <li><b>archive</b>= The basePath is <code>"&lt;path&gt;/bigshot.php?file=&lt;path-to-bigshot-archive-relative-to-bigshot.php&gt;"</code>;
+ * for example; <code>"/bigshot.php?file=images/bigshot-sample.bigshot"</code>.
+ * <li><b>folder</b>= The basePath is <code>"&lt;path-to-image-folder&gt;"</code>;
+ * for example; <code>"/images/bigshot-sample"</code>.
+ * </ul>
+ *
+ * @type String
+ */
+ this.basePath = null;
+
+ /**
+ * The file system type. Used to create a filesystem instance unless
+ * the fileSystem field is set. Possible values are <code>"archive"</code>,
+ * <code>"folder"</code> or <code>"dzi"</code>.
+ *
+ * @type String
+ * @default "folder"
+ */
+ this.fileSystemType = "folder";
+
+ /**
+ * A reference to a filesystem implementation. If set; it overrides the
+ * fileSystemType field.
+ *
+ * @default set depending on value of bigshot.VRPanoramaParameters#fileSystemType
+ * @type bigshot.FileSystem
+ */
+ this.fileSystem = null;
+
+ /**
+ * Object used to load data files.
+ *
+ * @default bigshot.DefaultDataLoader
+ * @type bigshot.DataLoader
+ */
+ this.dataLoader = new bigshot.DefaultDataLoader ();
+
+ /**
+ * The maximum magnification for the texture tiles making up the VR cube.
+ * Used for level-of-detail tesselation.
+ * A value of 1.0 means that textures will never be stretched (one texture pixel will
+ * always be at most one screen pixel), unless there is no more detailed texture available.
+ * A value of 2.0 means that textures may be stretched at most 2x (one texture pixel
+ * will always be at most 2x2 screen pixels)
+ * The bigger the value, the less texture data is required, but quality suffers.
+ *
+ * @type number
+ * @default 1.0
+ */
+ this.maxTextureMagnification = 1.0;
+
+ /**
+ * The WebGL texture filter to use for magnifying textures.
+ * Possible values are all values valid for <code>TEXTURE_MAG_FILTER</code>.
+ * <code>null</code> means <code>NEAREST</code>.
+ *
+ * @default null / NEAREST.
+ */
+ this.textureMagFilter = null;
+
+ /**
+ * The WebGL texture filter to use for supersampling (minifying) textures.
+ * Possible values are all values valid for <code>TEXTURE_MIN_FILTER</code>.
+ * <code>null</code> means <code>NEAREST</code>.
+ *
+ * @default null / NEAREST.
+ */
+ this.textureMinFilter = null;
+
+ /**
+ * Minimum vertical field of view in degrees.
+ *
+ * @default 2.0
+ * @type number
+ */
+ this.minFov = 2.0;
+
+ /**
+ * Maximum vertical field of view in degrees.
+ *
+ * @default 90.0
+ * @type number
+ */
+ this.maxFov = 90;
+
+ /**
+ * Minimum pitch in degrees.
+ *
+ * @default -90
+ * @type number
+ */
+ this.minPitch = -90;
+
+ /**
+ * Maximum pitch in degrees.
+ *
+ * @default 90.0
+ * @type number
+ */
+ this.maxPitch = 90;
+
+ /**
+ * Minimum yaw in degrees. The number is interpreted modulo 360.
+ * The default value, -360, is just to make sure that we won't accidentally
+ * trip it. If the number is set to something in the interval 0-360,
+ * the autoRotate function will pan back and forth.
+ *
+ * @default -360
+ * @type number
+ */
+ this.minYaw = -360;
+
+ /**
+ * Maximum yaw in degrees. The number is interpreted modulo 360.
+ * The default value, 720, is just to make sure that we won't accidentally
+ * trip it. If the number is set to something in the interval 0-360,
+ * the autoRotate function will pan back and forth.
+ *
+ * @default 720.0
+ * @type number
+ */
+ this.maxYaw = 720;
+
+ /**
+ * Transform offset for yaw.
+ * @default 0.0
+ * @type number
+ */
+ this.yawOffset = 0.0;
+
+ /**
+ * Transform offset for pitch.
+ * @default 0.0
+ * @type number
+ */
+ this.pitchOffset = 0.0;
+
+ /**
+ * Transform offset for roll.
+ * @default 0.0
+ * @type number
+ */
+ this.rollOffset = 0.0;
+
+ /**
+ * Function to call when all six cube faces have loaded the base texture level
+ * and can be rendered.
+ *
+ * @type function()
+ * @default null
+ */
+ this.onload = null;
+
+ /**
+ * The rendering back end to use.
+ * Values are "css" and "webgl".
+ *
+ * @type String
+ * @default null
+ */
+ this.renderer = null;
+
+ /**
+ * Controls whether the panorama can be "flung" by quickly dragging and releasing.
+ *
+ * @type boolean
+ * @default true
+ */
+ this.fling = true;
+
+ /**
+ * Controls the decay of the "flinging" animation. The fling animation decays
+ * as 2^(-flingScale * t) where t is the time in milliseconds since the animation started.
+ * For the animation to decay to half-speed in X seconds,
+ * flingScale should then be set to 1 / (X*1000).
+ *
+ * @type float
+ * @default 0.004
+ */
+ this.flingScale = 0.004;
+
+ if (values) {
+ for (var k in values) {
+ this[k] = values[k];
+ }
+ }
+
+ this.merge = function (values, overwrite) {
+ for (var k in values) {
+ if (overwrite || !this[k]) {
+ this[k] = values[k];
+ }
+ }
+ }
+ return this;
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new VR panorama in a canvas. <b>Requires WebGL or CSS3D support.</b>
+ * (Note: See {@link bigshot.VRPanorama#dispose} for important information.)
+ *
+ * <h3 id="creating-a-cubemap">Creating a Cube Map</h3>
+ *
+ * <p>The panorama consists of six image pyramids, one for each face of the VR cube.
+ * Due to restrictions in WebGL, each texture tile must have a power-of-two (POT) size -
+ * that is, 2, 4, ..., 128, 256, etc. Furthermore, due to the way the faces are tesselated
+ * the largest image must consist of POT x POT tiles. The final restriction is that the
+ * tiles must overlap for good seamless results.
+ *
+ * <p>The MakeImagePyramid has some sensible defaults built-in. If you just use the
+ * command line:
+ *
+ * <code><pre>
+ * java -jar bigshot.jar input.jpg temp/dzi \
+ * --preset dzi-cubemap \
+ * --format folders
+ * </pre></code>
+ *
+ * <p>You will get 2034 pixels per face, and a tile size of 256 pixels with 2 pixels
+ * overlap. If you don't like that, you can use the <code>overlap</code>, <code>face-size</code>
+ * and <code>tile-size</code> parameters. Let's take these one by one:
+ *
+ * <ul>
+ * <li><p><code>overlap</code>: Overlap defines how much tiles should overlap, just to avoid
+ * seams in the rendered results caused by finite numeric precision. The default is <b>2</b>, which
+ * I've found works great for me.</p></li>
+ * <li><p><code>tile-size</code>: First you need to decide what POT size the output should be.
+ * Then subtract the overlap value. For example, if you set overlap to 1, <code>tile-size</code>
+ * could be 127, 255, 511, or any 2<sup>n</sup>-1 value.</p></li>
+ * <li><p><code>face-size</code>: Finally, we decide on a size for the full cube face. This should be
+ * tile-size * 2<sup>n</sup>. Let's say we set n=3, which makes each face 8x8 tiles at the most zoomed-in
+ * level. For a tile-size of 255, then, face-size is 255*2<sup>3</sup> = 255*8 = <b>2040</b>.</p></li>
+ * </ul>
+ *
+ * <p>A command line for the hypothetical scenario above would be:
+ *
+ * <code><pre>
+ * java -jar bigshot.jar input.jpg temp/dzi \
+ * --preset dzi-cubemap \
+ * --overlap 1 \
+ * --tile-size 255 \
+ * --face-size 2040 \
+ * --format folders
+ * </pre></code>
+ *
+ * <p>If your tile size numbers don't add up, you'll get a warning like:
+ *
+ * <code><pre>
+ * WARNING: Resulting image tile size (tile-size + overlap) is not a power of two: 255
+ * </pre></code>
+ *
+ * <p>If your face size don't add up, you'll get another warning:
+ *
+ * <code><pre>
+ * WARNING: face-size is not an even multiple of tile-size: 2040 % 254 != 0
+ * </pre></code>
+ *
+ * <h3 id="integration-with-saladoplayer">Integration With SaladoPlayer</h3>
+ *
+ * <p><a href="http://panozona.com/wiki/">SaladoPlayer</a> is a cool
+ * Flash-based VR panorama viewer that can display Deep Zoom Images.
+ * It can be used as a fallback for Bigshot for browsers that don't
+ * support WebGL.
+ *
+ * <p>Since Bigshot can use a Deep Zoom Image (DZI) via a {@link bigshot.DeepZoomImageFileSystem}
+ * adapter, the common file format is DZI. There are two cases: The first is
+ * when the DZI is served up as a folder structure, the second when
+ * we pack the DZI into a Bigshot archive and serve it using bigshot.php.
+ *
+ * <h4>Serving DZI as Folders</h4>
+ *
+ * <p>This is an easy one. First, we generate the required DZIs:
+ *
+ * <code><pre>
+ * java -jar bigshot.jar input.jpg temp/dzi \
+ * --preset dzi-cubemap \
+ * --format folders
+ * </pre></code>
+ *
+ * <p>We'll assume that we have the six DZI folders in "temp/dzi", and that
+ * they have "face_" as a common prefix (which is what Bigshot's MakeImagePyramid
+ * outputs). So we have, for example, "temp/dzi/face_f.xml" and the tiles for face_f
+ * in "temp/dzi/face_f/". Set up Bigshot like this:
+ *
+ * <code><pre>
+ * bvr = new bigshot.VRPanorama (
+ * new bigshot.VRPanoramaParameters ({
+ * container : document.getElementById ("canvas"),
+ * basePath : "temp/dzi",
+ * fileSystemType : "dzi"
+ * }));
+ * </pre></code>
+ *
+ * <p>SaladoPlayer uses an XML config file, which in this case will
+ * look something like this:
+ *
+ * <code><pre>
+ * &lt;SaladoPlayer>
+ * &lt;global debug="false" firstPanorama="pano"/>
+ * &lt;panoramas>
+ * &lt;panorama id="pano" path="temp/dzi/face_f.xml"/>
+ * &lt;/panoramas>
+ * &lt;/SaladoPlayer>
+ * </pre></code>
+ *
+ * <h4>Serving DZI as Archive</h4>
+ *
+ * <p>This one is a bit more difficult. First we create a DZI as a bigshot archive:
+ *
+ * <code><pre>
+ * java -jar bigshot.jar input.jpg temp/dzi.bigshot \
+ * --preset dzi-cubemap \
+ * --format archive
+ * </pre></code>
+ *
+ * <p>We'll assume that we have our Bigshot archive at
+ * "temp/dzi.bigshot". For this we will use the "entry" parameter of bigshot.php
+ * to serve up the right files:
+ *
+ * <code><pre>
+ * bvr = new bigshot.VRPanorama (
+ * new bigshot.VRPanoramaParameters ({
+ * container : document.getElementById ("canvas"),
+ * basePath : "/bigshot.php?file=temp/dzi.bigshot&entry=",
+ * fileSystemType : "dzi"
+ * }));
+ * </pre></code>
+ *
+ * <p>SaladoPlayer uses an XML config file, which in this case will
+ * look something like this:
+ *
+ * <code><pre>
+ * &lt;SaladoPlayer>
+ * &lt;global debug="false" firstPanorama="pano"/>
+ * &lt;panoramas>
+ * &lt;panorama id="pano" path="/bigshot.php?file=dzi.bigshot&amp;amp;entry=face_f.xml"/>
+ * &lt;/panoramas>
+ * &lt;/SaladoPlayer>
+ * </pre></code>
+ *
+ * <h3>Usage example:</h3>
+ * @example
+ * var bvr = new bigshot.VRPanorama (
+ * new bigshot.VRPanoramaParameters ({
+ * basePath : "/bigshot.php?file=myvr.bigshot",
+ * fileSystemType : "archive",
+ * container : document.getElementById ("bigshot_canvas")
+ * }));
+ * @class A cube-map VR panorama.
+ * @extends bigshot.EventDispatcher
+ *
+ * @param {bigshot.VRPanoramaParameters} parameters the panorama parameters.
+ *
+ * @see bigshot.VRPanoramaParameters
+ */
+bigshot.VRPanorama = function (parameters) {
+ bigshot.EventDispatcher.call (this);
+
+ var that = this;
+
+ this.parameters = parameters;
+ this.maxTextureMagnification = parameters.maxTextureMagnification;
+ this.container = parameters.container;
+ this.browser = new bigshot.Browser ();
+ this.dragStart = null;
+ this.dragDistance = 0;
+ this.hotspots = [];
+ this.disposed = false;
+
+ this.transformOffsets = {
+ y : parameters.yawOffset,
+ p : parameters.pitchOffset,
+ r : parameters.rollOffset
+ };
+
+ /**
+ * Current camera state.
+ * @private
+ */
+ this.state = {
+ rotation : {
+ /**
+ * Pitch in degrees.
+ * @type float
+ * @private
+ */
+ p : 0.0,
+
+ /**
+ * Yaw in degrees.
+ * @type float
+ * @private
+ */
+ y : 0.0,
+
+ r : 0
+ },
+
+ /**
+ * Field of view (vertical) in degrees.
+ * @type float
+ * @private
+ */
+ fov : 45,
+
+ translation : {
+ /**
+ * Translation along X-axis.
+ * @private
+ * @type float
+ */
+ x : 0.0,
+
+ /**
+ * Translation along Y-axis.
+ * @private
+ * @type float
+ */
+ y : 0.0,
+
+ /**
+ * Translation along Z-axis.
+ * @private
+ * @type float
+ */
+ z : 0.0
+ }
+ };
+
+ /**
+ * Renderer wrapper.
+ * @private
+ * @type bigshot.VRRenderer
+ */
+ this.renderer = null;
+ if (this.parameters.renderer) {
+ if (this.parameters.renderer == "css") {
+ this.renderer = new bigshot.CSS3DVRRenderer (this.container);
+ } else if (this.parameters.renderer == "webgl") {
+ this.renderer = new bigshot.WebGLVRRenderer (this.container)
+ } else {
+ throw new Error ("Unknown renderer: " + this.parameters.renderer);
+ }
+ } else {
+ this.renderer =
+ bigshot.WebGLUtil.isWebGLSupported () ?
+ new bigshot.WebGLVRRenderer (this.container)
+ :
+ new bigshot.CSS3DVRRenderer (this.container);
+ }
+
+ /**
+ * List of render listeners to call at the start and end of each render.
+ *
+ * @private
+ */
+ this.renderListeners = new Array ();
+
+ this.renderables = new Array ();
+
+ /**
+ * Current value of the idle counter.
+ *
+ * @private
+ */
+ this.idleCounter = 0;
+
+ /**
+ * Maximum value of the idle counter before any idle events start,
+ * such as autorotation.
+ *
+ * @private
+ */
+ this.maxIdleCounter = -1;
+
+
+ /**
+ * Integer acting as a "permit". When the smoothRotate function
+ * is called, the current value is incremented and saved. If the number changes
+ * that particular call to smoothRotate stops. This way we avoid
+ * having multiple smoothRotate rotations going in parallel.
+ * @private
+ * @type int
+ */
+ this.smoothrotatePermit = 0;
+
+ /**
+ * Helper function to consume events.
+ * @private
+ */
+ var consumeEvent = function (event) {
+ if (event.preventDefault) {
+ event.preventDefault ();
+ }
+ return false;
+ };
+
+ /**
+ * Full screen handler.
+ *
+ * @private
+ */
+ this.fullScreenHandler = null;
+
+ this.renderAsapPermitTaken = false;
+
+ /**
+ * An element to use as reference when resizing the canvas element.
+ * If non-null, any onresize() calls will result in the canvas being
+ * resized to the size of this element.
+ *
+ * @private
+ */
+ this.sizeContainer = null;
+
+ /**
+ * The six cube faces.
+ *
+ * @type bigshot.VRFace[]
+ * @private
+ */
+ var facesInit = {
+ facesLeft : 6,
+ faceLoaded : function () {
+ this.facesLeft--;
+ if (this.facesLeft == 0) {
+ if (that.parameters.onload) {
+ that.parameters.onload ();
+ }
+ }
+ }
+ };
+ var onFaceLoad = function () {
+ facesInit.faceLoaded ()
+ };
+
+ this.vrFaces = new Array ();
+ this.vrFaces[0] = new bigshot.VRFace (this, "f", {x:-1, y:1, z:-1}, 2.0, {x:1, y:0, z:0}, {x:0, y:-1, z:0}, onFaceLoad);
+ this.vrFaces[1] = new bigshot.VRFace (this, "b", {x:1, y:1, z:1}, 2.0, {x:-1, y:0, z:0}, {x:0, y:-1, z:0}, onFaceLoad);
+ this.vrFaces[2] = new bigshot.VRFace (this, "l", {x:-1, y:1, z:1}, 2.0, {x:0, y:0, z:-1}, {x:0, y:-1, z:0}, onFaceLoad);
+ this.vrFaces[3] = new bigshot.VRFace (this, "r", {x:1, y:1, z:-1}, 2.0, {x:0, y:0, z:1}, {x:0, y:-1, z:0}, onFaceLoad);
+ this.vrFaces[4] = new bigshot.VRFace (this, "u", {x:-1, y:1, z:1}, 2.0, {x:1, y:0, z:0}, {x:0, y:0, z:-1}, onFaceLoad);
+ this.vrFaces[5] = new bigshot.VRFace (this, "d", {x:-1, y:-1, z:-1}, 2.0, {x:1, y:0, z:0}, {x:0, y:0, z:1}, onFaceLoad);
+
+ /**
+ * Helper function to translate touch events to mouse-like events.
+ * @private
+ */
+ var translateEvent = function (event) {
+ if (event.clientX) {
+ return event;
+ } else {
+ return {
+ clientX : event.changedTouches[0].clientX,
+ clientY : event.changedTouches[0].clientY
+ };
+ };
+ };
+
+ this.lastTouchStartAt = -1;
+
+ this.allListeners = {
+ "mousedown" : function (e) {
+ that.smoothRotate ();
+ that.resetIdle ();
+ that.dragMouseDown (e);
+ return consumeEvent (e);
+ },
+ "mouseup" : function (e) {
+ that.resetIdle ();
+ that.dragMouseUp (e);
+ return consumeEvent (e);
+ },
+ "mousemove" : function (e) {
+ that.resetIdle ();
+ that.dragMouseMove (e);
+ return consumeEvent (e);
+ },
+ "gesturestart" : function (e) {
+ that.gestureStart (e);
+ return consumeEvent (e);
+ },
+ "gesturechange" : function (e) {
+ that.gestureChange (e);
+ return consumeEvent (e);
+ },
+ "gestureend" : function (e) {
+ that.gestureEnd (e);
+ return consumeEvent (e);
+ },
+
+ "DOMMouseScroll" : function (e) {
+ that.resetIdle ();
+ that.mouseWheel (e);
+ return consumeEvent (e);
+ },
+ "mousewheel" : function (e) {
+ that.resetIdle ();
+ that.mouseWheel (e);
+ return consumeEvent (e);
+ },
+ "dblclick" : function (e) {
+ that.mouseDoubleClick (e);
+ return consumeEvent (e);
+ },
+
+ "touchstart" : function (e) {
+ that.smoothRotate ();
+ that.lastTouchStartAt = new Date ().getTime ();
+ that.resetIdle ();
+ that.dragMouseDown (translateEvent (e));
+ return consumeEvent (e);
+ },
+ "touchend" : function (e) {
+ that.resetIdle ();
+ var handled = that.dragMouseUp (translateEvent (e));
+ if (!handled && (that.lastTouchStartAt > new Date().getTime() - 350)) {
+ that.mouseDoubleClick (translateEvent (e));
+ }
+ that.lastTouchStartAt = -1;
+ return consumeEvent (e);
+ },
+ "touchmove" : function (e) {
+ if (that.dragDistance > 24) {
+ that.lastTouchStartAt = -1;
+ }
+ that.resetIdle ();
+ that.dragMouseMove (translateEvent (e));
+ return consumeEvent (e);
+ }
+ };
+ this.addEventListeners ();
+
+ /**
+ * Stub function to call onresize on this instance.
+ *
+ * @private
+ */
+ this.onresizeHandler = function (e) {
+ that.onresize ();
+ };
+
+ this.browser.registerListener (window, 'resize', this.onresizeHandler, false);
+ this.browser.registerListener (document.body, 'orientationchange', this.onresizeHandler, false);
+
+ this.setPitch (0.0);
+ this.setYaw (0.0);
+ this.setFov (45.0);
+}
+
+/*
+ * Statics
+ */
+
+/**
+ * When the mouse is pressed and dragged, the camera rotates
+ * proportionally to the length of the dragging.
+ *
+ * @constant
+ * @public
+ * @static
+ */
+bigshot.VRPanorama.DRAG_GRAB = "grab";
+
+/**
+ * When the mouse is pressed and dragged, the camera continuously
+ * rotates with a speed that is proportional to the length of the
+ * dragging.
+ *
+ * @constant
+ * @public
+ * @static
+ */
+bigshot.VRPanorama.DRAG_PAN = "pan";
+
+/**
+ * @name bigshot.VRPanorama.RenderState
+ * @class The state the renderer is in when a {@link bigshot.VRPanorama.RenderListener} is called.
+ *
+ * @see bigshot.VRPanorama.ONRENDER_BEGIN
+ * @see bigshot.VRPanorama.ONRENDER_END
+ */
+
+/**
+ * A RenderListener state parameter value used at the start of each render.
+ *
+ * @constant
+ * @public
+ * @static
+ * @type bigshot.VRPanorama.RenderState
+ */
+bigshot.VRPanorama.ONRENDER_BEGIN = 0;
+
+/**
+ * A RenderListener state parameter value used at the end of each render.
+ *
+ * @constant
+ * @public
+ * @static
+ * @type bigshot.VRPanorama.RenderState
+ */
+bigshot.VRPanorama.ONRENDER_END = 1;
+
+/**
+ * A RenderListener cause parameter indicating that a previously requested
+ * texture has loaded and a render is forced. The data parameter is not used.
+ *
+ * @constant
+ * @public
+ * @static
+ * @param {bigshot.VRPanorama.RenderCause}
+ */
+bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE = 0;
+
+/**
+ * @name bigshot.VRPanorama.RenderCause
+ * @class The reason why the {@link bigshot.VRPanorama} is being rendered.
+ * Due to the events outside of the panorama, the VR panorama may be forced to
+ * re-render itself. When this happens, the {@link bigshot.VRPanorama.RenderListener}s
+ * receive a constant indicating the cause of the rendering.
+ *
+ * @see bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE
+ */
+
+/**
+ * Specification for functions passed to {@link bigshot.VRPanorama#addRenderListener}.
+ *
+ * @name bigshot.VRPanorama.RenderListener
+ * @function
+ * @param {bigshot.VRPanorama.RenderState} state The state of the renderer. Can be {@link bigshot.VRPanorama.ONRENDER_BEGIN} or {@link bigshot.VRPanorama.ONRENDER_END}
+ * @param {bigshot.VRPanorama.RenderCause} [cause] The reason for rendering the scene. Can be undefined or {@link bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE}
+ * @param {Object} [data] An optional data object that is dependent on the cause. See the documentation
+ * for the different causes.
+ */
+
+/**
+ * Specification for functions passed to {@link bigshot.VRPanorama#addRenderable}.
+ *
+ * @name bigshot.VRPanorama.Renderable
+ * @function
+ * @param {bigshot.VRRenderer} renderer The renderer object to use.
+ * @param {bigshot.TexturedQuadScene} scene The scene to render into.
+ */
+
+/** */
+bigshot.VRPanorama.prototype = {
+ /**
+ * Adds a hotstpot.
+ *
+ * @param {bigshot.VRHotspot} hs the hotspot to add
+ */
+ addHotspot : function (hs) {
+ this.hotspots.push (hs);
+ },
+
+ /**
+ * Returns the {@link bigshot.VRPanoramaParameters} object used by this instance.
+ *
+ * @type bigshot.VRPanoramaParameters
+ */
+ getParameters : function () {
+ return this.parameters;
+ },
+
+ /**
+ * Sets the view translation.
+ *
+ * @param x translation of the viewer along the X axis
+ * @param y translation of the viewer along the Y axis
+ * @param z translation of the viewer along the Z axis
+ */
+ setTranslation : function (x, y, z) {
+ this.state.translation.x = x;
+ this.state.translation.y = y;
+ this.state.translation.z = z;
+ },
+
+ /**
+ * Returns the current view translation as an x-y-z triplet.
+ *
+ * @returns {number} x translation of the viewer along the X axis
+ * @returns {number} y translation of the viewer along the Y axis
+ * @returns {number} z translation of the viewer along the Z axis
+ */
+ getTranslation : function () {
+ return this.state.translation;
+ },
+
+ /**
+ * Sets the field of view.
+ *
+ * @param {number} fov the vertical field of view, in degrees
+ */
+ setFov : function (fov) {
+ fov = Math.min (this.parameters.maxFov, fov);
+ fov = Math.max (this.parameters.minFov, fov);
+ this.state.fov = fov;
+ },
+
+ /**
+ * Gets the field of view.
+ *
+ * @return {number} the vertical field of view, in degrees
+ */
+ getFov : function () {
+ return this.state.fov;
+ },
+
+ /**
+ * Returns the angle (yaw, pitch) for a given pixel coordinate.
+ *
+ * @param {number} x the x-coordinate of the pixel, measured in pixels
+ * from the left edge of the panorama.
+ * @param {number} y the y-coordinate of the pixel, measured in pixels
+ * from the top edge of the panorama.
+ * @return {number} .yaw the yaw angle of the pixel (0 &lt;= yaw &lt; 360)
+ * @return {number} .pitch the pitch angle of the pixel (-180 &lt;= pitch &lt;= 180)
+ *
+ * @example
+ * var container = ...; // an HTML element
+ * var pano = ...; // a bigshot.VRPanorama
+ * ...
+ * container.addEventListener ("click", function (e) {
+ * var clickX = e.clientX - container.offsetX;
+ * var clickY = e.clientY - container.offsetY;
+ * var polar = pano.screenToPolar (clickX, clickY);
+ * alert ("You clicked at: " +
+ * "Yaw: " + polar.yaw +
+ * " Pitch: " + polar.pitch);
+ * });
+ */
+ screenToPolar : function (x, y) {
+ var dray = this.screenToRayDelta (x, y);
+ var ray = $V([dray.x, dray.y, dray.z, 1.0]);
+
+ ray = Matrix.RotationX (this.getPitch () * Math.PI / 180.0).ensure4x4 ().x (ray);
+ ray = Matrix.RotationY (-this.getYaw () * Math.PI / 180.0).ensure4x4 ().x (ray);
+
+ var dx = ray.e(1);
+ var dy = ray.e(2);
+ var dz = ray.e(3);
+
+ var dxz = Math.sqrt (dx * dx + dz * dz);
+
+ var dyaw = Math.atan2 (dx, -dz) * 180 / Math.PI;
+ var dpitch = Math.atan2 (dy, dxz) * 180 / Math.PI;
+
+ var res = {};
+ res.yaw = (dyaw + 360) % 360.0;
+ res.pitch = dpitch;
+
+ return res;
+ },
+
+ /**
+ * Restricts the pitch value to be between the minPitch and maxPitch parameters.
+ *
+ * @param {number} p the pitch value
+ * @returns the constrained pitch value.
+ */
+ snapPitch : function (p) {
+ p = Math.min (this.parameters.maxPitch, p);
+ p = Math.max (this.parameters.minPitch, p);
+ return p;
+ },
+
+ /**
+ * Sets the current camera pitch.
+ *
+ * @param {number} p the pitch, in degrees
+ */
+ setPitch : function (p) {
+ this.state.rotation.p = this.snapPitch (p);
+ },
+
+ /**
+ * Subtraction mod 360, sort of...
+ *
+ * @private
+ * @returns the angular distance with smallest magnitude to add to p0 to get to p1 % 360
+ */
+ circleDistance : function (p0, p1) {
+ if (p1 > p0) {
+ // p1 is somewhere clockwise to p0
+ var d1 = (p1 - p0); // move clockwise
+ var d2 = ((p1 - 360) - p0); // move counterclockwise, first -p0 to get to 0, then p1 - 360.
+ return Math.abs (d1) < Math.abs (d2) ? d1 : d2;
+ } else {
+ // p1 is somewhere counterclockwise to p0
+ var d1 = (p1 - p0); // move counterclockwise
+ var d2 = (360 - p0) + p1; // move clockwise, first (360-p= to get to 0, then another p1 degrees
+ return Math.abs (d1) < Math.abs (d2) ? d1 : d2;
+ }
+ },
+
+ /**
+ * Subtraction mod 360, sort of...
+ *
+ * @private
+ */
+ circleSnapTo : function (p, p1, p2) {
+ var d1 = this.circleDistance (p, p1);
+ var d2 = this.circleDistance (p, p2);
+ return Math.abs (d1) < Math.abs (d2) ? p1 : p2;
+ },
+
+ /**
+ * Constrains a yaw value to the required minimum and maximum values.
+ *
+ * @private
+ */
+ snapYaw : function (y) {
+ y %= 360;
+ if (y < 0) {
+ y += 360;
+ }
+ if (this.parameters.minYaw < this.parameters.maxYaw) {
+ if (y > this.parameters.maxYaw || y < this.parameters.minYaw) {
+ y = circleSnapTo (y, this.parameters.minYaw, this.parameters.maxYaw);
+ }
+ } else {
+ // The only time when minYaw > maxYaw is when the interval
+ // contains the 0 angle.
+ if (y > this.parameters.minYaw) {
+ // ok, we're somewhere between minYaw and 0.0
+ } else if (y > this.parameters.maxYaw) {
+ // we're somewhere between maxYaw and minYaw
+ // (but on the wrong side).
+ // figure out the nearest point and snap to it
+ y = circleSnapTo (y, this.parameters.minYaw, this.parameters.maxYaw);
+ } else {
+ // ok, we're somewhere between 0.0 and maxYaw
+ }
+ }
+ return y;
+ },
+
+ /**
+ * Sets the current camera yaw. The yaw is normalized between
+ * 0 <= y < 360.
+ *
+ * @param {number} y the yaw, in degrees
+ */
+ setYaw : function (y) {
+ this.state.rotation.y = this.snapYaw (y);
+ },
+
+ /**
+ * Gets the current camera yaw.
+ *
+ * @return {number} the yaw, in degrees
+ */
+ getYaw : function () {
+ return this.state.rotation.y;
+ },
+
+ /**
+ * Gets the current camera pitch.
+ *
+ * @return {number} the pitch, in degrees
+ */
+ getPitch : function () {
+ return this.state.rotation.p;
+ },
+
+ /**
+ * Unregisters event handlers and other page-level hooks. The client need not call this
+ * method unless bigshot images are created and removed from the page
+ * dynamically. In that case, this method must be called when the client wishes to
+ * free the resources allocated by the image. Otherwise the browser will garbage-collect
+ * all resources automatically.
+ * @public
+ */
+ dispose : function () {
+ this.disposed = true;
+ this.browser.unregisterListener (window, "resize", this.onresizeHandler, false);
+ this.browser.unregisterListener (document.body, "orientationchange", this.onresizeHandler, false);
+ this.removeEventListeners ();
+
+ for (var i = 0; i < this.vrFaces.length; ++i) {
+ this.vrFaces[i].dispose ();
+ }
+ this.renderer.dispose ();
+ },
+
+ /**
+ * Creates and initializes a {@link bigshot.VREvent} object.
+ * The {@link bigshot.VREvent#ray}, {@link bigshot.VREvent#yaw},
+ * {@link bigshot.VREvent#pitch}, {@link bigshot.Event#target} and
+ * {@link bigshot.Event#currentTarget} fields are set.
+ *
+ * @param {Object} data the data object for the event
+ * @param {number} data.clientX the client x-coordinate of the event
+ * @param {number} data.clientY the client y-coordinate of the event
+ * @returns the new event object
+ * @type bigshot.VREvent
+ */
+ createVREventData : function (data) {
+ var elementPos = this.browser.getElementPosition (this.container);
+ data.localX = data.clientX - elementPos.x;
+ data.localY = data.clientY - elementPos.y;
+
+ data.ray = this.screenToRay (data.localX, data.localY);
+
+ var polar = this.screenToPolar (data.localX, data.localY);
+ data.yaw = polar.yaw;
+ data.pitch = polar.pitch;
+ data.target = this;
+ data.currentTarget = this;
+
+ return new bigshot.VREvent (data);
+ },
+
+
+ /**
+ * Sets up transformation matrices etc. Calls all render listeners with a state parameter
+ * of {@link bigshot.VRPanorama.ONRENDER_BEGIN}.
+ *
+ * @private
+ *
+ * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ */
+ beginRender : function (cause, data) {
+ this.onrender (bigshot.VRPanorama.ONRENDER_BEGIN, cause, data);
+ this.renderer.beginRender (this.state.rotation, this.state.fov, this.state.translation, this.transformOffsets);
+ },
+
+
+ /**
+ * Add a function that will be called at various times during the render.
+ *
+ * @param {bigshot.VRPanorama.RenderListener} listener the listener function
+ */
+ addRenderListener : function (listener) {
+ var rl = new Array ();
+ rl = rl.concat (this.renderListeners);
+ rl.push (listener);
+ this.renderListeners = rl;
+ },
+
+ /**
+ * Removes a function that will be called at various times during the render.
+ *
+ * @param {bigshot.VRPanorama.RenderListener} listener the listener function
+ */
+ removeRenderListener : function (listener) {
+ var rl = new Array ();
+ rl = rl.concat (this.renderListeners);
+ for (var i = 0; i < rl.length; ++i) {
+ if (rl[i] === listener) {
+ rl.splice (i, 1);
+ break;
+ }
+ }
+ this.renderListeners = rl;
+ },
+
+ /**
+ * Called at the start and end of every render.
+ *
+ * @event
+ * @private
+ * @type function()
+ * @param {bigshot.VRPanorama.RenderState} state the current render state
+ */
+ onrender : function (state, cause, data) {
+ var rl = this.renderListeners;
+ for (var i = 0; i < rl.length; ++i) {
+ rl[i](state, cause, data);
+ }
+ },
+
+ /**
+ * Performs per-render cleanup. Calls all render listeners with a state parameter
+ * of {@link bigshot.VRPanorama.ONRENDER_END}.
+ *
+ * @private
+ *
+ * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ */
+ endRender : function (cause, data) {
+ for (var f in this.vrFaces) {
+ this.vrFaces[f].endRender ();
+ }
+ this.renderer.endRender ();
+ this.onrender (bigshot.VRPanorama.ONRENDER_END, cause, data);
+ },
+
+ /**
+ * Add a function that will be called to render any additional quads.
+ *
+ * @param {bigshot.VRPanorama.Renderable} renderable The renderable, a function responsible for
+ * rendering additional scene elements.
+ */
+ addRenderable : function (renderable) {
+ var rl = new Array ();
+ rl.concat (this.renderables);
+ rl.push (renderable);
+ this.renderables = rl;
+ },
+
+ /**
+ * Removes a function that will be called to render any additional quads.
+ *
+ * @param {bigshot.VRPanorama.Renderable} renderable The renderable added using
+ * {@link bigshot.VRPanorama#addRenderable}.
+ */
+ removeRenderable : function (renderable) {
+ var rl = new Array ();
+ rl.concat (this.renderables);
+ for (var i = 0; i < rl.length; ++i) {
+ if (rl[i] == listener) {
+ rl.splice (i, 1);
+ break;
+ }
+ }
+ this.renderables = rl;
+ },
+
+ /**
+ * Renders the VR cube.
+ *
+ * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ */
+ render : function (cause, data) {
+ if (!this.disposed) {
+ this.beginRender (cause, data);
+
+ var scene = this.renderer.createTexturedQuadScene ();
+
+ for (var f in this.vrFaces) {
+ this.vrFaces[f].render (scene);
+ }
+
+ for (var i = 0; i < this.renderables.length; ++i) {
+ this.renderables[i](this.renderer, scene);
+ }
+
+ scene.render ();
+
+ for (var i = 0; i < this.hotspots.length; ++i) {
+ this.hotspots[i].layout ();
+ }
+
+ this.endRender (cause, data);
+ }
+ },
+
+ /**
+ * Render updated faces. Called as tiles are loaded from the server.
+ *
+ * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ */
+ renderUpdated : function (cause, data) {
+ if (!this.disposed && this.renderer.supportsUpdate ()) {
+ this.beginRender (cause, data);
+
+ var scene = this.renderer.createTexturedQuadScene ();
+
+ for (var f in this.vrFaces) {
+ if (this.vrFaces[f].isUpdated ()) {
+ this.vrFaces[f].render (scene);
+ }
+ }
+
+ scene.render ();
+
+ for (var i = 0; i < this.hotspots.length; ++i) {
+ this.hotspots[i].layout ();
+ }
+
+ this.endRender (cause, data);
+ } else {
+ this.render (cause, data);
+ }
+ },
+
+ /**
+ * The current drag mode.
+ *
+ * @private
+ */
+ dragMode : bigshot.VRPanorama.DRAG_GRAB,
+
+ /**
+ * Sets the mouse dragging mode.
+ *
+ * @param mode one of {@link bigshot.VRPanorama.DRAG_PAN} or {@link bigshot.VRPanorama.DRAG_GRAB}.
+ */
+ setDragMode : function (mode) {
+ this.dragMode = mode;
+ },
+
+ addEventListeners : function () {
+ for (var k in this.allListeners) {
+ this.browser.registerListener (this.container, k, this.allListeners[k], false);
+ }
+ },
+
+ removeEventListeners : function () {
+ for (var k in this.allListeners) {
+ this.browser.unregisterListener (this.container, k, this.allListeners[k], false);
+ }
+ },
+
+ dragMouseDown : function (e) {
+ this.dragStart = {
+ clientX : e.clientX,
+ clientY : e.clientY
+ };
+ this.dragLast = {
+ clientX : e.clientX,
+ clientY : e.clientY,
+ dx : 0,
+ dy : 0,
+ dt : 1000000,
+ time : new Date ().getTime ()
+ };
+ this.dragDistance = 0;
+ },
+
+ dragMouseUp : function (e) {
+ // In case we got a mouse up with out a previous mouse down,
+ // for example, double-click on title bar to maximize the
+ // window
+ if (this.dragStart == null || this.dragLast == null) {
+ this.dragStart = null;
+ this.dragLast = null;
+ return;
+ }
+
+ this.dragStart = null;
+ var dx = this.dragLast.dx;
+ var dy = this.dragLast.dy;
+ var ds = Math.sqrt (dx * dx + dy * dy);
+ var dt = this.dragLast.dt;
+ var dtb = new Date ().getTime () - this.dragLast.time;
+ this.dragLast = null;
+
+ var v = dt > 0 ? (ds / dt) : 0;
+ if (v > 0.05 && dtb < 250 && dt > 20 && this.parameters.fling) {
+ var scale = this.state.fov / this.renderer.getViewportHeight ();
+
+ var t0 = new Date ().getTime ();
+
+ var flingScale = this.parameters.flingScale;
+
+ dx /= dt;
+ dy /= dt;
+
+ this.smoothRotate (function (dat) {
+ var dt = new Date ().getTime () - t0;
+ var fact = Math.pow (2, -dt * flingScale);
+ var d = (dx * dat * scale) * fact;
+ return fact > 0.01 ? d : null;
+ }, function (dat) {
+ var dt = new Date ().getTime () - t0;
+ var fact = Math.pow (2, -dt * flingScale);
+ var d = (dy * dat * scale) * fact;
+ return fact > 0.01 ? d : null;
+ }, function () {
+ return null;
+ });
+ return true;
+ } else {
+ this.smoothRotate ();
+ return false;
+ }
+ },
+
+ dragMouseMove : function (e) {
+ if (this.dragStart != null && this.currentGesture == null) {
+ if (this.dragMode == bigshot.VRPanorama.DRAG_GRAB) {
+ this.smoothRotate ();
+ var scale = this.state.fov / this.renderer.getViewportHeight ();
+ var dx = e.clientX - this.dragStart.clientX;
+ var dy = e.clientY - this.dragStart.clientY;
+ this.dragDistance += dx + dy;
+ this.setYaw (this.getYaw () - dx * scale);
+ this.setPitch (this.getPitch () - dy * scale);
+ this.renderAsap ();
+ this.dragStart = e;
+ var dt = new Date ().getTime () - this.dragLast.time;
+ if (dt > 20) {
+ this.dragLast = {
+ dx : this.dragLast.clientX - e.clientX,
+ dy : this.dragLast.clientY - e.clientY,
+ dt : dt,
+ clientX : e.clientX,
+ clientY : e.clientY,
+ time : new Date ().getTime ()
+ };
+ }
+ } else {
+ var scale = 0.1 * this.state.fov / this.renderer.getViewportHeight ();
+ var dx = e.clientX - this.dragStart.clientX;
+ var dy = e.clientY - this.dragStart.clientY;
+ this.dragDistance = dx + dy;
+ this.smoothRotate (
+ function () {
+ return dx * scale;
+ },
+ function () {
+ return dy * scale;
+ });
+ }
+ }
+ },
+
+ onMouseDoubleClick : function (e, x, y) {
+ var eventData = this.createVREventData ({
+ type : "dblclick",
+ clientX : e.clientX,
+ clientY : e.clientY
+ });
+ this.fireEvent ("dblclick", eventData);
+ if (!eventData.defaultPrevented) {
+ this.smoothRotateToXY (x, y);
+ }
+ },
+
+ mouseDoubleClick : function (e) {
+ var pos = this.browser.getElementPosition (this.container);
+ this.onMouseDoubleClick (e, e.clientX - pos.x, e.clientY - pos.y);
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ gestureStart : function (event) {
+ this.currentGesture = {
+ startFov : this.getFov (),
+ scale : event.scale
+ };
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ gestureEnd : function (event) {
+ this.currentGesture = null;
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ gestureChange : function (event) {
+ if (this.currentGesture) {
+ var newFov = this.currentGesture.startFov / event.scale;
+ this.setFov (newFov);
+ this.renderAsap ();
+ }
+ },
+
+ /**
+ * Sets the maximum texture magnification.
+ *
+ * @param {number} v the maximum texture magnification
+ * @see bigshot.VRPanoramaParameters#maxTextureMagnification
+ */
+ setMaxTextureMagnification : function (v) {
+ this.maxTextureMagnification = v;
+ },
+
+ /**
+ * Gets the current maximum texture magnification.
+ *
+ * @type number
+ * @see bigshot.VRPanoramaParameters#maxTextureMagnification
+ */
+ getMaxTextureMagnification : function () {
+ return this.maxTextureMagnification;
+ },
+
+ /**
+ * Computes the minimum field of view where the resulting image will not
+ * have to stretch the textures more than given by the
+ * {@link bigshot.VRPanoramaParameters#maxTextureMagnification} parameter.
+ *
+ * @type number
+ * @return the minimum FOV, below which it is necessary to stretch the
+ * vr cube texture more than the given {@link bigshot.VRPanoramaParameters#maxTextureMagnification}
+ */
+ getMinFovFromViewportAndImage : function () {
+ var halfHeight = this.renderer.getViewportHeight () / 2;
+
+ var minFaceHeight = this.vrFaces[0].parameters.height;
+ for (var i in this.vrFaces) {
+ minFaceHeight = Math.min (minFaceHeight, this.vrFaces[i].parameters.height);
+ }
+
+ var edgeSizeY = this.maxTextureMagnification * minFaceHeight / 2;
+
+ var wy = halfHeight / edgeSizeY;
+
+ var mz = Math.atan (wy) * 180 / Math.PI;
+
+ return mz * 2;
+ },
+
+ /**
+ * Transforms screen coordinates to a world-coordinate ray.
+ * @private
+ */
+ screenToRay : function (x, y) {
+ var dray = this.screenToRayDelta (x, y);
+ var ray = this.renderer.transformToWorld (dray);
+ ray = Matrix.RotationY (-this.transformOffsets.y * Math.PI / 180.0).ensure4x4 ().xPoint3Dhom1 (ray);
+ ray = Matrix.RotationX (-this.transformOffsets.p * Math.PI / 180.0).ensure4x4 ().xPoint3Dhom1 (ray);
+ ray = Matrix.RotationZ (-this.transformOffsets.r * Math.PI / 180.0).ensure4x4 ().xPoint3Dhom1 (ray);
+ return ray;
+ },
+
+ /**
+ * @private
+ */
+ screenToRayDelta : function (x, y) {
+ var halfHeight = this.renderer.getViewportHeight () / 2;
+ var halfWidth = this.renderer.getViewportWidth () / 2;
+ var x = (x - halfWidth);
+ var y = (y - halfHeight);
+
+ var edgeSizeY = Math.tan ((this.state.fov / 2) * Math.PI / 180);
+ var edgeSizeX = edgeSizeY * this.renderer.getViewportWidth () / this.renderer.getViewportHeight ();
+
+ var wx = x * edgeSizeX / halfWidth;
+ var wy = y * edgeSizeY / halfHeight;
+ var wz = -1.0;
+
+ return {
+ x : wx,
+ y : wy,
+ z : wz
+ };
+ },
+
+ /**
+ * Smoothly rotates the panorama so that the
+ * point given by x and y, in pixels relative to the top left corner
+ * of the panorama, ends up in the center of the viewport.
+ *
+ * @param {int} x the x-coordinate, in pixels from the left edge
+ * @param {int} y the y-coordinate, in pixels from the top edge
+ */
+ smoothRotateToXY : function (x, y) {
+ var polar = this.screenToPolar (x, y);
+
+ this.smoothRotateTo (this.snapYaw (polar.yaw), this.snapPitch (polar.pitch), this.getFov (), this.state.fov / 200);
+ },
+
+ /**
+ * Gives the step to take to slowly approach the
+ * target value.
+ *
+ * @example
+ * current = current + this.ease (current, target, 1.0);
+ * @private
+ */
+ ease : function (current, target, speed, snapFrom) {
+ var easingFrom = speed * 40;
+ if (!snapFrom) {
+ snapFrom = speed / 5;
+ }
+ var ignoreFrom = speed / 1000;
+
+ var distance = current - target;
+ if (distance > easingFrom) {
+ distance = -speed;
+ } else if (distance < -easingFrom) {
+ distance = speed;
+ } else if (Math.abs (distance) < snapFrom) {
+ distance = -distance;
+ } else if (Math.abs (distance) < ignoreFrom) {
+ distance = 0;
+ } else {
+ distance = - (speed * distance) / (easingFrom);
+ }
+ return distance;
+ },
+
+ /**
+ * Resets the "idle" clock.
+ * @private
+ */
+ resetIdle : function () {
+ this.idleCounter = 0;
+ },
+
+ /**
+ * Idle clock.
+ * @private
+ */
+ idleTick : function () {
+ if (this.maxIdleCounter < 0) {
+ return;
+ }
+ ++this.idleCounter;
+ if (this.idleCounter == this.maxIdleCounter) {
+ this.autoRotate ();
+ }
+ var that = this;
+ setTimeout (function () {
+ that.idleTick ();
+ }, 1000);
+ },
+
+ /**
+ * Sets the panorama to auto-rotate after a certain time has
+ * elapsed with no user interaction. Default is disabled.
+ *
+ * @param {int} delay the delay in seconds. Set to < 0 to disable
+ * auto-rotation when idle
+ */
+ autoRotateWhenIdle : function (delay) {
+ this.maxIdleCounter = delay;
+ this.idleCounter = 0;
+ if (delay < 0) {
+ return;
+ } else if (this.maxIdleCounter > 0) {
+ var that = this;
+ setTimeout (function () {
+ that.idleTick ();
+ }, 1000);
+ }
+ },
+
+ /**
+ * Starts auto-rotation of the camera. If the yaw is constrained,
+ * will pan back and forth between the yaw endpoints. Call
+ * {@link #smoothRotate}() to stop the rotation.
+ */
+ autoRotate : function () {
+ var that = this;
+ var scale = this.state.fov / 400;
+
+ var speed = scale;
+ var dy = speed;
+ this.smoothRotate (
+ function () {
+ var nextPos = that.getYaw () + dy;
+ if (that.parameters.minYaw < that.parameters.maxYaw) {
+ if (nextPos > that.parameters.maxYaw || nextPos < that.parameters.minYaw) {
+ dy = -dy;
+ }
+ } else {
+ // The only time when minYaw > maxYaw is when the interval
+ // contains the 0 angle.
+ if (nextPos > that.parameters.minYaw) {
+ // ok, we're somewhere between minYaw and 0.0
+ } else if (nextPos > that.parameters.maxYaw) {
+ dy = -dy;
+ } else {
+ // ok, we're somewhere between 0.0 and maxYaw
+ }
+ }
+ return dy;
+ }, function () {
+ return that.ease (that.getPitch (), 0.0, speed);
+ }, function () {
+ return that.ease (that.getFov (), 45.0, 0.1);
+ });
+ },
+
+ /**
+ * Smoothly rotates the panorama to the given state.
+ *
+ * @param {number} yaw the target yaw
+ * @param {number} pitch the target pitch
+ * @param {number} fov the target vertical field of view
+ * @param {number} the speed to rotate with
+ */
+ smoothRotateTo : function (yaw, pitch, fov, speed) {
+ var that = this;
+ this.smoothRotate (
+ function () {
+ var distance = that.circleDistance (yaw, that.getYaw ());
+ var d = -that.ease (0, distance, speed);
+ return Math.abs (d) > 0.01 ? d : null;
+ }, function () {
+ var d = that.ease (that.getPitch (), pitch, speed);
+ return Math.abs (d) > 0.01 ? d : null;
+ }, function () {
+ var d = that.ease (that.getFov (), fov, speed);
+ return Math.abs (d) > 0.01 ? d : null;
+ }
+ );
+ },
+
+
+ /**
+ * Smoothly rotates the camera. If all of the dp, dy and df functions are null, stops
+ * any smooth rotation.
+ *
+ * @param {function()} [dy] function giving the yaw increment for the next frame
+ * or null if no further yaw movement is required
+ * @param {function()} [dp] function giving the pitch increment for the next frame
+ * or null if no further pitch movement is required
+ * @param {function()} [df] function giving the field of view (degrees) increment
+ * for the next frame or null if no further fov adjustment is required
+ */
+ smoothRotate : function (dy, dp, df) {
+ ++this.smoothrotatePermit;
+ var savedPermit = this.smoothrotatePermit;
+ if (!dp && !dy && !df) {
+ return;
+ }
+
+ var that = this;
+ var fs = {
+ dy : dy,
+ dp : dp,
+ df : df,
+ t : new Date ().getTime ()
+ };
+ var stepper = function () {
+ if (that.smoothrotatePermit == savedPermit) {
+ var now = new Date ().getTime ();
+ var dat = now - fs.t;
+ fs.t = now;
+
+ var anyFunc = false;
+ if (fs.dy) {
+ var d = fs.dy(dat);
+ if (d != null) {
+ anyFunc = true;
+ that.setYaw (that.getYaw () + d);
+ } else {
+ fs.dy = null;
+ }
+ }
+
+ if (fs.dp) {
+ var d = fs.dp(dat);
+ if (d != null) {
+ anyFunc = true;
+ that.setPitch (that.getPitch () + d);
+ } else {
+ fs.dp = null;
+ }
+ }
+
+ if (fs.df) {
+ var d = fs.df(dat);
+ if (d != null) {
+ anyFunc = true;
+ that.setFov (that.getFov () + d);
+ } else {
+ fs.df = null;
+ }
+ }
+ that.render ();
+ if (anyFunc) {
+ that.browser.requestAnimationFrame (stepper, that.renderer.getElement ());
+ }
+ }
+ };
+ stepper ();
+ },
+
+ /**
+ * Translates mouse wheel events.
+ * @private
+ */
+ mouseWheel : function (event){
+ var delta = 0;
+ if (!event) /* For IE. */
+ event = window.event;
+ if (event.wheelDelta) { /* IE/Opera. */
+ delta = event.wheelDelta / 120;
+ /*
+ * In Opera 9, delta differs in sign as compared to IE.
+ */
+ if (window.opera)
+ delta = -delta;
+ } else if (event.detail) { /* Mozilla case. */
+ /*
+ * In Mozilla, sign of delta is different than in IE.
+ * Also, delta is multiple of 3.
+ */
+ delta = -event.detail;
+ }
+
+ /*
+ * If delta is nonzero, handle it.
+ * Basically, delta is now positive if wheel was scrolled up,
+ * and negative, if wheel was scrolled down.
+ */
+ if (delta) {
+ this.mouseWheelHandler (delta);
+ }
+
+ /*
+ * Prevent default actions caused by mouse wheel.
+ * That might be ugly, but we handle scrolls somehow
+ * anyway, so don't bother here..
+ */
+ if (event.preventDefault) {
+ event.preventDefault ();
+ }
+ event.returnValue = false;
+ },
+
+ /**
+ * Utility function to interpret mouse wheel events.
+ * @private
+ */
+ mouseWheelHandler : function (delta) {
+ var that = this;
+ var target = null;
+ if (delta > 0) {
+ if (this.getFov () > this.parameters.minFov) {
+ target = this.getFov () * 0.9;
+ }
+ }
+ if (delta < 0) {
+ if (this.getFov () < this.parameters.maxFov) {
+ target = this.getFov () / 0.9;
+ }
+ }
+ if (target != null) {
+ this.smoothRotate (null, null, function () {
+ var df = (target - that.getFov ()) / 1.5;
+ return Math.abs (df) > 0.01 ? df : null;
+ });
+ }
+ },
+
+ /**
+ * Maximizes the image to cover the browser viewport.
+ * The container div is removed from its parent node upon entering
+ * full screen mode. When leaving full screen mode, the container
+ * is appended to its old parent node. To avoid rearranging the
+ * nodes, wrap the container in an extra div.
+ *
+ * <p>For unknown reasons (probably security), browsers will
+ * not let you open a window that covers the entire screen.
+ * Even when specifying "fullscreen=yes", all you get is a window
+ * that has a title bar and only covers the desktop (not any task
+ * bars or the like). For now, this is the best that I can do,
+ * but should the situation change I'll update this to be
+ * full-screen<i>-ier</i>.
+ *
+ * @param {function()} [onClose] function that is called when the user
+ * exits full-screen mode
+ * @public
+ */
+ fullScreen : function (onClose) {
+ if (this.fullScreenHandler) {
+ return;
+ }
+
+ var message = document.createElement ("div");
+ message.style.position = "absolute";
+ message.style.fontSize = "16pt";
+ message.style.top = "128px";
+ message.style.width = "100%";
+ message.style.color = "white";
+ message.style.padding = "16px";
+ message.style.zIndex = "9999";
+ message.style.textAlign = "center";
+ message.style.opacity = "0.75";
+ message.innerHTML = "<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";
+
+ var that = this;
+
+ this.fullScreenHandler = new bigshot.FullScreen (this.container);
+ this.fullScreenHandler.restoreSize = this.sizeContainer == null;
+
+ this.fullScreenHandler.addOnResize (function () {
+ that.onresize ();
+ });
+
+ this.fullScreenHandler.addOnClose (function () {
+ if (message.parentNode) {
+ try {
+ div.removeChild (message);
+ } catch (x) {
+ }
+ }
+ that.fullScreenHandler = null;
+ });
+
+ if (onClose) {
+ this.fullScreenHandler.addOnClose (function () {
+ onClose ();
+ });
+ }
+
+ this.removeEventListeners ();
+ this.fullScreenHandler.open ();
+ this.addEventListeners ();
+ // Safari compatibility - must update after entering fullscreen.
+ // 1s should be enough so we enter FS, but not enough for the
+ // user to wonder if something is wrong.
+ var r = function () {
+ that.render ();
+ };
+ setTimeout (r, 1000);
+ setTimeout (r, 2000);
+ setTimeout (r, 3000);
+
+ if (this.fullScreenHandler.getRootElement ()) {
+ this.fullScreenHandler.getRootElement ().appendChild (message);
+
+ setTimeout (function () {
+ var opacity = 0.75;
+ var iter = function () {
+ opacity -= 0.02;
+ if (message.parentNode) {
+ if (opacity <= 0) {
+ message.style.display = "none";
+ try {
+ div.removeChild (message);
+ } catch (x) {}
+ } else {
+ message.style.opacity = opacity;
+ setTimeout (iter, 20);
+ }
+ }
+ };
+ setTimeout (iter, 20);
+ }, 3500);
+ }
+
+ return function () {
+ that.removeEventListeners ();
+ that.fullScreenHandler.close ();
+ that.addEventListeners ();
+ };
+ },
+
+ /**
+ * Right-sizes the canvas container.
+ * @private
+ */
+ onresize : function () {
+ if (this.fullScreenHandler == null || !this.fullScreenHandler.isFullScreen) {
+ if (this.sizeContainer) {
+ var s = this.browser.getElementSize (this.sizeContainer);
+ this.renderer.resize (s.w, s.h);
+ }
+ } else {
+ this.container.style.width = window.innerWidth + "px";
+ this.container.style.height = window.innerHeight + "px";
+ var s = this.browser.getElementSize (this.container);
+ this.renderer.resize (s.w, s.h);
+ }
+ this.renderer.onresize ();
+ this.renderAsap ();
+ },
+
+ /**
+ * Posts a render() call via a timeout or the requestAnimationFrame API.
+ * Use when the render call must be done as soon as possible, but
+ * can't be done in the current call context.
+ */
+ renderAsap : function () {
+ if (!this.renderAsapPermitTaken && !this.disposed) {
+ this.renderAsapPermitTaken = true;
+ var that = this;
+ this.browser.requestAnimationFrame (function () {
+ that.renderAsapPermitTaken = false;
+ that.render ();
+ }, this.renderer.getElement ());
+ }
+ },
+
+
+ /**
+ * Automatically resizes the canvas element to the size of the
+ * given element on resize.
+ *
+ * @param {HTMLElement} sizeContainer the element to use. Set to <code>null</code>
+ * to disable.
+ */
+ autoResizeContainer : function (sizeContainer) {
+ this.sizeContainer = sizeContainer;
+ }
+}
+
+/**
+ * Fired when the user double-clicks on the panorama.
+ *
+ * @name bigshot.VRPanorama#dblclick
+ * @event
+ * @param {bigshot.VREvent} event the event object
+ */
+
+bigshot.Object.extend (bigshot.VRPanorama, bigshot.EventDispatcher);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Abstract base class for panorama hotspots.
+ *
+ * @class Abstract base class for panorama hotspots.
+ *
+ * A Hotspot is simply an HTML element that is moved / hidden etc.
+ * to overlay a given position in the panorama.
+ *
+ * @param {bigshot.VRPanorama} panorama the panorama to attach this hotspot to
+ */
+bigshot.VRHotspot = function (panorama) {
+ this.panorama = panorama;
+
+ /**
+ * The method to use for dealing with hotspots that extend outside the
+ * viewport. Note that {@link #CLIP_ADJUST} et al are functions, not constants.
+ * To set the value, you must call the function to get a clipping strategy:
+ *
+ * @example
+ * var hotspot = ...;
+ * // note the function call below ---------------v
+ * hotspot.clippingStrategy = hotspot.CLIP_ADJUST ();
+ *
+ * @see bigshot.VRHotspot#CLIP_ADJUST
+ * @see bigshot.VRHotspot#CLIP_CENTER
+ * @see bigshot.VRHotspot#CLIP_FRACTION
+ * @see bigshot.VRHotspot#CLIP_ZOOM
+ * @see bigshot.VRHotspot#CLIP_FADE
+ * @see bigshot.VRHotspot#clip
+ * @type function(clipData)
+ * @default bigshot.VRHotspot#CLIP_ADJUST
+ */
+ this.clippingStrategy = bigshot.VRHotspot.CLIP_ADJUST (panorama);
+
+}
+
+/**
+ * Hides the hotspot if less than <code>frac</code> of its area is visible.
+ *
+ * @param {number} frac the fraction (0.0 - 1.0) of the hotspot that must be visible for
+ * it to be shown.
+ * @type function(clipData)
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_FRACTION = function (panorama, frac) {
+ return function (clipData) {
+ var r = {
+ x0 : Math.max (clipData.x, 0),
+ y0 : Math.max (clipData.y, 0),
+ x1 : Math.min (clipData.x + clipData.w, panorama.renderer.getViewportWidth ()),
+ y1 : Math.min (clipData.y + clipData.h, panorama.renderer.getViewportHeight ())
+ };
+ var full = clipData.w * clipData.h;
+ var visibleWidth = (r.x1 - r.x0);
+ var visibleHeight = (r.y1 - r.y0);
+ if (visibleWidth > 0 && visibleHeight > 0) {
+ var visible = visibleWidth * visibleHeight;
+
+ return (visible / full) >= frac;
+ } else {
+ return false;
+ }
+ }
+};
+
+/**
+ * Hides the hotspot if its center is outside the viewport.
+ *
+ * @type function(clipData)
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_CENTER = function (panorama) {
+ return function (clipData) {
+ var c = {
+ x : clipData.x + clipData.w / 2,
+ y : clipData.y + clipData.h / 2
+ };
+ return c.x >= 0 && c.x < panorama.renderer.getViewportWidth () &&
+ c.y >= 0 && c.y < panorama.renderer.getViewportHeight ();
+ }
+}
+
+/**
+ * Resizes the hotspot to fit in the viewport. Hides the hotspot if
+ * it is completely outside the viewport.
+ *
+ * @type function(clipData)
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_ADJUST = function (panorama) {
+ return function (clipData) {
+ if (clipData.x < 0) {
+ clipData.w -= -clipData.x;
+ clipData.x = 0;
+ }
+ if (clipData.y < 0) {
+ clipData.h -= -clipData.y;
+ clipData.y = 0;
+ }
+ if (clipData.x + clipData.w > panorama.renderer.getViewportWidth ()) {
+ clipData.w = panorama.renderer.getViewportWidth () - clipData.x - 1;
+ }
+ if (clipData.y + clipData.h > panorama.renderer.getViewportHeight ()) {
+ clipData.h = panorama.renderer.getViewportHeight () - clipData.y - 1;
+ }
+
+ return clipData.w > 0 && clipData.h > 0;
+ }
+}
+
+/**
+ * Shrinks the hotspot as it approaches the viewport edges.
+ *
+ * @param s The full size of the hotspot.
+ * @param s.w The full width of the hotspot, in pixels.
+ * @param s.h The full height of the hotspot, in pixels.
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_ZOOM = function (panorama, s, maxDistanceInViewportHeights) {
+ return function (clipData) {
+ if (clipData.x >= 0 && clipData.y >= 0 && (clipData.x + s.w) < panorama.renderer.getViewportWidth ()
+ && (clipData.y + s.h) < panorama.renderer.getViewportHeight ()) {
+ clipData.w = s.w;
+ clipData.h = s.h;
+ return true;
+ }
+
+ var distance = 0;
+ if (clipData.x < 0) {
+ distance = Math.max (-clipData.x, distance);
+ }
+ if (clipData.y < 0) {
+ distance = Math.max (-clipData.y, distance);
+ }
+ if (clipData.x + s.w > panorama.renderer.getViewportWidth ()) {
+ distance = Math.max (clipData.x + s.w - panorama.renderer.getViewportWidth (), distance);
+ }
+ if (clipData.y + s.h > panorama.renderer.getViewportHeight ()) {
+ distance = Math.max (clipData.y + s.h - panorama.renderer.getViewportHeight (), distance);
+ }
+
+ distance /= panorama.renderer.getViewportHeight ();
+ if (distance > maxDistanceInViewportHeights) {
+ return false;
+ }
+
+ var scale = 1 / (1 + distance);
+
+ clipData.w = s.w * scale;
+ clipData.h = s.w * scale;
+ if (clipData.x < 0) {
+ clipData.x = 0;
+ }
+ if (clipData.y < 0) {
+ clipData.y = 0;
+ }
+ if (clipData.x + clipData.w > panorama.renderer.getViewportWidth ()) {
+ clipData.x = panorama.renderer.getViewportWidth () - clipData.w;
+ }
+ if (clipData.y + clipData.h > panorama.renderer.getViewportHeight ()) {
+ clipData.y = panorama.renderer.getViewportHeight () - clipData.h;
+ }
+
+ return true;
+ }
+}
+
+/**
+ * Progressively fades the hotspot as it gets closer to the viewport edges.
+ *
+ * @param {number} borderSizeInPixels the distance from the edge, in pixels,
+ * where the hotspot is completely opaque.
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_FADE = function (panorama, borderSizeInPixels) {
+ return function (clipData) {
+ var distance = Math.min (
+ clipData.x,
+ clipData.y,
+ panorama.renderer.getViewportWidth () - (clipData.x + clipData.w),
+ panorama.renderer.getViewportHeight () - (clipData.y + clipData.h));
+
+ if (distance <= 0) {
+ return false;
+ } else if (distance <= borderSizeInPixels) {
+ clipData.opacity = (distance / borderSizeInPixels);
+ return true;
+ } else {
+ clipData.opacity = 1.0;
+ return true;
+ }
+ }
+}
+
+bigshot.VRHotspot.prototype = {
+
+ /**
+ * Layout and resize the hotspot. Called by the panorama.
+ */
+ layout : function () {},
+
+ /**
+ * Helper function to rotate a point around an axis.
+ *
+ * @param {number} ang the angle
+ * @param {bigshot.Point3D} vector the vector to rotate around
+ * @param {Vector} point the point
+ * @type Vector
+ * @private
+ */
+ rotate : function (ang, vector, point) {
+ var arad = ang * Math.PI / 180.0;
+ var m = Matrix.Rotation(arad, $V([vector.x, vector.y, vector.z])).ensure4x4 ();
+ return m.xPoint3Dhom1 (point);
+ },
+
+ /**
+ * Converts the polar coordinates to world coordinates.
+ * The distance is assumed to be 1.0.
+ *
+ * @param yaw the yaw, in degrees
+ * @param pitch the pitch, in degrees
+ * @type bigshot.Point3D
+ */
+ toVector : function (yaw, pitch) {
+ var point = { x : 0, y : 0, z : -1 };
+ point = this.rotate (-pitch, { x : 1, y : 0, z : 0 }, point);
+ point = this.rotate (-yaw, { x : 0, y : 1, z : 0 }, point);
+ return point;
+ },
+
+ /**
+ * Converts the world-coordinate point p to screen coordinates.
+ *
+ * @param {bigshot.Point3D} p the world-coordinate point
+ * @type point
+ */
+ toScreen : function (p) {
+ var res = this.panorama.renderer.transformToScreen (p)
+ return res;
+ },
+
+ /**
+ * Clips the hotspot against the viewport. Both parameters
+ * are in/out. Clipping is done by adjusting the values of the
+ * parameters.
+ *
+ * @param clipData Information about the hotspot.
+ * @param {number} clipData.x the x-coordinate of the top-left corner of the hotspot, in pixels.
+ * @param {number} clipData.y the y-coordinate of the top-left corner of the hotspot, in pixels.
+ * @param {number} clipData.w the width of the hotspot, in pixels.
+ * @param {number} clipData.h the height of the hotspot, in pixels.
+ * @param {number} [clipData.opacity] the opacity of the hotspot, ranging from 0.0 (transparent)
+ * to 1.0 (opaque). If set, the opacity of the hotspot element is adjusted.
+ * @type boolean
+ * @return true if the hotspot is visible, false otherwise
+ */
+ clip : function (clipData) {
+ return this.clippingStrategy (clipData);
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new point-hotspot and attaches it to a VR panorama.
+ *
+ * @class A VR panorama point-hotspot.
+ *
+ * A Hotspot is simply an HTML element that is moved / hidden etc.
+ * to overlay a given position in the panorama. The element is moved
+ * by setting its <code>style.top</code> and <code>style.left</code>
+ * values.
+ *
+ * @augments bigshot.VRHotspot
+ * @param {bigshot.VRPanorama} panorama the panorama to attach this hotspot to
+ * @param {number} yaw the yaw coordinate of the hotspot
+ * @param {number} pitch the pitch coordinate of the hotspot
+ * @param {HTMLElement} element the HTML element
+ * @param {number} offsetX the offset to add to the screen coordinate corresponding
+ * to the hotspot's polar coordinates. Use this to center the hotspot horizontally.
+ * @param {number} offsetY the offset to add to the screen coordinate corresponding
+ * to the hotspot's polar coordinates. Use this to center the hotspot vertically.
+ */
+bigshot.VRPointHotspot = function (panorama, yaw, pitch, element, offsetX, offsetY) {
+ bigshot.VRHotspot.call (this, panorama);
+ this.element = element;
+ this.offsetX = offsetX;
+ this.offsetY = offsetY;
+ this.point = this.toVector (yaw, pitch);
+}
+
+bigshot.VRPointHotspot.prototype = {
+ layout : function () {
+ var p = this.toScreen (this.point);
+
+ var visible = false;
+ if (p != null) {
+ var s = this.panorama.browser.getElementSize (this.element);
+ p.w = s.w;
+ p.h = s.h;
+
+ p.x += this.offsetX;
+ p.y += this.offsetY;
+
+ if (this.clip (p)) {
+ this.element.style.top = (p.y) + "px";
+ this.element.style.left = (p.x) + "px";
+ this.element.style.width = (p.w) + "px";
+ this.element.style.height = (p.h) + "px";
+ if (p.opacity) {
+ this.element.style.opacity = p.opacity;
+ }
+ this.element.style.visibility = "inherit";
+ visible = true;
+ }
+ }
+
+ if (!visible) {
+ this.element.style.visibility = "hidden";
+ }
+ }
+}
+
+bigshot.Object.extend (bigshot.VRPointHotspot, bigshot.VRHotspot);
+bigshot.Object.validate ("bigshot.VRPointHotspot", bigshot.VRHotspot);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new rectangular hotspot and attaches it to a VR panorama.
+ *
+ * @class A rectangular VR panorama hotspot.
+ *
+ * A rectangular hotspot is simply an HTML element that is moved / resized / hidden etc.
+ * to overlay a given rectangle in the panorama. The element is moved
+ * by setting its <code>style.top</code> and <code>style.left</code>
+ * values, and resized by setting its <code>style.width</code> and <code>style.height</code>
+ * values.
+ *
+ * @augments bigshot.VRHotspot
+ * @param {bigshot.VRPanorama} panorama the panorama to attach this hotspot to
+ * @param {number} yaw0 the yaw coordinate of the top-left corner of the hotspot
+ * @param {number} pitch0 the pitch coordinate of the top-left corner of the hotspot
+ * @param {number} yaw1 the yaw coordinate of the bottom-right corner of the hotspot
+ * @param {number} pitch1 the pitch coordinate of the bottom-right corner of the hotspot
+ * @param {HTMLElement} element the HTML element
+ */
+bigshot.VRRectangleHotspot = function (panorama, yaw0, pitch0, yaw1, pitch1, element) {
+ bigshot.VRHotspot.call (this, panorama);
+
+ this.element = element;
+ this.point0 = this.toVector (yaw0, pitch0);
+ this.point1 = this.toVector (yaw1, pitch1);
+}
+
+bigshot.VRRectangleHotspot.prototype = {
+ layout : function () {
+ var p = this.toScreen (this.point0);
+ var p1 = this.toScreen (this.point1);
+
+ var visible = false;
+ if (p != null && p1 != null) {
+ var cd = {
+ x : p.x,
+ y : p.y,
+ opacity : 1.0,
+ w : p1.x - p.x,
+ h : p1.y - p.y
+ };
+
+ if (this.clip (cd)) {
+ this.element.style.top = (cd.y) + "px";
+ this.element.style.left = (cd.x) + "px";
+ this.element.style.width = (cd.w) + "px";
+ this.element.style.height = (cd.h) + "px";
+ this.element.style.visibility = "inherit";
+ visible = true;
+ }
+ }
+
+ if (!visible) {
+ this.element.style.visibility = "hidden";
+ }
+ }
+}
+
+bigshot.Object.extend (bigshot.VRRectangleHotspot, bigshot.VRHotspot);
+bigshot.Object.validate ("bigshot.VRRectangleHotspot", bigshot.VRHotspot);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new parameter block.
+ *
+ * @class Parameters for the adaptive LOD monitor.
+ */
+bigshot.AdaptiveLODMonitorParameters = function (values) {
+
+ /**
+ * The VR panorama to adjust.
+ *
+ * @type bigshot.VRPanorama
+ */
+ this.vrPanorama = null;
+
+ /**
+ * The target framerate in frames per second.
+ * The monitor will try to achieve an average frame render time
+ * of <i>1 / targetFps</i> seconds.
+ *
+ * @default 30
+ * @type float
+ */
+ this.targetFps = 30;
+
+ /**
+ * The tolerance for the rendering time. The monitor will adjust the
+ * level of detail if the average frame render time rises above
+ * <i>target frame render time * (1.0 + tolerance)</i> or falls below
+ * <i>target frame render time / (1.0 + tolerance)</i>.
+ *
+ * @default 0.3
+ * @type float
+ */
+ this.tolerance = 0.3;
+
+ /**
+ * The rate at which the level of detail is adjusted.
+ * For detail increase, the detail is multiplied with (1.0 + rate),
+ * for decrease divided.
+ *
+ * @default 0.1
+ * @type float
+ */
+ this.rate = 0.1;
+
+ /**
+ * Minimum texture magnification.
+ *
+ * @default 1.5
+ * @type float
+ */
+ this.minMag = 1.5;
+
+ /**
+ * Maximum texture magnification.
+ *
+ * @default 16
+ * @type float
+ */
+ this.maxMag = 16;
+
+ /**
+ * Texture magnification for HQ render passes.
+ *
+ * @default 1.5
+ * @type float
+ */
+ this.hqRenderMag = 1.5;
+
+ /**
+ * Delay in milliseconds before executing
+ * a HQ render pass.
+ *
+ * @default 2000
+ * @type int
+ */
+ this.hqRenderDelay = 2000;
+
+ /**
+ * Interval in milliseconds for the
+ * HQ render pass timer.
+ *
+ * @default 1000
+ * @type int
+ */
+ this.hqRenderInterval = 1000;
+
+ if (values) {
+ for (var k in values) {
+ this[k] = values[k];
+ }
+ }
+
+ this.merge = function (values, overwrite) {
+ for (var k in values) {
+ if (overwrite || !this[k]) {
+ this[k] = values[k];
+ }
+ }
+ }
+ return this;
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new adaptive level-of-detail monitor.
+ *
+ * @class An adaptive LOD monitor that adjusts the level of detail of a VR panorama
+ * to achieve a desired frame rate. To connect it to a VR panorama, use the
+ * {@link bigshot.AdaptiveLODMonitor#getListener} method to get a render listener
+ * that can be passed to {@link bigshot.VRPanorama#addRenderListener}.
+ *
+ * <p>The monitor maintains two render modes - a high quality one with a fixed
+ * level of detail, and a low(er) quality one with variable level of detail.
+ * If the panorama is idle for more than a set interval, a high-quality render is
+ * performed.
+ *
+ * @param {bigshot.AdaptiveLODMonitorParameters} parameters parameters for the LOD monitor.
+ *
+ * @see bigshot.AdaptiveLODMonitorParameters for a list of parameters
+ *
+ * @example
+ * var bvr = new bigshot.VRPanorama ( ... );
+ * var lodMonitor = new bigshot.AdaptiveLODMonitor (
+ * new bigshot.AdaptiveLODMonitorParameters ({
+ * vrPanorama : bvr,
+ * targetFps : 30,
+ * tolerance : 0.3,
+ * rate : 0.1,
+ * minMag : 1.5,
+ * maxMag : 16
+ * }));
+ * bvr.addRenderListener (lodMonitor.getListener ());
+ */
+bigshot.AdaptiveLODMonitor = function (parameters) {
+ this.setParameters (parameters);
+
+ /**
+ * The current adaptive detail level.
+ * @type float
+ * @private
+ */
+ this.currentAdaptiveMagnification = parameters.vrPanorama.getMaxTextureMagnification ();
+
+ /**
+ * The number of frames that have been rendered.
+ * @type int
+ * @private
+ */
+ this.frames = 0;
+
+ /**
+ * The total number of times we have sampled the render time.
+ * @type int
+ * @private
+ */
+ this.samples = 0;
+
+ /**
+ * The sum of sample times from all samples of render time in milliseconds.
+ * @type int
+ * @private
+ */
+ this.renderTimeTotal = 0;
+
+ /**
+ * The sum of sample times from the recent sample pass in milliseconds.
+ * @type int
+ * @private
+ */
+ this.renderTimeLast = 0;
+
+ /**
+ * The number of samples currently done in the recent sample pass.
+ * @type int
+ * @private
+ */
+ this.samplesLast = 0;
+
+ /**
+ * The start time, in milliseconds, of the last sample.
+ * @type int
+ * @private
+ */
+ this.startTime = 0;
+
+ /**
+ * The time, in milliseconds, when the panorama was last rendered.
+ * @type int
+ * @private
+ */
+ this.lastRender = 0;
+
+ this.hqRender = false;
+ this.hqMode = false;
+ this.hqRenderWaiting = false;
+
+ /**
+ * Flag to enable / disable the monitor.
+ * @type boolean
+ * @private
+ */
+ this.enabled = true;
+
+ var that = this;
+ this.listenerFunction = function (state, cause, data) {
+ that.listener (state, cause, data);
+ };
+};
+
+bigshot.AdaptiveLODMonitor.prototype = {
+ averageRenderTime : function () {
+ if (this.samples > 0) {
+ return this.renderTimeTotal / this.samples;
+ } else {
+ return -1;
+ }
+ },
+
+ /**
+ * @param {bigshot.AdaptiveLODMonitorParameters} parameters
+ */
+ setParameters : function (parameters) {
+ this.parameters = parameters;
+ this.targetTime = 1000 / this.parameters.targetFps;
+
+ this.lowerTime = this.targetTime / (1.0 + this.parameters.tolerance);
+ this.upperTime = this.targetTime * (1.0 + this.parameters.tolerance);
+ },
+
+ setEnabled : function (enabled) {
+ this.enabled = enabled;
+ },
+
+ averageRenderTimeLast : function () {
+ if (this.samples > 0) {
+ return this.renderTimeLast / this.samplesLast;
+ } else {
+ return -1;
+ }
+ },
+
+ getListener : function () {
+ return this.listenerFunction;
+ },
+
+ increaseDetail : function () {
+ this.currentAdaptiveMagnification = Math.max (this.parameters.minMag, this.currentAdaptiveMagnification / (1.0 + this.parameters.rate));
+ },
+
+ decreaseDetail : function () {
+ this.currentAdaptiveMagnification = Math.min (this.parameters.maxMag, this.currentAdaptiveMagnification * (1.0 + this.parameters.rate));
+ },
+
+ sample : function () {
+ var deltat = new Date ().getTime () - this.startTime;
+ this.samples++;
+ this.renderTimeTotal += deltat;
+
+ this.samplesLast++;
+ this.renderTimeLast += deltat;
+
+ if (this.samplesLast > 4) {
+ var averageLast = this.renderTimeLast / this.samplesLast;
+
+ if (averageLast < this.lowerTime) {
+ this.increaseDetail ();
+ } else if (averageLast > this.upperTime) {
+ this.decreaseDetail ();
+ }
+
+ this.samplesLast = 0;
+ this.renderTimeLast = 0;
+ }
+ },
+
+ hqRenderTick : function () {
+ if (this.lastRender < new Date ().getTime () - this.parameters.hqRenderDelay) {
+ this.hqRender = true;
+ this.hqMode = true;
+ if (this.enabled) {
+ this.parameters.vrPanorama.setMaxTextureMagnification (this.parameters.hqRenderMag);
+ this.parameters.vrPanorama.render ();
+ }
+
+ this.hqRender = false;
+ this.hqRenderWaiting = false;
+ } else {
+ var that = this;
+ setTimeout (function () {
+ that.hqRenderTick ();
+ }, this.parameters.hqRenderInterval);
+ }
+ },
+
+ listener : function (state, cause, data) {
+ if (!this.enabled) {
+ return;
+ }
+
+ if (this.hqRender) {
+ return;
+ }
+
+ if (this.hqMode && cause == bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE) {
+ this.parameters.vrPanorama.setMaxTextureMagnification (this.parameters.minMag);
+ return;
+ } else {
+ this.hqMode = false;
+ }
+
+ this.parameters.vrPanorama.setMaxTextureMagnification (this.currentAdaptiveMagnification);
+
+ this.frames++;
+ if ((this.frames < 20 || this.frames % 5 == 0) && state == bigshot.VRPanorama.ONRENDER_BEGIN) {
+ this.startTime = new Date ().getTime ();
+ this.lastRender = this.startTime;
+ var that = this;
+ setTimeout (function () {
+ that.sample ();
+ }, 1);
+ if (!this.hqRenderWaiting) {
+ this.hqRenderWaiting = true;
+ setTimeout (function () {
+ that.hqRenderTick ();
+ }, this.parameters.hqRenderInterval);
+ }
+ }
+ }
+};
+}
diff --git a/js/vendor/bigshot/bigshot-full-compressed.js b/js/vendor/bigshot/bigshot-full-compressed.js
new file mode 100644
index 00000000..636a7457
--- /dev/null
+++ b/js/vendor/bigshot/bigshot-full-compressed.js
@@ -0,0 +1 @@
+var Sylvester={version:"0.1.3",precision:0.000001};function Vector(){}Vector.prototype={e:function(a){return(a<1||a>this.elements.length)?null:this.elements[a-1]},dimensions:function(){return this.elements.length},modulus:function(){return Math.sqrt(this.dot(this))},eql:function(b){var c=this.elements.length;var a=b.elements||b;if(c!=a.length){return false}do{if(Math.abs(this.elements[c-1]-a[c-1])>Sylvester.precision){return false}}while(--c);return true},dup:function(){return Vector.create(this.elements)},map:function(a){var b=[];this.each(function(c,d){b.push(a(c,d))});return Vector.create(b)},each:function(c){var d=this.elements.length,a=d,b;do{b=a-d;c(this.elements[b],b+1)}while(--d)},toUnitVector:function(){var a=this.modulus();if(a===0){return this.dup()}return this.map(function(b){return b/a})},angleFrom:function(d){var e=d.elements||d;var c=this.elements.length,f=c,g;if(c!=e.length){return null}var a=0,m=0,l=0;this.each(function(k,n){a+=k*e[n-1];m+=k*k;l+=e[n-1]*e[n-1]});m=Math.sqrt(m);l=Math.sqrt(l);if(m*l===0){return null}var b=a/(m*l);if(b<-1){b=-1}if(b>1){b=1}return Math.acos(b)},isParallelTo:function(a){var b=this.angleFrom(a);return(b===null)?null:(b<=Sylvester.precision)},isAntiparallelTo:function(a){var b=this.angleFrom(a);return(b===null)?null:(Math.abs(b-Math.PI)<=Sylvester.precision)},isPerpendicularTo:function(a){var b=this.dot(a);return(b===null)?null:(Math.abs(b)<=Sylvester.precision)},add:function(b){var a=b.elements||b;if(this.elements.length!=a.length){return null}return this.map(function(c,d){return c+a[d-1]})},subtract:function(b){var a=b.elements||b;if(this.elements.length!=a.length){return null}return this.map(function(c,d){return c-a[d-1]})},multiply:function(a){return this.map(function(b){return b*a})},x:function(a){return this.multiply(a)},dot:function(b){var a=b.elements||b;var c,d=0,e=this.elements.length;if(e!=a.length){return null}do{d+=this.elements[e-1]*a[e-1]}while(--e);return d},cross:function(b){var c=b.elements||b;if(this.elements.length!=3||c.length!=3){return null}var a=this.elements;return Vector.create([(a[1]*c[2])-(a[2]*c[1]),(a[2]*c[0])-(a[0]*c[2]),(a[0]*c[1])-(a[1]*c[0])])},max:function(){var a=0,d=this.elements.length,b=d,c;do{c=b-d;if(Math.abs(this.elements[c])>Math.abs(a)){a=this.elements[c]}}while(--d);return a},indexOf:function(a){var c=null,e=this.elements.length,b=e,d;do{d=b-e;if(c===null&&this.elements[d]==a){c=d+1}}while(--e);return c},toDiagonalMatrix:function(){return Matrix.Diagonal(this.elements)},round:function(){return this.map(function(a){return Math.round(a)})},snapTo:function(a){return this.map(function(b){return(Math.abs(b-a)<=Sylvester.precision)?a:b})},distanceFrom:function(d){if(d.anchor){return d.distanceFrom(this)}var a=d.elements||d;if(a.length!=this.elements.length){return null}var c=0,b;this.each(function(e,f){b=e-a[f-1];c+=b*b});return Math.sqrt(c)},liesOn:function(a){return a.contains(this)},liesIn:function(a){return a.contains(this)},rotate:function(c,e){var b,d,a,i,g;switch(this.elements.length){case 2:b=e.elements||e;if(b.length!=2){return null}d=Matrix.Rotation(c).elements;a=this.elements[0]-b[0];i=this.elements[1]-b[1];return Vector.create([b[0]+d[0][0]*a+d[0][1]*i,b[1]+d[1][0]*a+d[1][1]*i]);break;case 3:if(!e.direction){return null}var f=e.pointClosestTo(this).elements;d=Matrix.Rotation(c,e.direction).elements;a=this.elements[0]-f[0];i=this.elements[1]-f[1];g=this.elements[2]-f[2];return Vector.create([f[0]+d[0][0]*a+d[0][1]*i+d[0][2]*g,f[1]+d[1][0]*a+d[1][1]*i+d[1][2]*g,f[2]+d[2][0]*a+d[2][1]*i+d[2][2]*g]);break;default:return null}},reflectionIn:function(c){if(c.anchor){var b=this.elements.slice();var d=c.pointClosestTo(b).elements;return Vector.create([d[0]+(d[0]-b[0]),d[1]+(d[1]-b[1]),d[2]+(d[2]-(b[2]||0))])}else{var a=c.elements||c;if(this.elements.length!=a.length){return null}return this.map(function(e,f){return a[f-1]+(a[f-1]-e)})}},to3D:function(){var a=this.dup();switch(a.elements.length){case 3:break;case 2:a.elements.push(0);break;default:return null}return a},inspect:function(){return"["+this.elements.join(", ")+"]"},setElements:function(a){this.elements=(a.elements||a).slice();return this}};Vector.create=function create(b){var a=new Vector();return a.setElements(b)};Vector.createNoCopy=function createNoCopy(b){var a=new Vector();a.elements=b;return a};Vector.i=Vector.createNoCopy([1,0,0]);Vector.j=Vector.createNoCopy([0,1,0]);Vector.k=Vector.createNoCopy([0,0,1]);Vector.Random=function(b){var a=[];do{a.push(Math.random())}while(--b);return Vector.createNoCopy(a)};Vector.Zero=function(b){var a=[];do{a.push(0)}while(--b);return Vector.createNoCopy(a)};function Matrix(){}Matrix.prototype={e:function(b,a){if(b<1||b>this.elements.length||a<1||a>this.elements[0].length){return null}return this.elements[b-1][a-1]},row:function(a){if(a>this.elements.length){return null}return Vector.create(this.elements[a-1])},col:function(c){if(c>this.elements[0].length){return null}var b=[],e=this.elements.length,a=e,d;do{d=a-e;b.push(this.elements[d][c-1])}while(--e);return Vector.create(b)},dimensions:function(){return{rows:this.elements.length,cols:this.elements[0].length}},rows:function(){return this.elements.length},cols:function(){return this.elements[0].length},eql:function(a){var k=a.elements||a;if(typeof(k[0][0])=="undefined"){k=Matrix.create(k).elements}if(this.elements.length!=k.length||this.elements[0].length!=k[0].length){return false}var e=this.elements.length,g=e,d,c,f=this.elements[0].length,b;do{d=g-e;c=f;do{b=f-c;if(Math.abs(this.elements[d][b]-k[d][b])>Sylvester.precision){return false}}while(--c)}while(--e);return true},dup:function(){return Matrix.create(this.elements)},map:function(f){var e=[],d=this.elements.length,k=d,c,b,g=this.elements[0].length,a;do{c=k-d;b=g;e[c]=[];do{a=g-b;e[c][a]=f(this.elements[c][a],c+1,a+1)}while(--b)}while(--d);return Matrix.create(e)},isSameSizeAs:function(a){var b=a.elements||a;if(typeof(b[0][0])=="undefined"){b=Matrix.create(b).elements}return(this.elements.length==b.length&&this.elements[0].length==b[0].length)},add:function(a){var b=a.elements||a;if(typeof(b[0][0])=="undefined"){b=Matrix.create(b).elements}if(!this.isSameSizeAs(b)){return null}return this.map(function(c,e,d){return c+b[e-1][d-1]})},subtract:function(a){var b=a.elements||a;if(typeof(b[0][0])=="undefined"){b=Matrix.create(b).elements}if(!this.isSameSizeAs(b)){return null}return this.map(function(c,e,d){return c-b[e-1][d-1]})},canMultiplyFromLeft:function(a){var b=a.elements||a;if(typeof(b[0][0])=="undefined"){b=Matrix.create(b).elements}return(this.elements[0].length==b.length)},multiply:function(r){if(!r.elements){return this.map(function(c){return c*r})}var k=r.modulus?true:false;var o=r.elements||r;if(typeof(o[0][0])=="undefined"){o=Matrix.create(o).elements}if(!this.canMultiplyFromLeft(o)){return null}var e=this.elements.length,f=e,m,b,d=o[0].length,g;var q=this.elements[0].length,a=[],n,l,p;do{m=f-e;a[m]=[];b=d;do{g=d-b;n=0;l=q;do{p=q-l;n+=this.elements[m][p]*o[p][g]}while(--l);a[m][g]=n}while(--b)}while(--e);var o=Matrix.create(a);return k?o.col(1):o},x:function(a){return this.multiply(a)},xvec:function xvec(b){var a=b.elements;return Vector.createNoCopy(this.xvecarray(a))},xvecarray:function xvecarray(k){var a=k.length;var d=new Array(a);var f=this.elements;var c=f.length;for(var g=0;g<c;++g){var b=0;var l=f[g];for(var e=0;e<a;++e){b+=l[e]*k[e]}d[g]=b}return d},xPoint3D:function xPoint3D(a){var b=this.elements;return{x:a.x*b[0][0]+a.y*b[0][1]+a.z*b[0][2],y:a.x*b[1][0]+a.y*b[1][1]+a.z*b[1][2],z:a.x*b[2][0]+a.y*b[2][1]+a.z*b[2][2]}},xPoint3Dhom1:function xPoint3D(a){var b=this.elements;return{x:a.x*b[0][0]+a.y*b[0][1]+a.z*b[0][2]+b[0][3],y:a.x*b[1][0]+a.y*b[1][1]+a.z*b[1][2]+b[1][3],z:a.x*b[2][0]+a.y*b[2][1]+a.z*b[2][2]+b[2][3]}},xPoint3Dhom:function xPoint3D(a){var b=this.elements;return{x:a.x*b[0][0]+a.y*b[0][1]+a.z*b[0][2]+b[0][3],y:a.x*b[1][0]+a.y*b[1][1]+a.z*b[1][2]+b[1][3],z:a.x*b[2][0]+a.y*b[2][1]+a.z*b[2][2]+b[2][3],w:a.x*b[3][0]+a.y*b[3][1]+a.z*b[3][2]+b[3][3]}},minor:function(q,p,n,m){var e=[],g=n,l,f,k;var r=this.elements.length,o=this.elements[0].length;do{l=n-g;e[l]=[];f=m;do{k=m-f;e[l][k]=this.elements[(q+l-1)%r][(p+k-1)%o]}while(--f)}while(--g);return Matrix.create(e)},transpose:function(){var f=this.elements.length,g=this.elements[0].length;var e=[],d=g,c,b,a;do{c=g-d;e[c]=[];b=f;do{a=f-b;e[c][a]=this.elements[a][c]}while(--b)}while(--d);return Matrix.create(e)},isSquare:function(){return(this.elements.length==this.elements[0].length)},max:function(){var a=0,e=this.elements.length,g=e,d,c,f=this.elements[0].length,b;do{d=g-e;c=f;do{b=f-c;if(Math.abs(this.elements[d][b])>Math.abs(a)){a=this.elements[d][b]}}while(--c)}while(--e);return a},indexOf:function(a){var d=null,f=this.elements.length,k=f,e,c,g=this.elements[0].length,b;do{e=k-f;c=g;do{b=g-c;if(this.elements[e][b]==a){return{i:e+1,j:b+1}}}while(--c)}while(--f);return null},diagonal:function(){if(!this.isSquare){return null}var c=[],d=this.elements.length,a=d,b;do{b=a-d;c.push(this.elements[b][b])}while(--d);return Vector.create(c)},toRightTriangular:function(){var f=this.dup(),d;var b=this.elements.length,c=b,e,g,l=this.elements[0].length,a;do{e=c-b;if(f.elements[e][e]==0){for(j=e+1;j<c;j++){if(f.elements[j][e]!=0){d=[];g=l;do{a=l-g;d.push(f.elements[e][a]+f.elements[j][a])}while(--g);f.elements[e]=d;break}}}if(f.elements[e][e]!=0){for(j=e+1;j<c;j++){var m=f.elements[j][e]/f.elements[e][e];d=[];g=l;do{a=l-g;d.push(a<=e?0:f.elements[j][a]-f.elements[e][a]*m)}while(--g);f.elements[j]=d}}}while(--b);return f},toUpperTriangular:function(){return this.toRightTriangular()},determinant:function(){if(!this.isSquare()){return null}var e=this.toRightTriangular();var c=e.elements[0][0],d=e.elements.length-1,a=d,b;do{b=a-d+1;c=c*e.elements[b][b]}while(--d);return c},det:function(){return this.determinant()},isSingular:function(){return(this.isSquare()&&this.determinant()===0)},trace:function(){if(!this.isSquare()){return null}var c=this.elements[0][0],d=this.elements.length-1,a=d,b;do{b=a-d+1;c+=this.elements[b][b]}while(--d);return c},tr:function(){return this.trace()},rank:function(){var k=this.toRightTriangular(),g=0;var d=this.elements.length,f=d,c,b,e=this.elements[0].length,a;do{c=f-d;b=e;do{a=e-b;if(Math.abs(k.elements[c][a])>Sylvester.precision){g++;break}}while(--b)}while(--d);return g},rk:function(){return this.rank()},augment:function(m){var k=m.elements||m;if(typeof(k[0][0])=="undefined"){k=Matrix.create(k).elements}var e=this.dup(),l=e.elements[0].length;var c=e.elements.length,d=c,g,a,b=k[0].length,f;if(c!=k.length){return null}do{g=d-c;a=b;do{f=b-a;e.elements[g][l+f]=k[g][f]}while(--a)}while(--c);return e},inverse:function(){if(!this.isSquare()||this.isSingular()){return null}var c=this.elements.length,d=c,k,g;var l=this.augment(Matrix.I(c)).toRightTriangular();var m,n=l.elements[0].length,a,f,b;var o=[],e;do{k=c-1;f=[];m=n;o[k]=[];b=l.elements[k][k];do{a=n-m;e=l.elements[k][a]/b;f.push(e);if(a>=d){o[k].push(e)}}while(--m);l.elements[k]=f;for(g=0;g<k;g++){f=[];m=n;do{a=n-m;f.push(l.elements[g][a]-l.elements[k][a]*l.elements[g][k])}while(--m);l.elements[g]=f}}while(--c);return Matrix.create(o)},inv:function(){return this.inverse()},round:function(){return this.map(function(a){return Math.round(a)})},snapTo:function(a){return this.map(function(b){return(Math.abs(b-a)<=Sylvester.precision)?a:b})},inspect:function(){var c=[];var d=this.elements.length,a=d,b;do{b=a-d;c.push(Vector.create(this.elements[b]).inspect())}while(--d);return c.join("\n")},setElements:function(l){var o,a=l.elements||l;if(typeof(a[0][0])!="undefined"){var d=a.length,f=d,b,c,m;this.elements=[];do{o=f-d;b=a[o].length;c=b;this.elements[o]=[];do{m=c-b;this.elements[o][m]=a[o][m]}while(--b)}while(--d);return this}var e=a.length,g=e;this.elements=[];do{o=g-e;this.elements.push([a[o]])}while(--e);return this}};Matrix.create=function(a){var b=new Matrix();return b.setElements(a)};Matrix.I=function(f){var e=[],a=f,d,c,b;do{d=a-f;e[d]=[];c=a;do{b=a-c;e[d][b]=(d==b)?1:0}while(--c)}while(--f);return Matrix.create(e)};Matrix.Diagonal=function(c){var e=c.length,a=e,b;var d=Matrix.I(e);do{b=a-e;d.elements[b][b]=c[b]}while(--e);return d};Matrix.Rotation=function(b,k){if(!k){return Matrix.create([[Math.cos(b),-Math.sin(b)],[Math.sin(b),Math.cos(b)]])}var d=k.dup();if(d.elements.length!=3){return null}var i=d.modulus();var l=d.elements[0]/i,g=d.elements[1]/i,f=d.elements[2]/i;var n=Math.sin(b),e=Math.cos(b),m=1-e;return Matrix.create([[m*l*l+e,m*l*g-n*f,m*l*f+n*g],[m*l*g+n*f,m*g*g+e,m*g*f-n*l],[m*l*f-n*g,m*g*f+n*l,m*f*f+e]])};Matrix.RotationX=function(a){var d=Math.cos(a),b=Math.sin(a);return Matrix.create([[1,0,0],[0,d,-b],[0,b,d]])};Matrix.RotationY=function(a){var d=Math.cos(a),b=Math.sin(a);return Matrix.create([[d,0,b],[0,1,0],[-b,0,d]])};Matrix.RotationZ=function(a){var d=Math.cos(a),b=Math.sin(a);return Matrix.create([[d,-b,0],[b,d,0],[0,0,1]])};Matrix.Random=function(b,a){return Matrix.Zero(b,a).map(function(){return Math.random()})};Matrix.Zero=function(g,a){var f=[],e=g,d,c,b;do{d=g-e;f[d]=[];c=a;do{b=a-c;f[d][b]=0}while(--c)}while(--e);return Matrix.create(f)};function Line(){}Line.prototype={eql:function(a){return(this.isParallelTo(a)&&this.contains(a.anchor))},dup:function(){return Line.create(this.anchor,this.direction)},translate:function(b){var a=b.elements||b;return Line.create([this.anchor.elements[0]+a[0],this.anchor.elements[1]+a[1],this.anchor.elements[2]+(a[2]||0)],this.direction)},isParallelTo:function(b){if(b.normal){return b.isParallelTo(this)}var a=this.direction.angleFrom(b.direction);return(Math.abs(a)<=Sylvester.precision||Math.abs(a-Math.PI)<=Sylvester.precision)},distanceFrom:function(e){if(e.normal){return e.distanceFrom(this)}if(e.direction){if(this.isParallelTo(e)){return this.distanceFrom(e.anchor)}var k=this.direction.cross(e.direction).toUnitVector().elements;var c=this.anchor.elements,b=e.anchor.elements;return Math.abs((c[0]-b[0])*k[0]+(c[1]-b[1])*k[1]+(c[2]-b[2])*k[2])}else{var f=e.elements||e;var c=this.anchor.elements,a=this.direction.elements;var n=f[0]-c[0],l=f[1]-c[1],g=(f[2]||0)-c[2];var m=Math.sqrt(n*n+l*l+g*g);if(m===0){return 0}var i=(n*a[0]+l*a[1]+g*a[2])/m;var d=1-i*i;return Math.abs(m*Math.sqrt(d<0?0:d))}},contains:function(a){var b=this.distanceFrom(a);return(b!==null&&b<=Sylvester.precision)},liesIn:function(a){return a.contains(this)},intersects:function(a){if(a.normal){return a.intersects(this)}return(!this.isParallelTo(a)&&this.distanceFrom(a)<=Sylvester.precision)},intersectionWith:function(o){if(o.normal){return o.intersectionWith(this)}if(!this.intersects(o)){return null}var m=this.anchor.elements,b=this.direction.elements,l=o.anchor.elements,a=o.direction.elements;var x=b[0],v=b[1],u=b[2],i=a[0],g=a[1],e=a[2];var s=m[0]-l[0],r=m[1]-l[1],q=m[2]-l[2];var n=-x*s-v*r-u*q;var d=i*s+g*r+e*q;var f=x*x+v*v+u*u;var t=i*i+g*g+e*e;var c=x*i+v*g+u*e;var p=(n*t/f+c*d)/(t-c*c);return Vector.create([m[0]+p*x,m[1]+p*v,m[2]+p*u])},pointClosestTo:function(s){if(s.direction){if(this.intersects(s)){return this.intersectionWith(s)}if(this.isParallelTo(s)){return null}var u=this.direction.elements,t=s.direction.elements;var f=u[0],e=u[1],c=u[2],q=t[0],o=t[1],m=t[2];var r=(c*q-f*m),p=(f*o-e*q),n=(e*m-c*o);var l=Vector.create([r*m-p*o,p*q-n*m,n*o-r*q]);var i=Plane.create(s.anchor,l);return i.intersectionWith(this)}else{var i=s.elements||s;if(this.contains(i)){return Vector.create(i)}var v=this.anchor.elements,u=this.direction.elements;var f=u[0],e=u[1],c=u[2],d=v[0],b=v[1],a=v[2];var r=f*(i[1]-b)-e*(i[0]-d),p=e*((i[2]||0)-a)-c*(i[1]-b),n=c*(i[0]-d)-f*((i[2]||0)-a);var g=Vector.create([e*r-c*n,c*p-f*r,f*n-e*p]);var B=this.distanceFrom(i)/g.modulus();return Vector.create([i[0]+g.elements[0]*B,i[1]+g.elements[1]*B,(i[2]||0)+g.elements[2]*B])}},rotate:function(p,q){if(typeof(q.direction)=="undefined"){q=Line.create(q.to3D(),Vector.k)}var g=Matrix.Rotation(p,q.direction).elements;var b=q.pointClosestTo(this.anchor).elements;var d=this.anchor.elements,a=this.direction.elements;var l=b[0],k=b[1],i=b[2],f=d[0],e=d[1],c=d[2];var o=f-l,n=e-k,m=c-i;return Line.create([l+g[0][0]*o+g[0][1]*n+g[0][2]*m,k+g[1][0]*o+g[1][1]*n+g[1][2]*m,i+g[2][0]*o+g[2][1]*n+g[2][2]*m],[g[0][0]*a[0]+g[0][1]*a[1]+g[0][2]*a[2],g[1][0]*a[0]+g[1][1]*a[1]+g[1][2]*a[2],g[2][0]*a[0]+g[2][1]*a[1]+g[2][2]*a[2]])},reflectionIn:function(o){if(o.normal){var f=this.anchor.elements,b=this.direction.elements;var l=f[0],i=f[1],e=f[2],g=b[0],d=b[1],c=b[2];var a=this.anchor.reflectionIn(o).elements;var n=l+g,m=i+d,k=e+c;var p=o.pointClosestTo([n,m,k]).elements;var r=[p[0]+(p[0]-n)-a[0],p[1]+(p[1]-m)-a[1],p[2]+(p[2]-k)-a[2]];return Line.create(a,r)}else{if(o.direction){return this.rotate(Math.PI,o)}else{var q=o.elements||o;return Line.create(this.anchor.reflectionIn([q[0],q[1],(q[2]||0)]),this.direction)}}},setVectors:function(a,c){a=Vector.create(a);c=Vector.create(c);if(a.elements.length==2){a.elements.push(0)}if(c.elements.length==2){c.elements.push(0)}if(a.elements.length>3||c.elements.length>3){return null}var b=c.modulus();if(b===0){return null}this.anchor=a;this.direction=Vector.create([c.elements[0]/b,c.elements[1]/b,c.elements[2]/b]);return this}};Line.create=function(b,c){var a=new Line();return a.setVectors(b,c)};Line.X=Line.create(Vector.Zero(3),Vector.i);Line.Y=Line.create(Vector.Zero(3),Vector.j);Line.Z=Line.create(Vector.Zero(3),Vector.k);function Plane(){}Plane.prototype={eql:function(a){return(this.contains(a.anchor)&&this.isParallelTo(a))},dup:function(){return Plane.create(this.anchor,this.normal)},translate:function(b){var a=b.elements||b;return Plane.create([this.anchor.elements[0]+a[0],this.anchor.elements[1]+a[1],this.anchor.elements[2]+(a[2]||0)],this.normal)},isParallelTo:function(b){var a;if(b.normal){a=this.normal.angleFrom(b.normal);return(Math.abs(a)<=Sylvester.precision||Math.abs(Math.PI-a)<=Sylvester.precision)}else{if(b.direction){return this.normal.isPerpendicularTo(b.direction)}}return null},isPerpendicularTo:function(a){var b=this.normal.angleFrom(a.normal);return(Math.abs(Math.PI/2-b)<=Sylvester.precision)},distanceFrom:function(c){if(this.intersects(c)||this.contains(c)){return 0}if(c.anchor){var a=this.anchor.elements,e=c.anchor.elements,d=this.normal.elements;return Math.abs((a[0]-e[0])*d[0]+(a[1]-e[1])*d[1]+(a[2]-e[2])*d[2])}else{var b=c.elements||c;var a=this.anchor.elements,d=this.normal.elements;return Math.abs((a[0]-b[0])*d[0]+(a[1]-b[1])*d[1]+(a[2]-(b[2]||0))*d[2])}},contains:function(d){if(d.normal){return null}if(d.direction){return(this.contains(d.anchor)&&this.contains(d.anchor.add(d.direction)))}else{var b=d.elements||d;var a=this.anchor.elements,e=this.normal.elements;var c=Math.abs(e[0]*(a[0]-b[0])+e[1]*(a[1]-b[1])+e[2]*(a[2]-(b[2]||0)));return(c<=Sylvester.precision)}},intersects:function(a){if(typeof(a.direction)=="undefined"&&typeof(a.normal)=="undefined"){return null}return !this.isParallelTo(a)},intersectionWith:function(l){if(!this.intersects(l)){return null}if(l.direction){var d=l.anchor.elements,a=l.direction.elements,m=this.anchor.elements,o=this.normal.elements;var s=(o[0]*(m[0]-d[0])+o[1]*(m[1]-d[1])+o[2]*(m[2]-d[2]))/(o[0]*a[0]+o[1]*a[1]+o[2]*a[2]);return Vector.create([d[0]+a[0]*s,d[1]+a[1]*s,d[2]+a[2]*s])}else{if(l.normal){var r=this.normal.cross(l.normal).toUnitVector();var o=this.normal.elements,d=this.anchor.elements,n=l.normal.elements,c=l.anchor.elements;var t=Matrix.Zero(2,2),k=0;while(t.isSingular()){k++;t=Matrix.create([[o[k%3],o[(k+1)%3]],[n[k%3],n[(k+1)%3]]])}var f=t.inverse().elements;var q=o[0]*d[0]+o[1]*d[1]+o[2]*d[2];var p=n[0]*c[0]+n[1]*c[1]+n[2]*c[2];var b=[f[0][0]*q+f[0][1]*p,f[1][0]*q+f[1][1]*p];var g=[];for(var e=1;e<=3;e++){g.push((k==e)?0:b[(e+(5-k)%3)%3])}return Line.create(g,r)}}},pointClosestTo:function(b){var d=b.elements||b;var a=this.anchor.elements,e=this.normal.elements;var c=(a[0]-d[0])*e[0]+(a[1]-d[1])*e[1]+(a[2]-(d[2]||0))*e[2];return Vector.create([d[0]+e[0]*c,d[1]+e[1]*c,(d[2]||0)+e[2]*c])},rotate:function(p,q){var f=Matrix.Rotation(p,q.direction).elements;var a=q.pointClosestTo(this.anchor).elements;var c=this.anchor.elements,l=this.normal.elements;var k=a[0],i=a[1],g=a[2],e=c[0],d=c[1],b=c[2];var o=e-k,n=d-i,m=b-g;return Plane.create([k+f[0][0]*o+f[0][1]*n+f[0][2]*m,i+f[1][0]*o+f[1][1]*n+f[1][2]*m,g+f[2][0]*o+f[2][1]*n+f[2][2]*m],[f[0][0]*l[0]+f[0][1]*l[1]+f[0][2]*l[2],f[1][0]*l[0]+f[1][1]*l[1]+f[1][2]*l[2],f[2][0]*l[0]+f[2][1]*l[1]+f[2][2]*l[2]])},reflectionIn:function(f){if(f.normal){var c=this.anchor.elements,l=this.normal.elements;var e=c[0],d=c[1],b=c[2],o=l[0],n=l[1],m=l[2];var a=this.anchor.reflectionIn(f).elements;var r=e+o,q=d+n,p=b+m;var i=f.pointClosestTo([r,q,p]).elements;var g=[i[0]+(i[0]-r)-a[0],i[1]+(i[1]-q)-a[1],i[2]+(i[2]-p)-a[2]];return Plane.create(a,g)}else{if(f.direction){return this.rotate(Math.PI,f)}else{var k=f.elements||f;return Plane.create(this.anchor.reflectionIn([k[0],k[1],(k[2]||0)]),this.normal)}}},setVectors:function(k,p,o){k=Vector.create(k);k=k.to3D();if(k===null){return null}p=Vector.create(p);p=p.to3D();if(p===null){return null}if(typeof(o)=="undefined"){o=null}else{o=Vector.create(o);o=o.to3D();if(o===null){return null}}var f=k.elements[0],e=k.elements[1],d=k.elements[2];var l=p.elements[0],i=p.elements[1],g=p.elements[2];var m,n;if(o!==null){var c=o.elements[0],b=o.elements[1],a=o.elements[2];m=Vector.create([(i-e)*(a-d)-(g-d)*(b-e),(g-d)*(c-f)-(l-f)*(a-d),(l-f)*(b-e)-(i-e)*(c-f)]);n=m.modulus();if(n===0){return null}m=Vector.create([m.elements[0]/n,m.elements[1]/n,m.elements[2]/n])}else{n=Math.sqrt(l*l+i*i+g*g);if(n===0){return null}m=Vector.create([p.elements[0]/n,p.elements[1]/n,p.elements[2]/n])}this.anchor=k;this.normal=m;return this}};Plane.create=function(a,d,c){var b=new Plane();return b.setVectors(a,d,c)};Plane.XY=Plane.create(Vector.Zero(3),Vector.k);Plane.YZ=Plane.create(Vector.Zero(3),Vector.i);Plane.ZX=Plane.create(Vector.Zero(3),Vector.j);Plane.YX=Plane.XY;Plane.ZY=Plane.YZ;Plane.XZ=Plane.ZX;var $V=Vector.create;var $M=Matrix.create;var $L=Line.create;var $P=Plane.create;Matrix.Translation=function(a){if(a.elements.length==2){var b=Matrix.I(3);b.elements[2][0]=a.elements[0];b.elements[2][1]=a.elements[1];return b}if(a.elements.length==3){var b=Matrix.I(4);b.elements[0][3]=a.elements[0];b.elements[1][3]=a.elements[1];b.elements[2][3]=a.elements[2];return b}throw"Invalid length for Translation"};Matrix.prototype.flatten=function(){var a=[];if(this.elements.length==0){return[]}for(var b=0;b<this.elements[0].length;b++){for(var c=0;c<this.elements.length;c++){a.push(this.elements[c][b])}}return a};Matrix.prototype.ensure4x4=function(){if(this.elements.length==4&&this.elements[0].length==4){return this}if(this.elements.length>4||this.elements[0].length>4){return null}for(var b=0;b<this.elements.length;b++){for(var a=this.elements[b].length;a<4;a++){if(b==a){this.elements[b].push(1)}else{this.elements[b].push(0)}}}for(var b=this.elements.length;b<4;b++){if(b==0){this.elements.push([1,0,0,0])}else{if(b==1){this.elements.push([0,1,0,0])}else{if(b==2){this.elements.push([0,0,1,0])}else{if(b==3){this.elements.push([0,0,0,1])}}}}}return this};Matrix.prototype.make3x3=function(){if(this.elements.length!=4||this.elements[0].length!=4){return null}return Matrix.create([[this.elements[0][0],this.elements[0][1],this.elements[0][2]],[this.elements[1][0],this.elements[1][1],this.elements[1][2]],[this.elements[2][0],this.elements[2][1],this.elements[2][2]]])};Vector.prototype.flatten=function(){return this.elements};function mht(a){var c="";if(a.length==16){for(var b=0;b<4;b++){c+="<span style='font-family: monospace'>["+a[b*4+0].toFixed(4)+","+a[b*4+1].toFixed(4)+","+a[b*4+2].toFixed(4)+","+a[b*4+3].toFixed(4)+"]</span><br>"}}else{if(a.length==9){for(var b=0;b<3;b++){c+="<span style='font-family: monospace'>["+a[b*3+0].toFixed(4)+","+a[b*3+1].toFixed(4)+","+a[b*3+2].toFixed(4)+"]</font><br>"}}else{return a.toString()}}return c}function makeLookAt(s,r,q,d,c,a,g,f,e){var u=$V([s,r,q]);var v=$V([d,c,a]);var n=$V([g,f,e]);var b;var i=u.subtract(v).toUnitVector();var l=n.cross(i).toUnitVector();var k=i.cross(l).toUnitVector();var p=$M([[l.e(1),l.e(2),l.e(3),0],[k.e(1),k.e(2),k.e(3),0],[i.e(1),i.e(2),i.e(3),0],[0,0,0,1]]);var o=$M([[1,0,0,-s],[0,1,0,-r],[0,0,1,-q],[0,0,0,1]]);return p.x(o)}function makeOrtho(b,i,a,g,k,f){var e=-(i+b)/(i-b);var d=-(g+a)/(g-a);var c=-(f+k)/(f-k);return $M([[2/(i-b),0,0,e],[0,2/(g-a),0,d],[0,0,-2/(f-k),c],[0,0,0,1]])}function makePerspective(d,c,b,i){var a=b*Math.tan(d*Math.PI/360);var f=-a;var g=f*c;var e=a*c;return makeFrustum(g,e,f,a,b,i)}function makeFrustum(i,m,b,l,n,k){var g=2*n/(m-i);var e=2*n/(l-b);var f=(m+i)/(m-i);var d=(l+b)/(l-b);var c=-(k+n)/(k-n);var a=-2*k*n/(k-n);return $M([[g,0,f,0],[0,e,d,0],[0,0,c,a],[0,0,-1,0]])}function makeOrtho(b,i,a,g,k,f){var e=-(i+b)/(i-b);var d=-(g+a)/(g-a);var c=-(f+k)/(f-k);return $M([[2/(i-b),0,0,e],[0,2/(g-a),0,d],[0,0,-2/(f-k),c],[0,0,0,1]])}if(!self.bigshot){bigshot={};bigshot.Object={extend:function(b,c){for(var a in c.prototype){if(b.prototype[a]){b.prototype[a]._super=c.prototype[a]}else{b.prototype[a]=c.prototype[a]}}},resolve:function(b){var e=b.split(".");var a=self;for(var d=0;d<e.length;++d){a=a[e[d]]}return a},validate:function(a,b){},alertr:function(b){var c="";for(var a in b){c+=a+":"+b[a]+"\n"}alert(c)},logr:function(b){var c="";for(var a in b){c+=a+":"+b[a]+"\n"}if(console){console.log(c)}}};bigshot.Browser=function(){this.requestAnimationFrameFunction=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||function(b,a){return setTimeout(b,0)}};bigshot.Browser.prototype={removeAllChildren:function(a){a.innerHTML=""},mouseEnter:function(b){var a=this.isAChildOf;return function(c){var d=c.relatedTarget;if(this===d||a(this,d)){return}b.call(this,c)}},isAChildOf:function(b,a){if(b===a){return false}while(a&&a!==b){a=a.parentNode}return a===b},unregisterListener:function(d,b,c,a){if(typeof(d.removeEventListener)!="undefined"){d.removeEventListener(b,c,a)}else{if(typeof(d.detachEvent)!="undefined"){d.detachEvent("on"+b,c)}}},registerListener:function(a,b,d,c){if(typeof a.addEventListener!="undefined"){if(b==="mouseenter"){a.addEventListener("mouseover",this.mouseEnter(d),c)}else{if(b==="mouseleave"){a.addEventListener("mouseout",this.mouseEnter(d),c)}else{a.addEventListener(b,d,c)}}}else{if(typeof a.attachEvent!="undefined"){a.attachEvent("on"+b,d)}else{a["on"+b]=d}}},stopEventBubbling:function(a){if(a){if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}}},stopEventBubblingHandler:function(){var a=this;return function(b){a.stopEventBubbling(b);return false}},stopMouseEventBubbling:function(a){this.registerListener(a,"mousedown",this.stopEventBubblingHandler(),false);this.registerListener(a,"mouseup",this.stopEventBubblingHandler(),false);this.registerListener(a,"mousemove",this.stopEventBubblingHandler(),false)},getElementSize:function(b){var a={};if(b.clientWidth){a.w=b.clientWidth}if(b.clientHeight){a.h=b.clientHeight}return a},browserIsViewporting:function(){if(window.innerWidth<=screen.width){return false}else{return true}},getDevicePixelScale:function(){if(this.browserIsViewporting()){return screen.width/window.innerWidth}else{return 1}},requestAnimationFrame:function(c,a){var b=this.requestAnimationFrameFunction;b(c,a)},getElementPosition:function(b){var a=new Object();a.x=0;a.y=0;var c=b;while(c){a.x+=c.offsetLeft;a.y+=c.offsetTop;if(c.clientLeft){a.x+=c.clientLeft}if(c.clientTop){a.y+=c.clientTop}if(c.x){a.x+=c.x}if(c.y){a.y+=c.y}c=c.offsetParent}return a},createXMLHttpRequest:function(){try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(a){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){}try{return new XMLHttpRequest()}catch(a){}alert("XMLHttpRequest not supported");return null},makeOpacityTransition:function(a,b){if(a.style.WebkitTransitionProperty!=undefined){a.style.opacity=1;a.style.WebkitTransitionProperty="opacity";a.style.WebkitTransitionTimingFunction="linear";a.style.WebkitTransitionDuration="1s";setTimeout(function(){a.addEventListener("webkitTransitionEnd",function(){b()});a.style.opacity=0},0)}else{a.style.opacity=0;b()}}};bigshot.EventDispatcher=function(){this.eventListeners={}};bigshot.EventDispatcher.prototype={addEventListener:function(a,b){if(this.eventListeners[a]==undefined){this.eventListeners[a]=new Array()}this.eventListeners[a].push(b)},removeEventListener:function(a,d){if(this.eventListeners[a]!=undefined){var c=this.eventListeners[a];for(var b=0;b<c.length;++b){if(c[b]===listener){c.splice(b,1);if(c.length==0){delete this.eventListeners[a]}break}}}},fireEvent:function(b,a){if(this.eventListeners[b]!=undefined){var d=this.eventListeners[b];for(var c=0;c<d.length;++c){d[c](a)}}}};bigshot.Event=function(b){this.bubbles=false;this.cancelable=false;this.currentTarget=null;this.defaultPrevented=false;this.target=null;this.timeStamp=new Date().getTime();this.type=null;this.isTrusted=false;for(var a in b){this[a]=b[a]}};bigshot.Event.prototype={preventDefault:function(){this.defaultPrevented=true}};bigshot.TimedWeakReference=function(b,c,a){this.object=null;this.hasObject=false;this.fnCreate=b;this.fnDispose=c;this.lastAccess=new Date().getTime();this.hasTimer=false;this.interval=a};bigshot.TimedWeakReference.prototype={dispose:function(){this.clear()},get:function(){if(!this.hasObject){this.hasObject=true;this.object=this.fnCreate();this.startTimer()}this.lastAccess=new Date().getTime();return this.object},clear:function(){if(this.hasObject){this.hasObject=false;this.fnDispose(this.object);this.object=null;this.stopTimer()}},stopTimer:function(){if(this.hasTimer){clearTimeout(this.timerId);this.hasTimer=false}},startTimer:function(){if(!this.hasTimer){var a=this;this.hasTimer=true;this.timerId=setTimeout(function(){a.hasTimer=false;a.update()},this.interval)}},update:function(){if(this.hasObject){var a=new Date().getTime();if(a-this.lastAccess>this.interval){this.clear()}else{this.startTimer()}}}};bigshot.ImageEvent=function(a){bigshot.Event.call(this,a)};bigshot.ImageEvent.prototype={};bigshot.Object.extend(bigshot.ImageEvent,bigshot.Event);bigshot.VREvent=function(a){bigshot.Event.call(this,a)};bigshot.VREvent.prototype={};bigshot.Object.extend(bigshot.VREvent,bigshot.Event);bigshot.FullScreen=function(a){this.container=a;this.isFullScreen=false;this.savedBodyStyle=null;this.savedParent=null;this.savedSize=null;this.expanderDiv=null;this.restoreSize=false;this.onCloseHandlers=new Array();this.onResizeHandlers=new Array();var b=function(d,e){for(var c=0;c<e.length;++c){if(d[e[c]]){return e[c]}}return null};this.requestFullScreen=b(a,["requestFullScreen","mozRequestFullScreen","webkitRequestFullScreen"]);this.cancelFullScreen=b(document,["cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen"]);this.restoreSize=this.requestFullScreen!=null};bigshot.FullScreen.prototype={browser:new bigshot.Browser(),getRootElement:function(){return this.div},addOnClose:function(a){this.onCloseHandlers.push(a)},onClose:function(){for(var a=0;a<this.onCloseHandlers.length;++a){this.onCloseHandlers[a]()}},addOnResize:function(a){this.onResizeHandlers.push(a)},onResize:function(){for(var a=0;a<this.onResizeHandlers.length;++a){this.onResizeHandlers[a]()}},open:function(){this.isFullScreen=true;if(this.requestFullScreen){return this.openRequestFullScreen()}else{return this.openCompat()}},openRequestFullScreen:function(){this.savedSize={width:this.container.style.width,height:this.container.style.height};this.container.style.width="100%";this.container.style.height="100%";var a=this;if(this.requestFullScreen=="mozRequestFullScreen"){var c=function(){a.container.removeEventListener("mozfullscreenerror",c);a.isFullScreen=false;a.exitFullScreenHandler();a.onClose()};this.container.addEventListener("mozfullscreenerror",c);var b=function(){if(document.mozFullScreenElement!==a.container){document.removeEventListener("mozfullscreenchange",b);a.exitFullScreenHandler()}else{a.onResize()}};document.addEventListener("mozfullscreenchange",b)}else{var b=function(){if(document.webkitCurrentFullScreenElement!==a.container){a.container.removeEventListener("webkitfullscreenchange",b);a.exitFullScreenHandler()}else{a.onResize()}};this.container.addEventListener("webkitfullscreenchange",b)}this.exitFullScreenHandler=function(){if(a.isFullScreen){a.isFullScreen=false;document[a.cancelFullScreen]();if(a.restoreSize){a.container.style.width=a.savedSize.width;a.container.style.height=a.savedSize.height}a.onResize();a.onClose()}};this.container[this.requestFullScreen]()},openCompat:function(){this.savedParent=this.container.parentNode;this.savedSize={width:this.container.style.width,height:this.container.style.height};this.savedBodyStyle=document.body.style.cssText;document.body.style.overflow="hidden";this.expanderDiv=document.createElement("div");this.expanderDiv.style.position="absolute";this.expanderDiv.style.top="0px";this.expanderDiv.style.left="0px";this.expanderDiv.style.width=Math.max(window.innerWidth,document.documentElement.clientWidth)+"px";this.expanderDiv.style.height=Math.max(window.innerHeight,document.documentElement.clientHeight)+"px";document.body.appendChild(this.expanderDiv);this.div=document.createElement("div");this.div.style.position="fixed";this.div.style.top=window.pageYOffset+"px";this.div.style.left=window.pageXOffset+"px";this.div.style.width=window.innerWidth+"px";this.div.style.height=window.innerHeight+"px";this.div.style.zIndex=9998;this.div.appendChild(this.container);document.body.appendChild(this.div);var c=this;var b=function(f){setTimeout(function(){c.div.style.width=window.innerWidth+"px";c.div.style.height=window.innerHeight+"px";setTimeout(function(){c.onResize()},1)},1)};var d=function(f){c.expanderDiv.style.width=Math.max(window.innerWidth,document.documentElement.clientWidth)+"px";c.expanderDiv.style.height=Math.max(window.innerHeight,document.documentElement.clientHeight)+"px";setTimeout(function(){c.div.style.top=window.pageYOffset+"px";c.div.style.left=window.pageXOffset+"px";c.div.style.width=window.innerWidth+"px";c.div.style.height=window.innerHeight+"px";setTimeout(function(){c.onResize()},1)},1)};var a=function(f){if(f.keyCode==27){c.exitFullScreenHandler()}};this.exitFullScreenHandler=function(){c.isFullScreen=false;c.browser.unregisterListener(document,"keydown",a);c.browser.unregisterListener(window,"resize",b);c.browser.unregisterListener(document.body,"orientationchange",d);if(c.restoreSize){c.container.style.width=c.savedSize.width;c.container.style.height=c.savedSize.height}document.body.style.cssText=c.savedBodyStyle;c.savedParent.appendChild(c.container);document.body.removeChild(c.div);document.body.removeChild(c.expanderDiv);c.onResize();c.onClose();setTimeout(function(){c.onResize()},1)};this.browser.registerListener(document,"keydown",a,false);this.browser.registerListener(window,"resize",b,false);this.browser.registerListener(document.body,"orientationchange",d,false);this.onResize();return this.exitFullScreenHandler},close:function(){this.exitFullScreenHandler()}};bigshot.DataLoader=function(){};bigshot.DataLoader.prototype={loadImage:function(a,b){},loadXml:function(a,b,c){}};bigshot.DefaultDataLoader=function(b,a){this.maxRetries=b;this.crossOrigin=a;if(!this.maxRetries){this.maxRetries=0}};bigshot.DefaultDataLoader.prototype={browser:new bigshot.Browser(),loadImage:function(a,d){var c=document.createElement("img");c.retries=0;if(this.crossOrigin!=null){c.crossOrigin=this.crossOrigin}var b=this;this.browser.registerListener(c,"load",function(){if(d){d(c)}},false);this.browser.registerListener(c,"error",function(){c.retries++;if(c.retries<=b.maxRetries){setTimeout(function(){c.src=a},c.retries*1000)}else{if(d){d(null)}}},false);c.src=a;return c},loadXml:function(c,a,f){for(var e=0;e<=this.maxRetries;++e){var d=this.browser.createXMLHttpRequest();d.open("GET",c,false);d.send(null);if(d.status==200){var b=d.responseXML;if(b!=null){if(f){f(b)}return b}}if(e==that.maxRetries){if(f){f(null)}return null}}}};bigshot.Object.validate("bigshot.DefaultDataLoader",bigshot.DataLoader);bigshot.CachingDataLoader=function(){this.cache={};this.requested={};this.requestedTiles={}};bigshot.CachingDataLoader.prototype={browser:new bigshot.Browser(),loadImage:function(a,d){if(this.cache[a]){if(d){d(this.cache[a])}return this.cache[a]}else{if(this.requested[a]){if(d){this.requested[a].push(d)}return this.requestedTiles[a]}else{var c=this;this.requested[a]=new Array();if(d){this.requested[a].push(d)}var b=document.createElement("img");this.requestedTiles[a]=b;this.browser.registerListener(b,"load",function(){var f=c.requested[a];delete c.requested[a];delete c.requestedTiles[a];c.cache[a]=b;for(var e=0;e<f.length;++e){f[e](b)}},false);b.src=a;return b}}},loadXml:function(a,c,f){if(this.cache[a]){if(f){f(this.cache[a])}return this.cache[a]}else{if(this.requested[a]&&c){if(f){this.requested[a].push(f)}}else{var e=this.browser.createXMLHttpRequest();if(!this.requested[a]){this.requested[a]=new Array()}if(c){if(f){this.requested[a].push(f)}}var d=this;var b=function(){if(d.requested[a]){var g=null;if(e.status==200){g=e.responseXML}var l=d.requested[a];delete d.requested[a];d.cache[a]=g;for(var k=0;k<l.length;++k){l[k](g)}}return g};if(c){e.onreadystatechange=function(){if(e.readyState==4){b()}};e.open("GET",a,true);e.send()}else{e.open("GET",a,false);e.send();return b()}}}}};bigshot.Object.validate("bigshot.CachingDataLoader",bigshot.DataLoader);bigshot.Hotspot=function(a,e,b,d){var c=document.createElement("div");c.style.position="absolute";c.style.overflow="visible";this.element=c;this.x=a;this.y=e;this.w=b;this.h=d};bigshot.Hotspot.prototype={browser:new bigshot.Browser(),layout:function(c,e,d){var g=this.x*d+c;var f=this.y*d+e;var a=this.w*d;var b=this.h*d;this.element.style.top=f+"px";this.element.style.left=g+"px";this.element.style.width=a+"px";this.element.style.height=b+"px"},getElement:function(){return this.element}};bigshot.PointHotspot=function(a,i,b,e,f,g,c){bigshot.Hotspot.call(this,a,i,b,e);this.xo=f;this.yo=g;if(c){var d=this.getElement();d.style.backgroundImage="url('"+c+"')";d.style.backgroundRepeat="no-repeat"}};bigshot.PointHotspot.prototype={getLabel:function(){return this.label},layout:function(a,c,b){var e=this.x*b+a+this.xo;var d=this.y*b+c+this.yo;this.element.style.top=d+"px";this.element.style.left=e+"px";this.element.style.width=this.w+"px";this.element.style.height=this.h+"px"}};bigshot.Object.extend(bigshot.PointHotspot,bigshot.Hotspot);bigshot.Layer=function(){};bigshot.Layer.prototype={getContainer:function(){},setMaxTiles:function(a,b){},resize:function(a,b){},layout:function(g,e,f,a,d,c,i,b){}};bigshot.LabeledHotspot=function(a,e,b,c,d){bigshot.Hotspot.call(this,a,e,b,c);this.label=document.createElement("div");this.label.style.position="relative";this.label.style.display="inline-block";this.getElement().appendChild(this.label);this.label.innerHTML=d;this.labelSize=this.browser.getElementSize(this.label)};bigshot.LabeledHotspot.prototype={getLabel:function(){return this.label},layout:function(c,e,d){this.layout._super.call(this,c,e,d);var a=this.w*d;var b=this.h*d;this.label.style.top=(b+4)+"px";this.label.style.left=((a-this.labelSize.w)/2)+"px"}};bigshot.Object.extend(bigshot.LabeledHotspot,bigshot.Hotspot);bigshot.LinkHotspot=function(a,f,b,d,e,c){bigshot.LabeledHotspot.call(this,a,f,b,d,e);this.browser.registerListener(this.getElement(),"click",function(){document.location.href=c})};bigshot.Object.extend(bigshot.LinkHotspot,bigshot.LabeledHotspot);bigshot.HotspotLayer=function(a){this.image=a;this.hotspots=new Array();this.browser=new bigshot.Browser();this.container=a.createLayerContainer();this.parentContainer=a.getContainer();this.resize(0,0)};bigshot.HotspotLayer.prototype={getContainer:function(){return this.container},resize:function(a,b){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px"},layout:function(l,d,k,e,a,m,b,g){var c=Math.pow(2,this.image.getZoom());d-=b*e;k-=b*a;for(var f=0;f<this.hotspots.length;++f){this.hotspots[f].layout(d,k,c)}},setMaxTiles:function(b,a){},addHotspot:function(a){this.container.appendChild(a.getElement());this.hotspots.push(a)}};bigshot.Object.validate("bigshot.HotspotLayer",bigshot.Layer);bigshot.TileLayer=function(d,c,a,b,e){this.rows=new Array();this.browser=new bigshot.Browser();this.container=d.createLayerContainer();this.parentContainer=d.getContainer();this.parameters=c;this.w=a;this.h=b;this.imageTileCache=e;this.resize(a,b);return this};bigshot.TileLayer.prototype={getContainer:function(){return this.container},resize:function(a,d){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px";this.pixelWidth=this.parentContainer.clientWidth;this.pixelHeight=this.parentContainer.clientHeight;this.w=a;this.h=d;this.rows=new Array();this.browser.removeAllChildren(this.container);for(var f=0;f<d;++f){var g=new Array();for(var i=0;i<a;++i){var b=document.createElement("div");b.style.position="absolute";b.style.overflow="hidden";b.style.width=this.container.clientWidth+"px";b.style.height=this.container.clientHeight+"px";var e=document.createElement("div");e.style.position="relative";e.style.border="hidden";e.style.visibility="hidden";e.bigshotData={visible:false};g.push(e);this.container.appendChild(b);b.appendChild(e)}this.rows.push(g)}},layout:function(a,q,d,A,f,n,p,e){a=Math.min(0,Math.ceil(a));this.imageTileCache.resetUsed();var g=d;var b=0;for(var l=0;l<this.h;++l){var i=q;for(var t=0;t<this.w;++t){var z=this.rows[l][t];var k=z.bigshotData;if(i+n<0||i>this.pixelWidth||g+n<0||g>this.pixelHeight){if(k.visible){k.visible=false;z.style.visibility="hidden"}}else{b++;z.style.left=i+"px";z.style.top=g+"px";z.style.width=n+"px";z.style.height=n+"px";z.style.opacity=e;if(!k.visible){k.visible=true;z.style.visibility="visible"}var v=t+A;var u=l+f;if(this.parameters.wrapX){if(v<0||v>=this.imageTileCache.maxTileX){v=(v+this.imageTileCache.maxTileX)%this.imageTileCache.maxTileX}}if(this.parameters.wrapY){if(u<0||u>=this.imageTileCache.maxTileY){u=(u+this.imageTileCache.maxTileY)%this.imageTileCache.maxTileY}}var o=v+"_"+u+"_"+a;var s=v<0||v>=this.imageTileCache.maxTileX||u<0||u>=this.imageTileCache.maxTileY;if(s){if(!k.isOutside){var m=this.imageTileCache.getImage(v,u,a);this.browser.removeAllChildren(z);z.appendChild(m);k.image=m}k.isOutside=true;k.imageKey="EMPTY";k.image.style.width=n+"px";k.image.style.height=n+"px"}else{var m=this.imageTileCache.getImage(v,u,a);k.isOutside=false;if(k.imageKey!==o||k.isPartial){this.browser.removeAllChildren(z);z.appendChild(m);k.image=m;k.imageKey=o;k.isPartial=m.isPartial}k.image.style.width=n+"px";k.image.style.height=n+"px"}}i+=p}g+=p}},setMaxTiles:function(b,a){this.imageTileCache.setMaxTiles(b,a)}};bigshot.Object.validate("bigshot.TileLayer",bigshot.Layer);bigshot.LRUMap=function(){this.keyToTime={};this.counter=0;this.size=0};bigshot.LRUMap.prototype={access:function(a){this.remove(a);this.keyToTime[a]=this.counter;++this.counter;++this.size},remove:function(a){if(this.keyToTime[a]){delete this.keyToTime[a];--this.size;return true}else{return false}},getSize:function(){return this.size},leastUsed:function(){var b=this.counter+1;var c=null;for(var a in this.keyToTime){if(this.keyToTime[a]<b){b=this.keyToTime[a];c=a}}return c}};bigshot.ImageTileCache=function(d,a,c){var b=this;this.parameters=c;this.fullImage=null;c.dataLoader.loadImage(c.fileSystem.getPosterFilename(),function(e){b.fullImage=e;if(a){a()}});this.maxCacheSize=512;this.maxTileX=0;this.maxTileY=0;this.cachedImages={};this.requestedImages={};this.usedImages={};this.lastOnLoadFiredAt=0;this.imageRequests=0;this.lruMap=new bigshot.LRUMap();this.onLoaded=d;this.browser=new bigshot.Browser();this.partialImageSize=c.tileSize/4;this.POSTER_ZOOM_LEVEL=Math.log(c.posterSize/Math.max(c.width,c.height))/Math.log(2)};bigshot.ImageTileCache.prototype={resetUsed:function(){this.usedImages={}},setMaxTiles:function(b,a){this.maxTileX=b;this.maxTileY=a},getPartialImage:function(c,b,d){var a=this.getPartialImageFromDownsampled(c,b,d,0,0,this.parameters.tileSize,this.parameters.tileSize);if(a==null){a=this.getPartialImageFromPoster(c,b,d)}return a},getPartialImageFromPoster:function(d,c,e){if(this.fullImage&&this.fullImage.complete){var a=this.fullImage.width/this.parameters.width;var b=a*this.parameters.tileSize/Math.pow(2,e);x0=Math.floor(b*d);y0=Math.floor(b*c);w=Math.floor(b);h=Math.floor(b);return this.createPartialImage(this.fullImage,this.fullImage.width,x0,y0,w,h)}else{return null}},createPartialImage:function(f,l,b,q,r,g){var c=document.createElement("canvas");if(!c.width){return null}c.width=this.partialImageSize;c.height=this.partialImageSize;var s=c.getContext("2d");var d=f.width/l;var p=Math.floor(b*d);var o=Math.floor(q*d);var a=this.partialImageSize;var m=this.partialImageSize;r*=d;if(p+r>=f.width){var i=r;r=f.width-p;a*=r/i}g*=d;if(o+g>=f.height){var n=g;g=f.height-o;m*=g/n}try{s.drawImage(f,p,o,r,g,-0.1,-0.1,a+0.2,m+0.2)}catch(k){return null}return c},getPartialImageFromDownsampled:function(a,k,d,b,f,g,e){if(d<this.POSTER_ZOOM_LEVEL||d<this.parameters.minZoom){return null}var i=this.getImageKey(a,k,d);var c=this.cachedImages[i];if(c==null){this.requestImage(a,k,d)}if(c){return this.createPartialImage(c,this.parameters.tileSize,b,f,g,e)}else{g/=2;e/=2;b/=2;f/=2;if((a%2)==1){b+=this.parameters.tileSize/2}if((k%2)==1){f+=this.parameters.tileSize/2}a=Math.floor(a/2);k=Math.floor(k/2);--d;return this.getPartialImageFromDownsampled(a,k,d,b,f,g,e)}},getEmptyImage:function(){var a=document.createElement("img");if(this.parameters.emptyImage){a.src=this.parameters.emptyImage}else{a.src="data:image/gif,GIF89a%01%00%01%00%80%00%00%00%00%00%FF%FF%FF!%F9%04%00%00%00%00%00%2C%00%00%00%00%01%00%01%00%00%02%02D%01%00%3B"}return a},getImage:function(e,d,f){if(e<0||d<0||e>=this.maxTileX||d>=this.maxTileY){return this.getEmptyImage()}var b=this.getImageKey(e,d,f);this.lruMap.access(b);if(this.cachedImages[b]){if(this.usedImages[b]){var c=this.parameters.dataLoader.loadImage(this.getImageFilename(e,d,f));c.isPartial=false;return c}else{this.usedImages[b]=true;var a=this.cachedImages[b];return a}}else{this.requestImage(e,d,f);var a=this.getPartialImage(e,d,f);if(a!=null){a.isPartial=true;this.cachedImages[b]=a}else{a=this.getEmptyImage();if(a!=null){a.isPartial=true}}return a}},requestImage:function(d,c,e){var a=this.getImageKey(d,c,e);if(!this.requestedImages[a]){this.imageRequests++;var b=this;this.requestedImages[a]=true;this.parameters.dataLoader.loadImage(this.getImageFilename(d,c,e),function(f){delete b.requestedImages[a];b.imageRequests--;f.isPartial=false;b.cachedImages[a]=f;b.fireOnLoad()})}},fireOnLoad:function(){var a=new Date();if(this.imageRequests==0||a.getTime()>(this.lastOnLoadFiredAt+50)){this.purgeCache();this.lastOnLoadFiredAt=a.getTime();this.onLoaded()}},purgeCache:function(){for(var a=0;a<4;++a){if(this.lruMap.getSize()>this.maxCacheSize){var b=this.lruMap.leastUsed();this.lruMap.remove(b);delete this.cachedImages[b]}}},getImageKey:function(b,a,c){return"I"+b+"_"+a+"_"+c},getImageFilename:function(c,a,d){var b=this.parameters.fileSystem.getImageFilename(c,a,d);return b}};bigshot.ImageParameters=function(b){this.posterSize=0;this.emptyImage=null;this.suffix=null;this.width=0;this.height=0;this.container=null;this.minZoom=0;this.maxZoom=0;this.tileSize=0;this.overlap=0;this.wrapX=false;this.wrapY=false;this.basePath=null;this.fileSystemType="folder";this.fileSystem=null;this.dataLoader=new bigshot.DefaultDataLoader();this.touchUI=false;this.fling=true;this.maxTextureMagnification=1;if(b){for(var a in b){this[a]=b[a]}}this.merge=function(d,e){for(var c in d){if(e||!this[c]){this[c]=d[c]}}};return this};bigshot.ImageBase=function(b){bigshot.EventDispatcher.call(this);this.parameters=b;this.flying=0;this.container=b.container;this.x=b.width/2;this.y=b.height/2;this.zoom=0;this.width=b.width;this.height=b.height;this.minZoom=b.minZoom;this.maxZoom=b.maxZoom;this.tileSize=b.tileSize;this.overlap=0;this.imageTileCache=null;this.dragStart=null;this.dragged=false;this.layers=new Array();this.fullScreenHandler=null;this.currentGesture=null;var a=this;this.onresizeHandler=function(f){a.onresize()};var d=function(e){if(e.preventDefault){e.preventDefault()}return false};var c=function(e){if(e.clientX){return e}else{return{clientX:e.changedTouches[0].clientX,clientY:e.changedTouches[0].clientY,changedTouches:e.changedTouches}}};this.setupLayers();this.resize();this.allListeners={DOMMouseScroll:function(f){a.mouseWheel(f);return d(f)},mousewheel:function(f){a.mouseWheel(f);return d(f)},dblclick:function(f){a.mouseDoubleClick(f);return d(f)},mousedown:function(f){a.dragMouseDown(f);return d(f)},gesturestart:function(f){a.gestureStart(f);return d(f)},gesturechange:function(f){a.gestureChange(f);return d(f)},gestureend:function(f){a.gestureEnd(f);return d(f)},touchstart:function(f){a.dragMouseDown(c(f));return d(f)},mouseup:function(f){a.dragMouseUp(f);return d(f)},touchend:function(f){a.dragMouseUp(c(f));return d(f)},mousemove:function(f){a.dragMouseMove(f);return d(f)},mouseout:function(f){return d(f)},touchmove:function(f){a.dragMouseMove(c(f));return d(f)}};this.addEventListeners();this.browser.registerListener(window,"resize",a.onresizeHandler,false);this.zoomToFit()};bigshot.ImageBase.prototype={browser:new bigshot.Browser(),addEventListeners:function(){for(var a in this.allListeners){this.browser.registerListener(this.container,a,this.allListeners[a],false)}},removeEventListeners:function(){for(var a in this.allListeners){this.browser.unregisterListener(this.container,a,this.allListeners[a],false)}},setupLayers:function(){},getTextureStretch:function(){var a=Math.log(this.parameters.maxTextureMagnification/this.browser.getDevicePixelScale())/Math.LN2;return a},clampXY:function(k,g){var e=this.container.clientWidth;var d=this.container.clientHeight;var f=Math.pow(2,this.zoom);var b=e/f;var a=d/f;var i=function(n,q,o){var m=n/2;m=Math.min(q/2,m);if(o<m){o=m}var l=q-n/2;l=Math.max(q/2,l);if(o>l){o=l}return o};var c={};if(k!=null){c.x=i(b,this.width,k)}if(g!=null){c.y=i(a,this.height,g)}return c},layout:function(){var p=this.container.clientWidth;var c=this.container.clientHeight;var q=Math.min(this.maxZoom,Math.max(this.zoom-this.getTextureStretch(),this.minZoom));var m=Math.min(0,Math.ceil(q));var e=Math.pow(2,m);var n=this.clampXY(this.x,this.y);if(!this.parameters.wrapY){this.y=n.y}if(!this.parameters.wrapX){this.x=n.x}var v=this.tileSize/e;var k=Math.pow(2,this.zoom-m);var d=this.tileSize*k;var o=this.width/v;var l=this.height/v;var g=this.x/v;var f=this.y/v;var b=g-(p/2)/d;var a=f-(c/2)/d;var t=Math.floor(b);var s=Math.floor(a);var x=Math.round((b-t)*d);var u=Math.round((a-s)*d);for(var r=0;r<this.layers.length;++r){this.layers[r].layout(q,-x-d,-u-d,t-1,s-1,Math.ceil(d),Math.ceil(d),1)}},resize:function(){var c=Math.ceil(2*this.container.clientWidth/this.tileSize)+2;var a=Math.ceil(2*this.container.clientHeight/this.tileSize)+2;for(var b=0;b<this.layers.length;++b){this.layers[b].resize(c,a)}},createLayerContainer:function(){var a=document.createElement("div");a.style.position="absolute";a.style.overflow="hidden";return a},getContainer:function(){return this.container},addLayer:function(a){this.container.appendChild(a.getContainer());this.layers.push(a)},clampZoom:function(a){return Math.min(this.maxZoom,Math.max(a,this.minZoom))},setZoom:function(c,e){this.zoom=this.clampZoom(c);var g=Math.ceil(this.zoom-this.getTextureStretch());var b=Math.pow(2,g);var f=Math.ceil(b*this.width/this.tileSize);var d=Math.ceil(b*this.height/this.tileSize);for(var a=0;a<this.layers.length;++a){this.layers[a].setMaxTiles(f,d)}if(e){this.layout()}},setMaxZoom:function(a){this.maxZoom=a},getMaxZoom:function(){return this.maxZoom},setMinZoom:function(a){this.minZoom=a},getMinZoom:function(){return this.minZoom},adjustCoordinateForZoom:function(e,a,d,c){var b=Math.pow(2,d)/Math.pow(2,c);return a+(e-a)*b},gestureStart:function(a){this.currentGesture={startZoom:this.zoom,scale:a.scale}},gestureEnd:function(a){this.currentGesture=null;if(this.dragStart){this.dragStart.hadGesture=true}},gestureChange:function(d){if(this.currentGesture){if(this.dragStart){this.dragStart.hadGesture=true}var c=this.clampZoom(this.currentGesture.startZoom+Math.log(d.scale)/Math.log(2));var e=this.getZoom();if(this.currentGesture.clientX!==undefined&&this.currentGesture.clientY!==undefined){var b=this.clientToImage(this.currentGesture.clientX,this.currentGesture.clientY);var a=this.adjustCoordinateForZoom(this.x,b.x,e,c);var f=this.adjustCoordinateForZoom(this.y,b.y,e,c);this.moveTo(a,f,c)}else{this.setZoom(c);this.layout()}}},dragMouseDown:function(a){this.dragStart={x:a.clientX,y:a.clientY};this.dragLast={clientX:a.clientX,clientY:a.clientY,dx:0,dy:0,dt:1000000,time:new Date().getTime()};this.dragged=false},dragMouseMove:function(a){if(this.currentGesture!=null&&a.changedTouches!=null&&a.changedTouches.length>0){var e=0;var d=0;for(var k=0;k<a.changedTouches.length;++k){e+=a.changedTouches[k].clientX;d+=a.changedTouches[k].clientY}this.currentGesture.clientX=e/a.changedTouches.length;this.currentGesture.clientY=d/a.changedTouches.length}if(this.currentGesture==null&&this.dragStart!=null){var l={x:a.clientX-this.dragStart.x,y:a.clientY-this.dragStart.y};if(l.x!=0||l.y!=0){this.dragged=true}var c=Math.pow(2,this.zoom);var g=l.x/c;var f=l.y/c;this.dragStart={x:a.clientX,y:a.clientY};var b=new Date().getTime()-this.dragLast.time;if(b>20){this.dragLast={dx:this.dragLast.clientX-a.clientX,dy:this.dragLast.clientY-a.clientY,dt:b,clientX:a.clientX,clientY:a.clientY,time:new Date().getTime()}}this.moveTo(this.x-g,this.y-f)}},dragMouseUp:function(a){if(this.currentGesture==null&&!this.dragStart.hadGesture&&this.dragStart!=null){this.dragStart=null;if(!this.dragged){this.mouseClick(a)}else{var e=Math.pow(2,this.zoom);var k=this.dragLast.dx/e;var i=this.dragLast.dy/e;var d=Math.sqrt(k*k+i*i);var c=this.dragLast.dt;var b=new Date().getTime()-this.dragLast.time;this.dragLast=null;var g=c>0?(d/c):0;if(g>0.05&&b<250&&c>20&&this.parameters.fling){var f=new Date().getTime();k/=c;i/=c;this.flyTo(this.x+k*250,this.y+i*250,this.zoom)}}}},mouseDoubleClick:function(b){var a=this.createImageEventData({type:"dblclick",clientX:b.clientX,clientY:b.clientY});this.fireEvent("dblclick",a);if(!a.defaultPrevented){this.flyTo(a.imageX,a.imageY,this.zoom+0.5)}},getZoom:function(){return this.zoom},moveTo:function(a,d,b,c){this.stopFlying();if(a!=null||d!=null){this.setPosition(a,d,false)}if(b!=null){this.setZoom(b,false)}if(c==undefined||c==true){this.layout()}},setPosition:function(a,d,c){var b=this.clampXY(a,d);if(a!=null){if(this.parameters.wrapX){if(a<0||a>=this.width){a=(a+this.width)%this.width}}else{a=b.x}this.x=Math.max(0,Math.min(this.width,a))}if(d!=null){if(this.parameters.wrapY){if(d<0||d>=this.height){d=(d+this.height)%this.height}}else{d=b.y}this.y=Math.max(0,Math.min(this.height,d))}if(c!=false){this.layout()}},fitZoom:function(c,a){var b=a/c;return Math.log(b)/Math.LN2},getZoomToFitValue:function(){return Math.min(this.fitZoom(this.parameters.width,this.container.clientWidth),this.fitZoom(this.parameters.height,this.container.clientHeight))},getZoomToFillValue:function(){return Math.max(this.fitZoom(this.parameters.width,this.container.clientWidth),this.fitZoom(this.parameters.height,this.container.clientHeight))},zoomToFit:function(){this.moveTo(null,null,this.getZoomToFitValue())},zoomToFill:function(){this.moveTo(null,null,this.getZoomToFillValue())},zoomToFitHeight:function(){this.moveTo(null,null,this.fitZoom(this.parameters.height,this.container.clientHeight))},zoomToFitWidth:function(){this.moveTo(null,null,this.fitZoom(this.parameters.width,this.container.clientWidth))},flyZoomToFitHeight:function(){this.flyTo(null,this.parameters.height/2,this.fitZoom(this.parameters.height,this.container.clientHeight))},flyZoomToFitWidth:function(){this.flyTo(this.parameters.width/2,null,this.fitZoom(this.parameters.width,this.container.clientWidth))},flyZoomToFit:function(){this.flyTo(this.parameters.width/2,this.parameters.height/2,this.getZoomToFitValue())},clientToImage:function(c,a){var b=Math.pow(2,this.zoom);return{x:(c-this.container.clientWidth/2)/b+this.x,y:(a-this.container.clientHeight/2)/b+this.y}},mouseWheelHandler:function(g,d){var e=false;if(g>0){e=0.5}else{if(g<0){e=-0.5}}if(e){var b=this.clientToImage(d.clientX,d.clientY);var c=Math.min(this.maxZoom,Math.max(this.getZoom()+e,this.minZoom));var a=this.adjustCoordinateForZoom(this.x,b.x,this.getZoom(),c);var f=this.adjustCoordinateForZoom(this.y,b.y,this.getZoom(),c);this.flyTo(a,f,c,true)}},mouseWheel:function(a){var b=0;if(!a){a=window.event}if(a.wheelDelta){b=a.wheelDelta/120;if(window.opera){b=-b}}else{if(a.detail){b=-a.detail}}if(b){this.mouseWheelHandler(b,a)}if(a.preventDefault){a.preventDefault()}a.returnValue=false},onresize:function(){this.resize();this.layout()},getX:function(){return this.x},getY:function(){return this.y},stopFlying:function(){this.flying++},flyTo:function(n,m,r,e){var g=this;n=n!=null?n:this.x;m=m!=null?m:this.y;r=r!=null?r:this.zoom;e=e!=null?e:false;var d=this.x;var c=this.y;var p=this.zoom;var o=this.clampXY(n,m);var l=this.parameters.wrapX?n:o.x;var i=this.parameters.wrapY?m:o.y;var b=Math.min(this.maxZoom,Math.max(r,this.minZoom));this.flying++;var a=this.flying;var f=new Date().getTime();var q=function(A,y,u,t,s){var z=(y-A);var x=-z*Math.pow(2,-u*t);var v=u*s;if(z<0){x=Math.max(0,x-v)}else{x=Math.min(0,x+v)}return y+x};var k=function(){if(g.flying==a){var v=(new Date().getTime()-f)/1000;var s=q(d,l,v,e?10:4,e?0.2:1);var y=q(c,i,v,e?10:4,e?0.2:1);var x=q(p,b,v,10,0.2);var t=true;var u=Math.min(Math.pow(2,g.getZoom()),1);if(Math.abs(s-l)<(0.5*u)){s=l}else{t=false}if(Math.abs(y-i)<(0.5*u)){y=i}else{t=false}if(Math.abs(x-b)<0.02){x=b}else{t=false}g.setPosition(s,y,false);g.setZoom(x,false);g.layout();if(!t){g.browser.requestAnimationFrame(k,g.container)}}};this.browser.requestAnimationFrame(k,this.container)},rectVisibleAtZoomLevel:function(a,b){return Math.min(this.fitZoom(a,this.container.clientWidth),this.fitZoom(b,this.container.clientHeight))},getTouchAreaBaseSize:function(){var a=((this.container.clientWidth+this.container.clientHeight)/2)*0.2;return Math.min(a,Math.min(this.container.clientWidth,this.container.clientHeight)/6)},createImageEventData:function(b){var a=this.browser.getElementPosition(this.container);b.localX=b.clientX-a.x;b.localY=b.clientY-a.y;var c=Math.pow(2,this.zoom);b.imageX=(b.localX-this.container.clientWidth/2)/c+this.x;b.imageY=(b.localY-this.container.clientHeight/2)/c+this.y;b.target=this;b.currentTarget=this;return new bigshot.ImageEvent(b)},mouseClick:function(b){var a=this.createImageEventData({type:"click",clientX:b.clientX,clientY:b.clientY});this.fireEvent("click",a)},showTouchUI:function(f,g){if(!f){f=2500}if(!g){g=1000}var a=this.getTouchAreaBaseSize();var n=this.getTouchAreaBaseSize();var e=this.container.clientWidth/2;var d=this.container.clientHeight/2;var o=document.createElement("div");o.style.position="absolute";o.style.zIndex="9999";o.style.opacity=0.9;o.style.width=this.container.clientWidth+"px";o.style.height=this.container.clientHeight+"px";var b=document.createElement("div");b.style.position="absolute";var m=document.createElement("div");m.style.position="relative";m.style.background="black";m.style.textAlign="center";m.style.top=(d-n)+"px";m.style.left=(e-n)+"px";m.style.width=(2*n)+"px";m.style.height=(2*n)+"px";o.appendChild(b);b.appendChild(m);m.innerHTML="<span style='display:inline-box; position:relative; vertical-align:middle; font-size: 20pt; top: 10pt; color:white'>ZOOM IN</span>";var c=document.createElement("div");c.style.position="absolute";var l=document.createElement("div");l.style.position="relative";l.style.border=a+"px solid black";l.style.top="0px";l.style.left="0px";l.style.textAlign="center";l.style.width=this.container.clientWidth+"px";l.style.height=this.container.clientHeight+"px";l.style.MozBoxSizing=l.style.boxSizing=l.style.WebkitBoxSizing="border-box";l.innerHTML="<span style='position:relative; font-size: 20pt; top: -25pt; color:white'>ZOOM OUT</span>";c.appendChild(l);o.appendChild(c);this.container.appendChild(o);var k=this;var i=0.9;var q=g/50;if(q<1){q=1}var p=function(){i=i-(0.9/q);if(i<0){k.container.removeChild(o)}else{o.style.opacity=i;setTimeout(p,50)}};setTimeout(p,f)},exitFullScreen:function(){if(this.fullScreenHandler){this.removeEventListeners();this.fullScreenHandler.close();this.addEventListeners();this.fullScreenHandler=null;return}},fullScreen:function(a){if(this.fullScreenHandler){return}var c=document.createElement("div");c.style.position="absolute";c.style.fontSize="16pt";c.style.top="128px";c.style.width="100%";c.style.color="white";c.style.padding="16px";c.style.zIndex="9999";c.style.textAlign="center";c.style.opacity="0.75";c.innerHTML="<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";var b=this;this.fullScreenHandler=new bigshot.FullScreen(this.container);this.fullScreenHandler.restoreSize=true;this.fullScreenHandler.addOnResize(function(){if(b.fullScreenHandler&&b.fullScreenHandler.isFullScreen){b.container.style.width=window.innerWidth+"px";b.container.style.height=window.innerHeight+"px"}b.onresize()});this.fullScreenHandler.addOnClose(function(){if(c.parentNode){try{div.removeChild(c)}catch(d){}}b.fullScreenHandler=null});if(a){this.fullScreenHandler.addOnClose(function(){a()})}this.removeEventListeners();this.fullScreenHandler.open();this.addEventListeners();if(this.fullScreenHandler.getRootElement()){this.fullScreenHandler.getRootElement().appendChild(c);setTimeout(function(){var e=0.75;var d=function(){e-=0.02;if(c.parentNode){if(e<=0){try{div.removeChild(c)}catch(f){}}else{c.style.opacity=e;setTimeout(d,20)}}};setTimeout(d,20)},3500)}return function(){b.fullScreenHandler.close()}},dispose:function(){this.browser.unregisterListener(window,"resize",this.onresizeHandler,false);this.removeEventListeners()}};bigshot.Object.extend(bigshot.ImageBase,bigshot.EventDispatcher);bigshot.Image=function(a){bigshot.setupFileSystem(a);a.merge(a.fileSystem.getDescriptor(),false);bigshot.ImageBase.call(this,a)};bigshot.Image.prototype={setupLayers:function(){var a=this;this.thisTileCache=new bigshot.ImageTileCache(function(){a.layout()},null,this.parameters);this.addLayer(new bigshot.TileLayer(this,this.parameters,0,0,this.thisTileCache))}};bigshot.Object.extend(bigshot.Image,bigshot.ImageBase);bigshot.HTMLElementLayer=function(d,b,c,a){this.hotspots=new Array();this.browser=new bigshot.Browser();this.image=d;this.container=d.createLayerContainer();this.parentContainer=d.getContainer();this.element=b;this.parentContainer.appendChild(b);this.w=c;this.h=a;this.resize(0,0)};bigshot.HTMLElementLayer.prototype={getContainer:function(){return this.container},resize:function(a,b){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px"},layout:function(i,d,g,e,a,k,b,f){var c=Math.pow(2,this.image.getZoom());d-=b*e;g-=b*a;this.element.style.top=g+"px";this.element.style.left=d+"px";this.element.style.width=(this.w*c)+"px";this.element.style.height=(this.h*c)+"px"},setMaxTiles:function(b,a){}};bigshot.Object.validate("bigshot.HTMLElementLayer",bigshot.Layer);bigshot.HTMLDivElementLayer=function(e,b,c,a,f,d){this.wrapX=f;this.wrapY=d;this.hotspots=new Array();this.browser=new bigshot.Browser();this.image=e;this.container=e.createLayerContainer();this.parentContainer=e.getContainer();this.element=b;this.parentContainer.appendChild(b);this.w=c;this.h=a;this.resize(0,0)};bigshot.HTMLDivElementLayer.prototype={getContainer:function(){return this.container},resize:function(a,b){this.container.style.width=this.parentContainer.clientWidth+"px";this.container.style.height=this.parentContainer.clientHeight+"px"},layout:function(n,e,m,f,a,o,b,k){var d=Math.pow(2,this.image.getZoom());e-=b*f;m-=b*a;var c=(this.w*d);var l=(this.h*d);this.element.style.backgroundSize=c+"px "+l+"px";var i="0px";var g="0px";if(this.wrapY){this.element.style.top="0px";this.element.style.height=(this.parentContainer.clientHeight)+"px";g=m+"px"}else{this.element.style.top=m+"px";this.element.style.height=l+"px"}if(this.wrapX){this.element.style.left="0px";this.element.style.width=(this.parentContainer.clientWidth)+"px";i=e+"px"}else{this.element.style.left=e+"px";this.element.style.width=c+"px"}this.element.style.backgroundPosition=i+" "+g},setMaxTiles:function(b,a){}};bigshot.Object.validate("bigshot.HTMLDivElementLayer",bigshot.Layer);bigshot.SimpleImage=function(a,b){a.merge({fileSystem:null,fileSystemType:"simple",maxTextureMagnification:1,tileSize:1024},true);if(b){a.merge({width:b.width,height:b.height});this.imgElement=b}else{if(a.width==0||a.height==0){throw new Error("No imgElement and missing width or height in ImageParameters")}}bigshot.setupFileSystem(a);bigshot.ImageBase.call(this,a)};bigshot.SimpleImage.prototype={setupLayers:function(){if(!this.imgElement){this.imgElement=document.createElement("div");this.imgElement.style.backgroundImage="url('"+this.parameters.basePath+"')";this.imgElement.style.position="absolute";if(!this.parameters.wrapX&&!this.parameters.wrapY){this.imgElement.style.backgroundRepeat="no-repeat"}else{if(this.parameters.wrapX&&!this.parameters.wrapY){this.imgElement.style.backgroundRepeat="repeat-x"}else{if(!this.parameters.wrapX&&this.parameters.wrapY){this.imgElement.style.backgroundRepeat="repeat-y"}else{if(this.parameters.wrapX&&this.parameters.wrapY){this.imgElement.style.backgroundRepeat="repeat"}}}}}this.addLayer(new bigshot.HTMLDivElementLayer(this,this.imgElement,this.parameters.width,this.parameters.height,this.parameters.wrapX,this.parameters.wrapY))}};bigshot.Object.extend(bigshot.SimpleImage,bigshot.ImageBase);bigshot.FileSystem=function(){};bigshot.FileSystem.prototype={getFilename:function(a){},getImageFilename:function(b,a,c){},setPrefix:function(a){},getDescriptor:function(){},getPosterFilename:function(){}};bigshot.setupFileSystem=function(a){if(!a.fileSystem){if(a.fileSystemType=="archive"){a.fileSystem=new bigshot.ArchiveFileSystem(a)}else{if(a.fileSystemType=="dzi"){a.fileSystem=new bigshot.DeepZoomImageFileSystem(a)}else{if(a.fileSystemType=="simple"){a.fileSystem=new bigshot.SimpleFileSystem(a)}else{a.fileSystem=new bigshot.FolderFileSystem(a)}}}}};bigshot.SimpleFileSystem=function(a){this.parameters=a};bigshot.SimpleFileSystem.prototype={getDescriptor:function(){return{}},getPosterFilename:function(){return null},getFilename:function(a){return null},getImageFilename:function(b,a,c){return null},getPrefix:function(){return""},setPrefix:function(a){this.prefix=a}};bigshot.Object.validate("bigshot.SimpleFileSystem",bigshot.FileSystem);bigshot.FolderFileSystem=function(a){this.prefix=null;this.suffix="";this.parameters=a};bigshot.FolderFileSystem.prototype={getDescriptor:function(){this.browser=new bigshot.Browser();var b=this.browser.createXMLHttpRequest();b.open("GET",this.getFilename("descriptor"),false);b.send(null);var c={};if(b.status==200){var d=b.responseText.split(":");for(var a=0;a<d.length;a+=2){if(d[a]=="suffix"){c[d[a]]=d[a+1]}else{c[d[a]]=parseInt(d[a+1])}}this.suffix=c.suffix;return c}else{throw new Error("Unable to find descriptor.")}},getPosterFilename:function(){return this.getFilename("poster"+this.suffix)},setPrefix:function(a){this.prefix=a},getPrefix:function(){if(this.prefix){return this.prefix+"/"}else{return""}},getFilename:function(a){return this.parameters.basePath+"/"+this.getPrefix()+a},getImageFilename:function(c,b,d){var a=(-d)+"/"+c+"_"+b+this.suffix;return this.getFilename(a)}};bigshot.Object.validate("bigshot.FolderFileSystem",bigshot.FileSystem);bigshot.DeepZoomImageFileSystem=function(a){this.prefix="";this.suffix="";this.DZ_NAMESPACE="http://schemas.microsoft.com/deepzoom/2009";this.fullZoomLevel=0;this.posterName="";this.parameters=a};bigshot.DeepZoomImageFileSystem.prototype={getDescriptor:function(){var e={};var b=this.parameters.dataLoader.loadXml(this.parameters.basePath+this.prefix+".xml",false);var d=b.getElementsByTagName("Image")[0];var c=b.getElementsByTagName("Size")[0];e.width=parseInt(c.getAttribute("Width"));e.height=parseInt(c.getAttribute("Height"));e.tileSize=parseInt(d.getAttribute("TileSize"));e.overlap=parseInt(d.getAttribute("Overlap"));e.suffix="."+d.getAttribute("Format");e.posterSize=e.tileSize;this.suffix=e.suffix;this.fullZoomLevel=Math.ceil(Math.log(Math.max(e.width,e.height))/Math.LN2);e.minZoom=-this.fullZoomLevel;var a=Math.ceil(Math.log(e.tileSize)/Math.LN2);this.posterName=this.getImageFilename(0,0,a-this.fullZoomLevel);return e},setPrefix:function(a){this.prefix=a},getPosterFilename:function(){return this.posterName},getFilename:function(a){return this.parameters.basePath+this.prefix+"/"+a},getImageFilename:function(d,c,e){var a=this.fullZoomLevel+e;var b=a+"/"+d+"_"+c+this.suffix;return this.getFilename(b)}};bigshot.ArchiveFileSystem=function(d){this.indexSize=0;this.offset=0;this.index={};this.prefix="";this.suffix="";this.parameters=d;var a=new bigshot.Browser();var c=a.createXMLHttpRequest();c.open("GET",this.parameters.basePath+"&start=0&length=24&type=text/plain",false);c.send(null);if(c.status==200){if(c.responseText.substring(0,7)!="BIGSHOT"){alert('"'+this.parameters.basePath+'" is not a valid bigshot file');return}this.indexSize=parseInt(c.responseText.substring(8),16);this.offset=this.indexSize+24;c.open("GET",this.parameters.basePath+"&type=text/plain&start=24&length="+this.indexSize,false);c.send(null);if(c.status==200){var e=c.responseText.split(":");for(var b=0;b<e.length;b+=3){this.index[e[b]]={start:parseInt(e[b+1])+this.offset,length:parseInt(e[b+2])}}}else{alert('The index of "'+this.parameters.basePath+'" could not be loaded: '+c.status)}}else{alert('The header of "'+this.parameters.basePath+'" could not be loaded: '+c.status)}};bigshot.ArchiveFileSystem.prototype={getDescriptor:function(){this.browser=new bigshot.Browser();var b=this.browser.createXMLHttpRequest();b.open("GET",this.getFilename("descriptor"),false);b.send(null);var c={};if(b.status==200){var d=b.responseText.split(":");for(var a=0;a<d.length;a+=2){if(d[a]=="suffix"){c[d[a]]=d[a+1]}else{c[d[a]]=parseInt(d[a+1])}}this.suffix=c.suffix;return c}else{throw new Error("Unable to find descriptor.")}},getPosterFilename:function(){return this.getFilename("poster"+this.suffix)},getFilename:function(a){a=this.getPrefix()+a;if(!this.index[a]&&console){console.log("Can't find "+a)}var b=this.parameters.basePath+"&start="+this.index[a].start+"&length="+this.index[a].length;if(a.substring(a.length-4)==".jpg"){b=b+"&type=image/jpeg"}else{if(a.substring(a.length-4)==".png"){b=b+"&type=image/png"}else{b=b+"&type=text/plain"}}return b},getImageFilename:function(c,b,d){var a=(-d)+"/"+c+"_"+b+this.suffix;return this.getFilename(a)},getPrefix:function(){if(this.prefix){return this.prefix+"/"}else{return""}},setPrefix:function(a){this.prefix=a}};bigshot.Object.validate("bigshot.ArchiveFileSystem",bigshot.FileSystem);bigshot.VRTileCache=function(){};bigshot.VRTileCache.prototype={getTexture:function(b,a,c){},purge:function(){},dispose:function(){}};bigshot.ImageVRTileCache=function(c,a,b){this.imageTileCache=new bigshot.ImageTileCache(c,a,b);this.imageTileCache.setMaxTiles(999999,999999)};bigshot.ImageVRTileCache.prototype={getTexture:function(c,b,d){var a=this.imageTileCache.getImage(c,b,d);return a},purge:function(){this.imageTileCache.resetUsed()},dispose:function(){}};bigshot.Object.validate("bigshot.ImageVRTileCache",bigshot.VRTileCache);bigshot.TextureTileCache=function(d,a,c,b){this.parameters=c;this.webGl=b;this.fullImage=c.dataLoader.loadImage(c.fileSystem.getPosterFilename(),a);this.maxTextureCacheSize=512;this.maxImageCacheSize=2048;this.cachedTextures={};this.cachedImages={};this.requestedImages={};this.lastOnLoadFiredAt=0;this.imageRequests=0;this.partialImageSize=c.tileSize/8;this.imageLruMap=new bigshot.LRUMap();this.textureLruMap=new bigshot.LRUMap();this.onLoaded=d;this.browser=new bigshot.Browser();this.disposed=false};bigshot.TextureTileCache.prototype={getPartialTexture:function(b,p,e){if(this.fullImage.complete){var c=document.createElement("canvas");if(!c.width){return null}c.width=this.partialImageSize;c.height=this.partialImageSize;var o=c.getContext("2d");var q=this.parameters.posterSize/Math.max(this.parameters.width,this.parameters.height);var m=Math.floor(q*this.parameters.width);var d=Math.floor(q*this.parameters.height);var n=q*(this.parameters.tileSize-this.parameters.overlap)/Math.pow(2,e);var k=Math.floor(n*b);var i=Math.floor(n*p);var l=Math.floor(n);var f=Math.floor(n);var a=this.partialImageSize+2;var g=this.partialImageSize+2;if(k+l>m){l=m-k;a=this.partialImageSize*(l/Math.floor(n))}if(i+f>d){f=d-i;g=this.partialImageSize*(f/Math.floor(n))}o.drawImage(this.fullImage,k,i,l,f,-1,-1,a,g);return this.webGl.createImageTextureFromImage(c,this.parameters.textureMinFilter,this.parameters.textureMagFilter)}else{return null}},setCachedTexture:function(b,a){if(this.cachedTextures[b]!=null){this.webGl.deleteTexture(this.cachedTextures[b])}this.cachedTextures[b]=a},getTexture:function(d,c,e){var b=this.getImageKey(d,c,e);this.textureLruMap.access(b);this.imageLruMap.access(b);if(this.cachedTextures[b]){return this.cachedTextures[b]}else{if(this.cachedImages[b]){this.setCachedTexture(b,this.webGl.createImageTextureFromImage(this.cachedImages[b],this.parameters.textureMinFilter,this.parameters.textureMagFilter));return this.cachedTextures[b]}else{this.requestImage(d,c,e);var a=this.getPartialTexture(d,c,e);if(a){this.setCachedTexture(b,a)}return a}}},requestImage:function(d,c,e){var a=this.getImageKey(d,c,e);if(!this.requestedImages[a]){this.imageRequests++;var b=this;this.parameters.dataLoader.loadImage(this.getImageFilename(d,c,e),function(g){if(b.disposed){return}b.cachedImages[a]=g;b.setCachedTexture(a,b.webGl.createImageTextureFromImage(g,b.parameters.textureMinFilter,b.parameters.textureMagFilter));delete b.requestedImages[a];b.imageRequests--;var f=new Date();if(b.imageRequests==0||f.getTime()>(b.lastOnLoadFiredAt+50)){b.lastOnLoadFiredAt=f.getTime();b.onLoaded()}});this.requestedImages[a]=true}},purge:function(){var a=this;this.purgeCache(this.textureLruMap,this.cachedTextures,this.maxTextureCacheSize,function(b){a.webGl.deleteTexture(a.cachedTextures[b])});this.purgeCache(this.imageLruMap,this.cachedImages,this.maxImageCacheSize,function(b){})},purgeCache:function(b,c,a,e){for(var d=0;d<64;++d){if(b.getSize()>a){var f=b.leastUsed();b.remove(f);if(e){e(f)}delete c[f]}else{break}}},getImageKey:function(b,a,c){return"I"+b+"_"+a+"_"+c},getImageFilename:function(c,a,d){var b=this.parameters.fileSystem.getImageFilename(c,a,d);return b},dispose:function(){this.disposed=true;for(var a in this.cachedTextures){this.webGl.deleteTexture(this.cachedTextures[a])}}};bigshot.Object.validate("bigshot.TextureTileCache",bigshot.VRTileCache);bigshot.VRFace=function(b,l,g,d,n,m,e){var i=this;this.owner=b;this.key=l;this.topLeft=g;this.width=d;this.u=n;this.v=m;this.updated=false;this.parameters=new Object();for(var f in this.owner.getParameters()){this.parameters[f]=this.owner.getParameters()[f]}bigshot.setupFileSystem(this.parameters);this.parameters.fileSystem.setPrefix("face_"+l);this.parameters.merge(this.parameters.fileSystem.getDescriptor(),false);this.tileCache=b.renderer.createTileCache(function(){i.updated=true;b.renderUpdated(bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE)},e,this.parameters);this.fullSize=this.parameters.width;this.overlap=this.parameters.overlap;this.tileSize=this.parameters.tileSize;this.minDivisions=0;var c=Math.log(this.fullSize-this.overlap)/Math.LN2;var a=Math.log(this.tileSize-this.overlap)/Math.LN2;this.maxDivisions=Math.floor(c-a);this.maxTesselation=this.parameters.maxTesselation>=0?this.parameters.maxTesselation:this.maxDivisions};bigshot.VRFace.prototype={browser:new bigshot.Browser(),dispose:function(){this.tileCache.dispose()},pt3dMultAdd:function(d,b,c){return{x:d.x*b+c.x,y:d.y*b+c.y,z:d.z*b+c.z}},pt3dMult:function(b,a){return{x:b.x*a,y:b.y*a,z:b.z*a}},generateFace:function(g,e,d,b,a,c){d*=this.tileSize/(this.tileSize-this.overlap);var f=this.tileCache.getTexture(b,a,-this.maxDivisions+c);g.addQuad(this.owner.renderer.createTexturedQuad(e,this.pt3dMult(this.u,d),this.pt3dMult(this.v,d),f))},VISIBLE_NONE:0,VISIBLE_SOME:1,VISIBLE_ALL:2,pointInRect:function(b,c,a){return(b.x>=c.x&&b.y>=c.y&&b.x<a.x&&b.y<a.y)},intersectWithView:function intersectWithView(y){var d=0;var c=[];var n=y.length;for(var s=0;s<n;++s){if(y[s]==null){d++}else{c.push(y[s])}}if(d==4){return this.VISIBLE_NONE}var x=c[0].x;var u=c[0].y;var v=x;var t=u;var m=0;var k=0;var l=this.viewportWidth;var g=this.viewportHeight;var a=0;var b=c.length;for(var s=1;s<b;++s){var f=c[s].x;var e=c[s].y;x=x<f?x:f;u=u<e?u:e;v=v>f?v:f;t=t>e?t:e}var r=x>m?x:m;var q=u>k?u:k;var p=v<l?v:l;var o=t<g?t:g;if(r<=p&&q<=o){return this.VISIBLE_SOME}return this.VISIBLE_NONE},screenDistance:function screenDistance(b,a){if(b==null||a==null){return 0}return Math.max(Math.abs(b.x-a.x),Math.abs(b.y-a.y))},transformToScreen:function transformToScreen(a){return this.owner.renderer.transformToScreen(a)},generateSubdivisionFace:function generateSubdivisionFace(q,n,m,b,v,t,z){if(!z){z=new Array(4);z[0]=this.transformToScreen(n);var l=this.pt3dMultAdd(this.u,m,n);z[1]=this.transformToScreen(l);var o=this.pt3dMultAdd(this.v,m,n);z[3]=this.transformToScreen(o);var e=this.pt3dMultAdd(this.v,m,l);z[2]=this.transformToScreen(e)}var y=this.intersectWithView(z);if(y==this.VISIBLE_NONE){return}var k=0;for(var p=0;p<z.length;++p){var g=(p+1)%4;k=Math.max(this.screenDistance(z[p],z[g]),k)}k*=this.owner.browser.getDevicePixelScale();if(b<this.minDivisions||((k>this.owner.maxTextureMagnification*(this.tileSize-this.overlap))&&b<this.maxDivisions&&b<this.maxTesselation)){var u=this.pt3dMultAdd({x:this.u.x+this.v.x,y:this.u.y+this.v.y,z:this.u.z+this.v.z},m/2,n);var s=this.pt3dMultAdd(this.u,m/2,n);var f=this.pt3dMultAdd(this.v,m/2,n);var r=this.transformToScreen(u);var x=this.transformToScreen(f);var d=this.transformToScreen(s);var c=this.transformToScreen(this.pt3dMultAdd(this.u,m,f));var a=this.transformToScreen(this.pt3dMultAdd(this.v,m,s));this.generateSubdivisionFace(q,n,m/2,b+1,v*2,t*2,[z[0],d,r,x]);this.generateSubdivisionFace(q,s,m/2,b+1,v*2+1,t*2,[d,z[1],c,r]);this.generateSubdivisionFace(q,f,m/2,b+1,v*2,t*2+1,[x,r,a,z[3]]);this.generateSubdivisionFace(q,u,m/2,b+1,v*2+1,t*2+1,[r,c,z[2],a])}else{this.generateFace(q,n,m,v,t,b)}},isUpdated:function(){return this.updated},render:function(a){this.updated=false;this.viewportWidth=this.owner.renderer.getViewportWidth();this.viewportHeight=this.owner.renderer.getViewportHeight();this.generateSubdivisionFace(a,this.topLeft,this.width,0,0,0)},endRender:function(){this.tileCache.purge()}};bigshot.WebGLUtil={debug:false,contextNames:["webgl","experimental-webgl"],createContext0:function(a,b){var c=this.debug?WebGLDebugUtils.makeDebugContext(a.getContext(b)):a.getContext(b);return c},createContext:function(a){for(var b=0;b<this.contextNames.length;++b){try{var d=this.createContext0(a,this.contextNames[b]);if(d){return d}}catch(c){}}throw new Error("Could not initialize WebGL.")},isWebGLSupported:function(){var a=document.createElement("canvas");if(!a.width){return false}try{this.createContext(a);return true}catch(b){return false}}};bigshot.TransformStack=function(){this.mvMatrix=null;this.mvMatrixStack=[];this.reset()};bigshot.TransformStack.prototype={push:function(a){if(a){this.mvMatrixStack.push(a.dup());this.mvMatrix=a.dup();return mvMatrix}else{this.mvMatrixStack.push(this.mvMatrix.dup());return mvMatrix}},pop:function(){if(this.mvMatrixStack.length==0){throw new Error("Invalid popMatrix!")}this.mvMatrix=this.mvMatrixStack.pop();return mvMatrix},reset:function(){this.mvMatrix=Matrix.I(4)},multiply:function(a){this.mvMatrix=a.x(this.mvMatrix)},translate:function(b){var a=Matrix.Translation($V([b.x,b.y,b.z])).ensure4x4();this.multiply(a)},rotate:function(c,b){var d=c*Math.PI/180;var a=Matrix.Rotation(d,$V([b.x,b.y,b.z])).ensure4x4();this.multiply(a)},rotateX:function(a){this.rotate(a,{x:1,y:0,z:0})},rotateY:function(a){this.rotate(a,{x:0,y:1,z:0})},rotateZ:function(a){this.rotate(a,{x:0,y:0,z:1})},perspective:function(d,c,b,e){var a=makePerspective(d,c,b,e);this.multiply(a)},matrix:function(){return this.mvMatrix}};bigshot.WebGL=function(a){this.canvas=a;this.gl=bigshot.WebGLUtil.createContext(this.canvas);this.mvMatrix=new bigshot.TransformStack();this.pMatrix=new bigshot.TransformStack();this.shaderProgram=null;this.onresize()};bigshot.WebGL.prototype={onresize:function(){this.gl.viewportWidth=this.canvas.width;this.gl.viewportHeight=this.canvas.height},fragmentShader:"#ifdef GL_ES\n precision highp float;\n#endif\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void) {\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n}\n",vertexShader:"attribute vec3 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void) {\n gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n vTextureCoord = aTextureCoord;\n}",createShader:function(c,a){var b=this.gl.createShader(a);this.gl.shaderSource(b,c);this.gl.compileShader(b);if(!this.gl.getShaderParameter(b,this.gl.COMPILE_STATUS)){alert(this.gl.getShaderInfoLog(b));return null}return b},createFragmentShader:function(a){return this.createShader(a,this.gl.FRAGMENT_SHADER)},createVertexShader:function(a){return this.createShader(a,this.gl.VERTEX_SHADER)},initShaders:function(){this.shaderProgram=this.gl.createProgram();this.gl.attachShader(this.shaderProgram,this.createVertexShader(this.vertexShader));this.gl.attachShader(this.shaderProgram,this.createFragmentShader(this.fragmentShader));this.gl.linkProgram(this.shaderProgram);if(!this.gl.getProgramParameter(this.shaderProgram,this.gl.LINK_STATUS)){throw new Error("Could not initialise shaders");return}this.gl.useProgram(this.shaderProgram);this.shaderProgram.vertexPositionAttribute=this.gl.getAttribLocation(this.shaderProgram,"aVertexPosition");this.gl.enableVertexAttribArray(this.shaderProgram.vertexPositionAttribute);this.shaderProgram.textureCoordAttribute=this.gl.getAttribLocation(this.shaderProgram,"aTextureCoord");this.gl.enableVertexAttribArray(this.shaderProgram.textureCoordAttribute);this.shaderProgram.pMatrixUniform=this.gl.getUniformLocation(this.shaderProgram,"uPMatrix");this.shaderProgram.mvMatrixUniform=this.gl.getUniformLocation(this.shaderProgram,"uMVMatrix");this.shaderProgram.samplerUniform=this.gl.getUniformLocation(this.shaderProgram,"uSampler")},setMatrixUniforms:function(){this.gl.uniformMatrix4fv(this.shaderProgram.pMatrixUniform,false,new Float32Array(this.pMatrix.matrix().flatten()));this.gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform,false,new Float32Array(this.mvMatrix.matrix().flatten()))},createImageTextureFromImage:function(d,a,c){var b=this.gl.createTexture();this.handleImageTextureLoaded(this,b,d,a,c);return b},createImageTextureFromSource:function(e,a,d){var f=new Image();var c=this.gl.createTexture();var b=this;f.onload=function(){b.handleImageTextureLoaded(b,c,f,a,d)};f.src=e;return c},handleImageTextureLoaded:function(c,b,e,a,d){c.gl.bindTexture(c.gl.TEXTURE_2D,b);c.gl.texImage2D(c.gl.TEXTURE_2D,0,c.gl.RGBA,c.gl.RGBA,c.gl.UNSIGNED_BYTE,e);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MAG_FILTER,d?d:c.gl.NEAREST);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_MIN_FILTER,a?a:c.gl.NEAREST);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_S,c.gl.CLAMP_TO_EDGE);c.gl.texParameteri(c.gl.TEXTURE_2D,c.gl.TEXTURE_WRAP_T,c.gl.CLAMP_TO_EDGE);if(a==c.gl.NEAREST_MIPMAP_NEAREST||a==c.gl.LINEAR_MIPMAP_NEAREST||a==c.gl.NEAREST_MIPMAP_LINEAR||a==c.gl.LINEAR_MIPMAP_LINEAR){c.gl.generateMipmap(c.gl.TEXTURE_2D)}c.gl.bindTexture(c.gl.TEXTURE_2D,null)},deleteTexture:function(a){this.gl.deleteTexture(a)},dispose:function(){delete this.canvas;delete this.gl}};bigshot.VRRenderer=function(){};bigshot.VRRenderer.prototype={createTileCache:function(c,a,b){},createTexturedQuadScene:function(){},createTexturedQuad:function(d,b,a,c){},getViewportWidth:function(){},getViewportHeight:function(){},transformToWorld:function(a){},transformWorldToScreen:function(a){},transformToScreen:function(a){},dispose:function(){},beginRender:function(b,a,d,c){},endRender:function(){},onresize:function(){},resize:function(a,b){},getElement:function(){}};bigshot.AbstractVRRenderer=function(){};bigshot.AbstractVRRenderer.prototype={transformToWorld:function transformToWorld(a){var b=this.mvMatrix.matrix().xPoint3Dhom1(a);return b},transformWorldToScreen:function transformWorldToScreen(d){if(d.z>0){return null}var a=this.pMatrix.matrix().xPoint3Dhom(d);if(Math.abs(a.w)<Sylvester.precision){return null}var i=a.x;var f=a.y;var e=a.z;var c=this.getViewportWidth();var g=this.getViewportHeight();var b={x:(c/2)*i/e+c/2,y:-(g/2)*f/e+g/2};return b},transformToScreen:function transformToScreen(a){var d=this.mvpMatrix.xPoint3Dhom(a);if(d.z<0){return null}var e=d.w;if(Math.abs(d.w)<Sylvester.precision){return null}var i=d.x;var f=d.y;var c=this.getViewportWidth();var g=this.getViewportHeight();var b={x:(c/2)*i/e+c/2,y:-(g/2)*f/e+g/2};return b}};bigshot.CSS3DVRRenderer=function(a){this.container=a;this.canvasOrigin=document.createElement("div");this.canvasOrigin.style.WebkitTransformOrigin="0px 0px 0px";this.canvasOrigin.style.WebkitTransformStyle="preserve-3d";this.canvasOrigin.style.WebkitPerspective="600px";this.canvasOrigin.style.position="relative";this.canvasOrigin.style.left="50%";this.canvasOrigin.style.top="50%";this.container.appendChild(this.canvasOrigin);this.viewport=document.createElement("div");this.viewport.style.WebkitTransformOrigin="0px 0px 0px";this.viewport.style.WebkitTransformStyle="preserve-3d";this.canvasOrigin.appendChild(this.viewport);this.world=document.createElement("div");this.world.style.WebkitTransformOrigin="0px 0px 0px";this.world.style.WebkitTransformStyle="preserve-3d";this.viewport.appendChild(this.world);this.browser.removeAllChildren(this.world);this.view=null;this.mvMatrix=new bigshot.TransformStack();this.yaw=0;this.pitch=0;this.fov=0;this.pMatrix=new bigshot.TransformStack();this.onresize=function(){};this.viewportSize=null};bigshot.CSS3DVRRenderer.prototype={browser:new bigshot.Browser(),dispose:function(){},createTileCache:function(c,a,b){return new bigshot.ImageVRTileCache(c,a,b)},createTexturedQuadScene:function(){return new bigshot.CSS3DTexturedQuadScene(this.world,128,this.view)},createTexturedQuad:function(d,b,a,c){return new bigshot.CSS3DTexturedQuad(d,b,a,c)},getElement:function(){return this.container},supportsUpdate:function(){return false},getViewportWidth:function(){if(this.viewportSize){return this.viewportSize.w}return this.browser.getElementSize(this.container).w},getViewportHeight:function(){if(this.viewportSize){return this.viewportSize.h}return this.browser.getElementSize(this.container).h},onresize:function(){},resize:function(a,b){if(this.container.style.width!=""){this.container.style.width=a+"px"}if(this.container.style.height!=""){this.container.style.height=b+"px"}},beginRender:function(e,c,k,g){this.viewportSize=this.browser.getElementSize(this.container);this.yaw=e.y;this.pitch=e.p;this.fov=c;var b=0.5*c*Math.PI/180;var a=this.getViewportHeight()/2;var f=a/Math.tan(b);this.mvMatrix.reset();this.view=k;this.mvMatrix.translate(this.view);this.mvMatrix.rotateZ(g.r);this.mvMatrix.rotateX(g.p);this.mvMatrix.rotateY(g.y);this.mvMatrix.rotateY(this.yaw);this.mvMatrix.rotateX(this.pitch);this.pMatrix.reset();this.pMatrix.perspective(this.fov,this.getViewportWidth()/this.getViewportHeight(),0.1,100);this.mvpMatrix=this.pMatrix.matrix().multiply(this.mvMatrix.matrix());this.canvasOrigin.style.WebkitPerspective=f+"px";for(var d=this.world.children.length-1;d>=0;--d){this.world.children[d].inWorld=1}this.world.style.WebkitTransform="rotate3d(1,0,0,"+(-e.p)+"deg) rotate3d(0,1,0,"+e.y+"deg) rotate3d(0,1,0,"+(g.y)+"deg) rotate3d(1,0,0,"+(-g.p)+"deg) rotate3d(0,0,1,"+(-g.r)+"deg) ";this.world.style.WebkitTransformStyle="preserve-3d";this.world.style.WebKitBackfaceVisibility="hidden";this.viewport.style.WebkitTransform="translateZ("+f+"px)"},endRender:function(){for(var a=this.world.children.length-1;a>=0;--a){var b=this.world.children[a];if(!b.inWorld||b.inWorld!=2){delete b.inWorld;this.world.removeChild(b)}}this.viewportSize=null}};bigshot.Object.extend(bigshot.CSS3DVRRenderer,bigshot.AbstractVRRenderer);bigshot.Object.validate("bigshot.CSS3DVRRenderer",bigshot.VRRenderer);bigshot.CSS3DTexturedQuad=function(d,b,a,c){this.p=d;this.u=b;this.v=a;this.image=c};bigshot.CSS3DTexturedQuad.prototype={crossProduct:function crossProduct(d,c){return{x:d.y*c.z-d.z*c.y,y:d.z*c.x-d.x*c.z,z:d.x*c.y-d.y*c.x}},vecToStr:function vecToStr(a){return(a.x)+","+(a.y)+","+(a.z)},quadTransform:function quadTransform(c,d,b){var a=this.crossProduct(d,b);var e="matrix3d("+this.vecToStr(d)+",0,"+this.vecToStr(b)+",0,"+this.vecToStr(a)+",0,"+this.vecToStr(c)+",1)";return e},norm:function norm(a){return Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z)},render:function render(e,i,a){var d=i/(this.image.width-1);var g=i*1;var f=this.p;var c=this.u;var b=this.v;this.image.style.position="absolute";if(!this.image.inWorld||this.image.inWorld!=1){e.appendChild(this.image)}this.image.inWorld=2;this.image.style.WebkitTransformOrigin="0px 0px 0px";this.image.style.WebkitTransform=this.quadTransform({x:(f.x+a.x)*g,y:(-f.y+a.y)*g,z:(f.z+a.z)*g},{x:c.x*d,y:-c.y*d,z:c.z*d},{x:b.x*d,y:-b.y*d,z:b.z*d})}};bigshot.CSS3DTexturedQuadScene=function(b,c,a){this.quads=new Array();this.world=b;this.scale=c;this.view=a};bigshot.CSS3DTexturedQuadScene.prototype={addQuad:function(a){this.quads.push(a)},render:function(){for(var a=0;a<this.quads.length;++a){this.quads[a].render(this.world,this.scale,this.view)}}};bigshot.TexturedQuadScene=function(){};bigshot.TexturedQuadScene.prototype={addQuad:function(a){},render:function(){}};bigshot.WebGLVRRenderer=function(a){this.container=a;this.canvas=document.createElement("canvas");this.canvas.width=480;this.canvas.height=480;this.canvas.style.position="absolute";this.container.appendChild(this.canvas);this.webGl=new bigshot.WebGL(this.canvas);this.webGl.initShaders();this.webGl.gl.clearColor(0,0,0,1);this.webGl.gl.blendFunc(this.webGl.gl.ONE,this.webGl.gl.ZERO);this.webGl.gl.enable(this.webGl.gl.BLEND);this.webGl.gl.disable(this.webGl.gl.DEPTH_TEST);this.webGl.gl.clearDepth(1);var b=this;this.buffers=new bigshot.TimedWeakReference(function(){return b.setupBuffers()},function(c){b.disposeBuffers(c)},1000)};bigshot.WebGLVRRenderer.prototype={createTileCache:function(c,a,b){return new bigshot.TextureTileCache(c,a,b,this.webGl)},createTexturedQuadScene:function(){return new bigshot.WebGLTexturedQuadScene(this.webGl,this.buffers)},setupBuffers:function(){var c=this.webGl.gl.createBuffer();var a=this.webGl.gl.createBuffer();this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER,a);var d=[0,0,1,0,1,1,0,1];this.webGl.gl.bufferData(this.webGl.gl.ARRAY_BUFFER,new Float32Array(d),this.webGl.gl.STATIC_DRAW);var b=this.webGl.gl.createBuffer();this.webGl.gl.bindBuffer(this.webGl.gl.ELEMENT_ARRAY_BUFFER,b);var e=[0,2,1,0,3,2];this.webGl.gl.bufferData(this.webGl.gl.ELEMENT_ARRAY_BUFFER,new Uint16Array(e),this.webGl.gl.STATIC_DRAW);this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER,a);this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.textureCoordAttribute,2,this.webGl.gl.FLOAT,false,0,0);this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER,c);this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.vertexPositionAttribute,3,this.webGl.gl.FLOAT,false,0,0);return{vertexPositionBuffer:c,textureCoordBuffer:a,vertexIndexBuffer:b}},dispose:function(){this.buffers.dispose();this.container.removeChild(this.canvas);delete this.canvas;this.webGl.dispose();delete this.webGl},disposeBuffers:function(a){this.webGl.gl.deleteBuffer(a.vertexPositionBuffer);this.webGl.gl.deleteBuffer(a.vertexIndexBuffer);this.webGl.gl.deleteBuffer(a.textureCoordBuffer)},getElement:function(){return this.canvas},supportsUpdate:function(){return false},createTexturedQuad:function(d,b,a,c){return new bigshot.WebGLTexturedQuad(d,b,a,c)},getViewportWidth:function(){return this.webGl.gl.viewportWidth},getViewportHeight:function(){return this.webGl.gl.viewportHeight},beginRender:function(b,a,d,c){this.webGl.gl.viewport(0,0,this.webGl.gl.viewportWidth,this.webGl.gl.viewportHeight);this.webGl.pMatrix.reset();this.webGl.pMatrix.perspective(a,this.webGl.gl.viewportWidth/this.webGl.gl.viewportHeight,0.1,100);this.webGl.mvMatrix.reset();this.webGl.mvMatrix.translate(d);this.webGl.mvMatrix.rotateZ(c.r);this.webGl.mvMatrix.rotateX(c.p);this.webGl.mvMatrix.rotateY(c.y);this.webGl.mvMatrix.rotateY(b.y);this.webGl.mvMatrix.rotateX(b.p);this.mvMatrix=this.webGl.mvMatrix;this.pMatrix=this.webGl.pMatrix;this.mvpMatrix=this.pMatrix.matrix().multiply(this.mvMatrix.matrix())},endRender:function(){},resize:function(a,b){this.canvas.width=a;this.canvas.height=b;if(this.container.style.width!=""){this.container.style.width=a+"px"}if(this.container.style.height!=""){this.container.style.height=b+"px"}},onresize:function(){this.webGl.onresize()}};bigshot.Object.extend(bigshot.WebGLVRRenderer,bigshot.AbstractVRRenderer);bigshot.Object.validate("bigshot.WebGLVRRenderer",bigshot.VRRenderer);bigshot.TexturedQuad=function(){};bigshot.WebGLTexturedQuad=function(d,b,a,c){this.p=d;this.u=b;this.v=a;this.texture=c};bigshot.WebGLTexturedQuad.prototype={render:function(e,d,a,c){e.gl.bindBuffer(e.gl.ARRAY_BUFFER,d);var b=[this.p.x,this.p.y,this.p.z,this.p.x+this.u.x,this.p.y+this.u.y,this.p.z+this.u.z,this.p.x+this.u.x+this.v.x,this.p.y+this.u.y+this.v.y,this.p.z+this.u.z+this.v.z,this.p.x+this.v.x,this.p.y+this.v.y,this.p.z+this.v.z];e.gl.bufferData(e.gl.ARRAY_BUFFER,new Float32Array(b),e.gl.STATIC_DRAW);e.gl.activeTexture(e.gl.TEXTURE0);e.gl.bindTexture(e.gl.TEXTURE_2D,this.texture);e.gl.uniform1i(e.shaderProgram.samplerUniform,0);e.gl.bindBuffer(e.gl.ELEMENT_ARRAY_BUFFER,c);e.gl.drawElements(e.gl.TRIANGLES,6,e.gl.UNSIGNED_SHORT,0);e.gl.bindTexture(e.gl.TEXTURE_2D,null)}};bigshot.WebGLTexturedQuadScene=function(b,a){this.quads=new Array();this.webGl=b;this.buffers=a};bigshot.WebGLTexturedQuadScene.prototype={addQuad:function(a){this.quads.push(a)},render:function(){var a=this.buffers.get();var f=a.vertexPositionBuffer;var c=a.textureCoordBuffer;var e=a.vertexIndexBuffer;this.webGl.setMatrixUniforms();for(var d=0;d<this.quads.length;++d){this.quads[d].render(this.webGl,f,c,e)}}};bigshot.VRPanoramaParameters=function(b){this.posterSize=0;this.emptyImage=null;this.suffix=null;this.width=0;this.height=0;this.container=null;this.maxTesselation=-1;this.tileSize=0;this.overlap=0;this.basePath=null;this.fileSystemType="folder";this.fileSystem=null;this.dataLoader=new bigshot.DefaultDataLoader();this.maxTextureMagnification=1;this.textureMagFilter=null;this.textureMinFilter=null;this.minFov=2;this.maxFov=90;this.minPitch=-90;this.maxPitch=90;this.minYaw=-360;this.maxYaw=720;this.yawOffset=0;this.pitchOffset=0;this.rollOffset=0;this.onload=null;this.renderer=null;this.fling=true;this.flingScale=0.004;if(b){for(var a in b){this[a]=b[a]}}this.merge=function(d,e){for(var c in d){if(e||!this[c]){this[c]=d[c]}}};return this};bigshot.VRPanorama=function(d){bigshot.EventDispatcher.call(this);var c=this;this.parameters=d;this.maxTextureMagnification=d.maxTextureMagnification;this.container=d.container;this.browser=new bigshot.Browser();this.dragStart=null;this.dragDistance=0;this.hotspots=[];this.disposed=false;this.transformOffsets={y:d.yawOffset,p:d.pitchOffset,r:d.rollOffset};this.state={rotation:{p:0,y:0,r:0},fov:45,translation:{x:0,y:0,z:0}};this.renderer=null;if(this.parameters.renderer){if(this.parameters.renderer=="css"){this.renderer=new bigshot.CSS3DVRRenderer(this.container)}else{if(this.parameters.renderer=="webgl"){this.renderer=new bigshot.WebGLVRRenderer(this.container)}else{throw new Error("Unknown renderer: "+this.parameters.renderer)}}}else{this.renderer=bigshot.WebGLUtil.isWebGLSupported()?new bigshot.WebGLVRRenderer(this.container):new bigshot.CSS3DVRRenderer(this.container)}this.renderListeners=new Array();this.renderables=new Array();this.idleCounter=0;this.maxIdleCounter=-1;this.smoothrotatePermit=0;var f=function(g){if(g.preventDefault){g.preventDefault()}return false};this.fullScreenHandler=null;this.renderAsapPermitTaken=false;this.sizeContainer=null;var a={facesLeft:6,faceLoaded:function(){this.facesLeft--;if(this.facesLeft==0){if(c.parameters.onload){c.parameters.onload()}}}};var b=function(){a.faceLoaded()};this.vrFaces=new Array();this.vrFaces[0]=new bigshot.VRFace(this,"f",{x:-1,y:1,z:-1},2,{x:1,y:0,z:0},{x:0,y:-1,z:0},b);this.vrFaces[1]=new bigshot.VRFace(this,"b",{x:1,y:1,z:1},2,{x:-1,y:0,z:0},{x:0,y:-1,z:0},b);this.vrFaces[2]=new bigshot.VRFace(this,"l",{x:-1,y:1,z:1},2,{x:0,y:0,z:-1},{x:0,y:-1,z:0},b);this.vrFaces[3]=new bigshot.VRFace(this,"r",{x:1,y:1,z:-1},2,{x:0,y:0,z:1},{x:0,y:-1,z:0},b);this.vrFaces[4]=new bigshot.VRFace(this,"u",{x:-1,y:1,z:1},2,{x:1,y:0,z:0},{x:0,y:0,z:-1},b);this.vrFaces[5]=new bigshot.VRFace(this,"d",{x:-1,y:-1,z:-1},2,{x:1,y:0,z:0},{x:0,y:0,z:1},b);var e=function(g){if(g.clientX){return g}else{return{clientX:g.changedTouches[0].clientX,clientY:g.changedTouches[0].clientY}}};this.lastTouchStartAt=-1;this.allListeners={mousedown:function(g){c.smoothRotate();c.resetIdle();c.dragMouseDown(g);return f(g)},mouseup:function(g){c.resetIdle();c.dragMouseUp(g);return f(g)},mousemove:function(g){c.resetIdle();c.dragMouseMove(g);return f(g)},gesturestart:function(g){c.gestureStart(g);return f(g)},gesturechange:function(g){c.gestureChange(g);return f(g)},gestureend:function(g){c.gestureEnd(g);return f(g)},DOMMouseScroll:function(g){c.resetIdle();c.mouseWheel(g);return f(g)},mousewheel:function(g){c.resetIdle();c.mouseWheel(g);return f(g)},dblclick:function(g){c.mouseDoubleClick(g);return f(g)},touchstart:function(g){c.smoothRotate();c.lastTouchStartAt=new Date().getTime();c.resetIdle();c.dragMouseDown(e(g));return f(g)},touchend:function(i){c.resetIdle();var g=c.dragMouseUp(e(i));if(!g&&(c.lastTouchStartAt>new Date().getTime()-350)){c.mouseDoubleClick(e(i))}c.lastTouchStartAt=-1;return f(i)},touchmove:function(g){if(c.dragDistance>24){c.lastTouchStartAt=-1}c.resetIdle();c.dragMouseMove(e(g));return f(g)}};this.addEventListeners();this.onresizeHandler=function(g){c.onresize()};this.browser.registerListener(window,"resize",this.onresizeHandler,false);this.browser.registerListener(document.body,"orientationchange",this.onresizeHandler,false);this.setPitch(0);this.setYaw(0);this.setFov(45)};bigshot.VRPanorama.DRAG_GRAB="grab";bigshot.VRPanorama.DRAG_PAN="pan";bigshot.VRPanorama.ONRENDER_BEGIN=0;bigshot.VRPanorama.ONRENDER_END=1;bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE=0;bigshot.VRPanorama.prototype={addHotspot:function(a){this.hotspots.push(a)},getParameters:function(){return this.parameters},setTranslation:function(a,c,b){this.state.translation.x=a;this.state.translation.y=c;this.state.translation.z=b},getTranslation:function(){return this.state.translation},setFov:function(a){a=Math.min(this.parameters.maxFov,a);a=Math.max(this.parameters.minFov,a);this.state.fov=a},getFov:function(){return this.state.fov},screenToPolar:function(g,e){var c=this.screenToRayDelta(g,e);var f=$V([c.x,c.y,c.z,1]);f=Matrix.RotationX(this.getPitch()*Math.PI/180).ensure4x4().x(f);f=Matrix.RotationY(-this.getYaw()*Math.PI/180).ensure4x4().x(f);var m=f.e(1);var l=f.e(2);var k=f.e(3);var d=Math.sqrt(m*m+k*k);var a=Math.atan2(m,-k)*180/Math.PI;var i=Math.atan2(l,d)*180/Math.PI;var b={};b.yaw=(a+360)%360;b.pitch=i;return b},snapPitch:function(a){a=Math.min(this.parameters.maxPitch,a);a=Math.max(this.parameters.minPitch,a);return a},setPitch:function(a){this.state.rotation.p=this.snapPitch(a)},circleDistance:function(d,c){if(c>d){var b=(c-d);var a=((c-360)-d);return Math.abs(b)<Math.abs(a)?b:a}else{var b=(c-d);var a=(360-d)+c;return Math.abs(b)<Math.abs(a)?b:a}},circleSnapTo:function(d,e,c){var b=this.circleDistance(d,e);var a=this.circleDistance(d,c);return Math.abs(b)<Math.abs(a)?e:c},snapYaw:function(a){a%=360;if(a<0){a+=360}if(this.parameters.minYaw<this.parameters.maxYaw){if(a>this.parameters.maxYaw||a<this.parameters.minYaw){a=circleSnapTo(a,this.parameters.minYaw,this.parameters.maxYaw)}}else{if(a>this.parameters.minYaw){}else{if(a>this.parameters.maxYaw){a=circleSnapTo(a,this.parameters.minYaw,this.parameters.maxYaw)}else{}}}return a},setYaw:function(a){this.state.rotation.y=this.snapYaw(a)},getYaw:function(){return this.state.rotation.y},getPitch:function(){return this.state.rotation.p},dispose:function(){this.disposed=true;this.browser.unregisterListener(window,"resize",this.onresizeHandler,false);this.browser.unregisterListener(document.body,"orientationchange",this.onresizeHandler,false);this.removeEventListeners();for(var a=0;a<this.vrFaces.length;++a){this.vrFaces[a].dispose()}this.renderer.dispose()},createVREventData:function(b){var a=this.browser.getElementPosition(this.container);b.localX=b.clientX-a.x;b.localY=b.clientY-a.y;b.ray=this.screenToRay(b.localX,b.localY);var c=this.screenToPolar(b.localX,b.localY);b.yaw=c.yaw;b.pitch=c.pitch;b.target=this;b.currentTarget=this;return new bigshot.VREvent(b)},beginRender:function(b,a){this.onrender(bigshot.VRPanorama.ONRENDER_BEGIN,b,a);this.renderer.beginRender(this.state.rotation,this.state.fov,this.state.translation,this.transformOffsets)},addRenderListener:function(a){var b=new Array();b=b.concat(this.renderListeners);b.push(a);this.renderListeners=b},removeRenderListener:function(b){var c=new Array();c=c.concat(this.renderListeners);for(var a=0;a<c.length;++a){if(c[a]===b){c.splice(a,1);break}}this.renderListeners=c},onrender:function(d,c,b){var e=this.renderListeners;for(var a=0;a<e.length;++a){e[a](d,c,b)}},endRender:function(c,b){for(var a in this.vrFaces){this.vrFaces[a].endRender()}this.renderer.endRender();this.onrender(bigshot.VRPanorama.ONRENDER_END,c,b)},addRenderable:function(a){var b=new Array();b.concat(this.renderables);b.push(a);this.renderables=b},removeRenderable:function(b){var c=new Array();c.concat(this.renderables);for(var a=0;a<c.length;++a){if(c[a]==listener){c.splice(a,1);break}}this.renderables=c},render:function(d,c){if(!this.disposed){this.beginRender(d,c);var e=this.renderer.createTexturedQuadScene();for(var b in this.vrFaces){this.vrFaces[b].render(e)}for(var a=0;a<this.renderables.length;++a){this.renderables[a](this.renderer,e)}e.render();for(var a=0;a<this.hotspots.length;++a){this.hotspots[a].layout()}this.endRender(d,c)}},renderUpdated:function(d,c){if(!this.disposed&&this.renderer.supportsUpdate()){this.beginRender(d,c);var e=this.renderer.createTexturedQuadScene();for(var b in this.vrFaces){if(this.vrFaces[b].isUpdated()){this.vrFaces[b].render(e)}}e.render();for(var a=0;a<this.hotspots.length;++a){this.hotspots[a].layout()}this.endRender(d,c)}else{this.render(d,c)}},dragMode:bigshot.VRPanorama.DRAG_GRAB,setDragMode:function(a){this.dragMode=a},addEventListeners:function(){for(var a in this.allListeners){this.browser.registerListener(this.container,a,this.allListeners[a],false)}},removeEventListeners:function(){for(var a in this.allListeners){this.browser.unregisterListener(this.container,a,this.allListeners[a],false)}},dragMouseDown:function(a){this.dragStart={clientX:a.clientX,clientY:a.clientY};this.dragLast={clientX:a.clientX,clientY:a.clientY,dx:0,dy:0,dt:1000000,time:new Date().getTime()};this.dragDistance=0},dragMouseUp:function(i){if(this.dragStart==null||this.dragLast==null){this.dragStart=null;this.dragLast=null;return}this.dragStart=null;var m=this.dragLast.dx;var l=this.dragLast.dy;var d=Math.sqrt(m*m+l*l);var c=this.dragLast.dt;var b=new Date().getTime()-this.dragLast.time;this.dragLast=null;var k=c>0?(d/c):0;if(k>0.05&&b<250&&c>20&&this.parameters.fling){var f=this.state.fov/this.renderer.getViewportHeight();var g=new Date().getTime();var a=this.parameters.flingScale;m/=c;l/=c;this.smoothRotate(function(o){var n=new Date().getTime()-g;var e=Math.pow(2,-n*a);var p=(m*o*f)*e;return e>0.01?p:null},function(o){var n=new Date().getTime()-g;var e=Math.pow(2,-n*a);var p=(l*o*f)*e;return e>0.01?p:null},function(){return null});return true}else{this.smoothRotate();return false}},dragMouseMove:function(d){if(this.dragStart!=null&&this.currentGesture==null){if(this.dragMode==bigshot.VRPanorama.DRAG_GRAB){this.smoothRotate();var f=this.state.fov/this.renderer.getViewportHeight();var b=d.clientX-this.dragStart.clientX;var a=d.clientY-this.dragStart.clientY;this.dragDistance+=b+a;this.setYaw(this.getYaw()-b*f);this.setPitch(this.getPitch()-a*f);this.renderAsap();this.dragStart=d;var c=new Date().getTime()-this.dragLast.time;if(c>20){this.dragLast={dx:this.dragLast.clientX-d.clientX,dy:this.dragLast.clientY-d.clientY,dt:c,clientX:d.clientX,clientY:d.clientY,time:new Date().getTime()}}}else{var f=0.1*this.state.fov/this.renderer.getViewportHeight();var b=d.clientX-this.dragStart.clientX;var a=d.clientY-this.dragStart.clientY;this.dragDistance=b+a;this.smoothRotate(function(){return b*f},function(){return a*f})}}},onMouseDoubleClick:function(c,a,d){var b=this.createVREventData({type:"dblclick",clientX:c.clientX,clientY:c.clientY});this.fireEvent("dblclick",b);if(!b.defaultPrevented){this.smoothRotateToXY(a,d)}},mouseDoubleClick:function(a){var b=this.browser.getElementPosition(this.container);this.onMouseDoubleClick(a,a.clientX-b.x,a.clientY-b.y)},gestureStart:function(a){this.currentGesture={startFov:this.getFov(),scale:a.scale}},gestureEnd:function(a){this.currentGesture=null},gestureChange:function(a){if(this.currentGesture){var b=this.currentGesture.startFov/a.scale;this.setFov(b);this.renderAsap()}},setMaxTextureMagnification:function(a){this.maxTextureMagnification=a},getMaxTextureMagnification:function(){return this.maxTextureMagnification},getMinFovFromViewportAndImage:function(){var a=this.renderer.getViewportHeight()/2;var f=this.vrFaces[0].parameters.height;for(var c in this.vrFaces){f=Math.min(f,this.vrFaces[c].parameters.height)}var b=this.maxTextureMagnification*f/2;var d=a/b;var e=Math.atan(d)*180/Math.PI;return e*2},screenToRay:function(a,d){var c=this.screenToRayDelta(a,d);var b=this.renderer.transformToWorld(c);b=Matrix.RotationY(-this.transformOffsets.y*Math.PI/180).ensure4x4().xPoint3Dhom1(b);b=Matrix.RotationX(-this.transformOffsets.p*Math.PI/180).ensure4x4().xPoint3Dhom1(b);b=Matrix.RotationZ(-this.transformOffsets.r*Math.PI/180).ensure4x4().xPoint3Dhom1(b);return b},screenToRayDelta:function(k,i){var g=this.renderer.getViewportHeight()/2;var d=this.renderer.getViewportWidth()/2;var k=(k-d);var i=(i-g);var e=Math.tan((this.state.fov/2)*Math.PI/180);var f=e*this.renderer.getViewportWidth()/this.renderer.getViewportHeight();var c=k*f/d;var b=i*e/g;var a=-1;return{x:c,y:b,z:a}},smoothRotateToXY:function(a,c){var b=this.screenToPolar(a,c);this.smoothRotateTo(this.snapYaw(b.yaw),this.snapPitch(b.pitch),this.getFov(),this.state.fov/200)},ease:function(f,e,c,a){var b=c*40;if(!a){a=c/5}var d=c/1000;var g=f-e;if(g>b){g=-c}else{if(g<-b){g=c}else{if(Math.abs(g)<a){g=-g}else{if(Math.abs(g)<d){g=0}else{g=-(c*g)/(b)}}}}return g},resetIdle:function(){this.idleCounter=0},idleTick:function(){if(this.maxIdleCounter<0){return}++this.idleCounter;if(this.idleCounter==this.maxIdleCounter){this.autoRotate()}var a=this;setTimeout(function(){a.idleTick()},1000)},autoRotateWhenIdle:function(a){this.maxIdleCounter=a;this.idleCounter=0;if(a<0){return}else{if(this.maxIdleCounter>0){var b=this;setTimeout(function(){b.idleTick()},1000)}}},autoRotate:function(){var b=this;var d=this.state.fov/400;var c=d;var a=c;this.smoothRotate(function(){var e=b.getYaw()+a;if(b.parameters.minYaw<b.parameters.maxYaw){if(e>b.parameters.maxYaw||e<b.parameters.minYaw){a=-a}}else{if(e>b.parameters.minYaw){}else{if(e>b.parameters.maxYaw){a=-a}else{}}}return a},function(){return b.ease(b.getPitch(),0,c)},function(){return b.ease(b.getFov(),45,0.1)})},smoothRotateTo:function(e,d,a,c){var b=this;this.smoothRotate(function(){var g=b.circleDistance(e,b.getYaw());var f=-b.ease(0,g,c);return Math.abs(f)>0.01?f:null},function(){var f=b.ease(b.getPitch(),d,c);return Math.abs(f)>0.01?f:null},function(){var f=b.ease(b.getFov(),a,c);return Math.abs(f)>0.01?f:null})},smoothRotate:function(c,g,f){++this.smoothrotatePermit;var d=this.smoothrotatePermit;if(!g&&!c&&!f){return}var e=this;var b={dy:c,dp:g,df:f,t:new Date().getTime()};var a=function(){if(e.smoothrotatePermit==d){var i=new Date().getTime();var l=i-b.t;b.t=i;var k=false;if(b.dy){var m=b.dy(l);if(m!=null){k=true;e.setYaw(e.getYaw()+m)}else{b.dy=null}}if(b.dp){var m=b.dp(l);if(m!=null){k=true;e.setPitch(e.getPitch()+m)}else{b.dp=null}}if(b.df){var m=b.df(l);if(m!=null){k=true;e.setFov(e.getFov()+m)}else{b.df=null}}e.render();if(k){e.browser.requestAnimationFrame(a,e.renderer.getElement())}}};a()},mouseWheel:function(a){var b=0;if(!a){a=window.event}if(a.wheelDelta){b=a.wheelDelta/120;if(window.opera){b=-b}}else{if(a.detail){b=-a.detail}}if(b){this.mouseWheelHandler(b)}if(a.preventDefault){a.preventDefault()}a.returnValue=false},mouseWheelHandler:function(c){var a=this;var b=null;if(c>0){if(this.getFov()>this.parameters.minFov){b=this.getFov()*0.9}}if(c<0){if(this.getFov()<this.parameters.maxFov){b=this.getFov()/0.9}}if(b!=null){this.smoothRotate(null,null,function(){var d=(b-a.getFov())/1.5;return Math.abs(d)>0.01?d:null})}},fullScreen:function(a){if(this.fullScreenHandler){return}var d=document.createElement("div");d.style.position="absolute";d.style.fontSize="16pt";d.style.top="128px";d.style.width="100%";d.style.color="white";d.style.padding="16px";d.style.zIndex="9999";d.style.textAlign="center";d.style.opacity="0.75";d.innerHTML="<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";var c=this;this.fullScreenHandler=new bigshot.FullScreen(this.container);this.fullScreenHandler.restoreSize=this.sizeContainer==null;this.fullScreenHandler.addOnResize(function(){c.onresize()});this.fullScreenHandler.addOnClose(function(){if(d.parentNode){try{div.removeChild(d)}catch(e){}}c.fullScreenHandler=null});if(a){this.fullScreenHandler.addOnClose(function(){a()})}this.removeEventListeners();this.fullScreenHandler.open();this.addEventListeners();var b=function(){c.render()};setTimeout(b,1000);setTimeout(b,2000);setTimeout(b,3000);if(this.fullScreenHandler.getRootElement()){this.fullScreenHandler.getRootElement().appendChild(d);setTimeout(function(){var f=0.75;var e=function(){f-=0.02;if(d.parentNode){if(f<=0){d.style.display="none";try{div.removeChild(d)}catch(g){}}else{d.style.opacity=f;setTimeout(e,20)}}};setTimeout(e,20)},3500)}return function(){c.removeEventListeners();c.fullScreenHandler.close();c.addEventListeners()}},onresize:function(){if(this.fullScreenHandler==null||!this.fullScreenHandler.isFullScreen){if(this.sizeContainer){var a=this.browser.getElementSize(this.sizeContainer);this.renderer.resize(a.w,a.h)}}else{this.container.style.width=window.innerWidth+"px";this.container.style.height=window.innerHeight+"px";var a=this.browser.getElementSize(this.container);this.renderer.resize(a.w,a.h)}this.renderer.onresize();this.renderAsap()},renderAsap:function(){if(!this.renderAsapPermitTaken&&!this.disposed){this.renderAsapPermitTaken=true;var a=this;this.browser.requestAnimationFrame(function(){a.renderAsapPermitTaken=false;a.render()},this.renderer.getElement())}},autoResizeContainer:function(a){this.sizeContainer=a}};bigshot.Object.extend(bigshot.VRPanorama,bigshot.EventDispatcher);bigshot.VRHotspot=function(a){this.panorama=a;this.clippingStrategy=bigshot.VRHotspot.CLIP_ADJUST(a)};bigshot.VRHotspot.CLIP_FRACTION=function(b,a){return function(f){var g={x0:Math.max(f.x,0),y0:Math.max(f.y,0),x1:Math.min(f.x+f.w,b.renderer.getViewportWidth()),y1:Math.min(f.y+f.h,b.renderer.getViewportHeight())};var e=f.w*f.h;var d=(g.x1-g.x0);var c=(g.y1-g.y0);if(d>0&&c>0){var i=d*c;return(i/e)>=a}else{return false}}};bigshot.VRHotspot.CLIP_CENTER=function(a){return function(b){var d={x:b.x+b.w/2,y:b.y+b.h/2};return d.x>=0&&d.x<a.renderer.getViewportWidth()&&d.y>=0&&d.y<a.renderer.getViewportHeight()}};bigshot.VRHotspot.CLIP_ADJUST=function(a){return function(b){if(b.x<0){b.w-=-b.x;b.x=0}if(b.y<0){b.h-=-b.y;b.y=0}if(b.x+b.w>a.renderer.getViewportWidth()){b.w=a.renderer.getViewportWidth()-b.x-1}if(b.y+b.h>a.renderer.getViewportHeight()){b.h=a.renderer.getViewportHeight()-b.y-1}return b.w>0&&b.h>0}};bigshot.VRHotspot.CLIP_ZOOM=function(a,c,b){return function(d){if(d.x>=0&&d.y>=0&&(d.x+c.w)<a.renderer.getViewportWidth()&&(d.y+c.h)<a.renderer.getViewportHeight()){d.w=c.w;d.h=c.h;return true}var f=0;if(d.x<0){f=Math.max(-d.x,f)}if(d.y<0){f=Math.max(-d.y,f)}if(d.x+c.w>a.renderer.getViewportWidth()){f=Math.max(d.x+c.w-a.renderer.getViewportWidth(),f)}if(d.y+c.h>a.renderer.getViewportHeight()){f=Math.max(d.y+c.h-a.renderer.getViewportHeight(),f)}f/=a.renderer.getViewportHeight();if(f>b){return false}var e=1/(1+f);d.w=c.w*e;d.h=c.w*e;if(d.x<0){d.x=0}if(d.y<0){d.y=0}if(d.x+d.w>a.renderer.getViewportWidth()){d.x=a.renderer.getViewportWidth()-d.w}if(d.y+d.h>a.renderer.getViewportHeight()){d.y=a.renderer.getViewportHeight()-d.h}return true}};bigshot.VRHotspot.CLIP_FADE=function(a,b){return function(c){var d=Math.min(c.x,c.y,a.renderer.getViewportWidth()-(c.x+c.w),a.renderer.getViewportHeight()-(c.y+c.h));if(d<=0){return false}else{if(d<=b){c.opacity=(d/b);return true}else{c.opacity=1;return true}}}};bigshot.VRHotspot.prototype={layout:function(){},rotate:function(d,c,b){var e=d*Math.PI/180;var a=Matrix.Rotation(e,$V([c.x,c.y,c.z])).ensure4x4();return a.xPoint3Dhom1(b)},toVector:function(c,b){var a={x:0,y:0,z:-1};a=this.rotate(-b,{x:1,y:0,z:0},a);a=this.rotate(-c,{x:0,y:1,z:0},a);return a},toScreen:function(b){var a=this.panorama.renderer.transformToScreen(b);return a},clip:function(a){return this.clippingStrategy(a)}};bigshot.VRPointHotspot=function(c,e,d,b,a,f){bigshot.VRHotspot.call(this,c);this.element=b;this.offsetX=a;this.offsetY=f;this.point=this.toVector(e,d)};bigshot.VRPointHotspot.prototype={layout:function(){var b=this.toScreen(this.point);var c=false;if(b!=null){var a=this.panorama.browser.getElementSize(this.element);b.w=a.w;b.h=a.h;b.x+=this.offsetX;b.y+=this.offsetY;if(this.clip(b)){this.element.style.top=(b.y)+"px";this.element.style.left=(b.x)+"px";this.element.style.width=(b.w)+"px";this.element.style.height=(b.h)+"px";if(b.opacity){this.element.style.opacity=b.opacity}this.element.style.visibility="inherit";c=true}}if(!c){this.element.style.visibility="hidden"}}};bigshot.Object.extend(bigshot.VRPointHotspot,bigshot.VRHotspot);bigshot.Object.validate("bigshot.VRPointHotspot",bigshot.VRHotspot);bigshot.VRRectangleHotspot=function(d,f,b,e,a,c){bigshot.VRHotspot.call(this,d);this.element=c;this.point0=this.toVector(f,b);this.point1=this.toVector(e,a)};bigshot.VRRectangleHotspot.prototype={layout:function(){var a=this.toScreen(this.point0);var d=this.toScreen(this.point1);var c=false;if(a!=null&&d!=null){var b={x:a.x,y:a.y,opacity:1,w:d.x-a.x,h:d.y-a.y};if(this.clip(b)){this.element.style.top=(b.y)+"px";this.element.style.left=(b.x)+"px";this.element.style.width=(b.w)+"px";this.element.style.height=(b.h)+"px";this.element.style.visibility="inherit";c=true}}if(!c){this.element.style.visibility="hidden"}}};bigshot.Object.extend(bigshot.VRRectangleHotspot,bigshot.VRHotspot);bigshot.Object.validate("bigshot.VRRectangleHotspot",bigshot.VRHotspot);bigshot.AdaptiveLODMonitorParameters=function(b){this.vrPanorama=null;this.targetFps=30;this.tolerance=0.3;this.rate=0.1;this.minMag=1.5;this.maxMag=16;this.hqRenderMag=1.5;this.hqRenderDelay=2000;this.hqRenderInterval=1000;if(b){for(var a in b){this[a]=b[a]}}this.merge=function(d,e){for(var c in d){if(e||!this[c]){this[c]=d[c]}}};return this};bigshot.AdaptiveLODMonitor=function(b){this.setParameters(b);this.currentAdaptiveMagnification=b.vrPanorama.getMaxTextureMagnification();this.frames=0;this.samples=0;this.renderTimeTotal=0;this.renderTimeLast=0;this.samplesLast=0;this.startTime=0;this.lastRender=0;this.hqRender=false;this.hqMode=false;this.hqRenderWaiting=false;this.enabled=true;var a=this;this.listenerFunction=function(e,d,c){a.listener(e,d,c)}};bigshot.AdaptiveLODMonitor.prototype={averageRenderTime:function(){if(this.samples>0){return this.renderTimeTotal/this.samples}else{return -1}},setParameters:function(a){this.parameters=a;this.targetTime=1000/this.parameters.targetFps;this.lowerTime=this.targetTime/(1+this.parameters.tolerance);this.upperTime=this.targetTime*(1+this.parameters.tolerance)},setEnabled:function(a){this.enabled=a},averageRenderTimeLast:function(){if(this.samples>0){return this.renderTimeLast/this.samplesLast}else{return -1}},getListener:function(){return this.listenerFunction},increaseDetail:function(){this.currentAdaptiveMagnification=Math.max(this.parameters.minMag,this.currentAdaptiveMagnification/(1+this.parameters.rate))},decreaseDetail:function(){this.currentAdaptiveMagnification=Math.min(this.parameters.maxMag,this.currentAdaptiveMagnification*(1+this.parameters.rate))},sample:function(){var b=new Date().getTime()-this.startTime;this.samples++;this.renderTimeTotal+=b;this.samplesLast++;this.renderTimeLast+=b;if(this.samplesLast>4){var a=this.renderTimeLast/this.samplesLast;if(a<this.lowerTime){this.increaseDetail()}else{if(a>this.upperTime){this.decreaseDetail()}}this.samplesLast=0;this.renderTimeLast=0}},hqRenderTick:function(){if(this.lastRender<new Date().getTime()-this.parameters.hqRenderDelay){this.hqRender=true;this.hqMode=true;if(this.enabled){this.parameters.vrPanorama.setMaxTextureMagnification(this.parameters.hqRenderMag);this.parameters.vrPanorama.render()}this.hqRender=false;this.hqRenderWaiting=false}else{var a=this;setTimeout(function(){a.hqRenderTick()},this.parameters.hqRenderInterval)}},listener:function(d,c,b){if(!this.enabled){return}if(this.hqRender){return}if(this.hqMode&&c==bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE){this.parameters.vrPanorama.setMaxTextureMagnification(this.parameters.minMag);return}else{this.hqMode=false}this.parameters.vrPanorama.setMaxTextureMagnification(this.currentAdaptiveMagnification);this.frames++;if((this.frames<20||this.frames%5==0)&&d==bigshot.VRPanorama.ONRENDER_BEGIN){this.startTime=new Date().getTime();this.lastRender=this.startTime;var a=this;setTimeout(function(){a.sample()},1);if(!this.hqRenderWaiting){this.hqRenderWaiting=true;setTimeout(function(){a.hqRenderTick()},this.parameters.hqRenderInterval)}}}}}; \ No newline at end of file
diff --git a/js/vendor/bigshot/bigshot-full.js b/js/vendor/bigshot/bigshot-full.js
new file mode 100644
index 00000000..e8c30a3f
--- /dev/null
+++ b/js/vendor/bigshot/bigshot-full.js
@@ -0,0 +1,11259 @@
+// === Sylvester ===
+// Vector and Matrix mathematics modules for JavaScript
+// Copyright (c) 2007 James Coglan
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+var Sylvester = {
+ version: '0.1.3',
+ precision: 1e-6
+};
+
+function Vector() {}
+Vector.prototype = {
+
+ // Returns element i of the vector
+ e: function(i) {
+ return (i < 1 || i > this.elements.length) ? null : this.elements[i-1];
+ },
+
+ // Returns the number of elements the vector has
+ dimensions: function() {
+ return this.elements.length;
+ },
+
+ // Returns the modulus ('length') of the vector
+ modulus: function() {
+ return Math.sqrt(this.dot(this));
+ },
+
+ // Returns true iff the vector is equal to the argument
+ eql: function(vector) {
+ var n = this.elements.length;
+ var V = vector.elements || vector;
+ if (n != V.length) { return false; }
+ do {
+ if (Math.abs(this.elements[n-1] - V[n-1]) > Sylvester.precision) { return false; }
+ } while (--n);
+ return true;
+ },
+
+ // Returns a copy of the vector
+ dup: function() {
+ return Vector.create(this.elements);
+ },
+
+ // Maps the vector to another vector according to the given function
+ map: function(fn) {
+ var elements = [];
+ this.each(function(x, i) {
+ elements.push(fn(x, i));
+ });
+ return Vector.create(elements);
+ },
+
+ // Calls the iterator for each element of the vector in turn
+ each: function(fn) {
+ var n = this.elements.length, k = n, i;
+ do { i = k - n;
+ fn(this.elements[i], i+1);
+ } while (--n);
+ },
+
+ // Returns a new vector created by normalizing the receiver
+ toUnitVector: function() {
+ var r = this.modulus();
+ if (r === 0) { return this.dup(); }
+ return this.map(function(x) { return x/r; });
+ },
+
+ // Returns the angle between the vector and the argument (also a vector)
+ angleFrom: function(vector) {
+ var V = vector.elements || vector;
+ var n = this.elements.length, k = n, i;
+ if (n != V.length) { return null; }
+ var dot = 0, mod1 = 0, mod2 = 0;
+ // Work things out in parallel to save time
+ this.each(function(x, i) {
+ dot += x * V[i-1];
+ mod1 += x * x;
+ mod2 += V[i-1] * V[i-1];
+ });
+ mod1 = Math.sqrt(mod1); mod2 = Math.sqrt(mod2);
+ if (mod1*mod2 === 0) { return null; }
+ var theta = dot / (mod1*mod2);
+ if (theta < -1) { theta = -1; }
+ if (theta > 1) { theta = 1; }
+ return Math.acos(theta);
+ },
+
+ // Returns true iff the vector is parallel to the argument
+ isParallelTo: function(vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (angle <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is antiparallel to the argument
+ isAntiparallelTo: function(vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (Math.abs(angle - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is perpendicular to the argument
+ isPerpendicularTo: function(vector) {
+ var dot = this.dot(vector);
+ return (dot === null) ? null : (Math.abs(dot) <= Sylvester.precision);
+ },
+
+ // Returns the result of adding the argument to the vector
+ add: function(vector) {
+ var V = vector.elements || vector;
+ if (this.elements.length != V.length) { return null; }
+ return this.map(function(x, i) { return x + V[i-1]; });
+ },
+
+ // Returns the result of subtracting the argument from the vector
+ subtract: function(vector) {
+ var V = vector.elements || vector;
+ if (this.elements.length != V.length) { return null; }
+ return this.map(function(x, i) { return x - V[i-1]; });
+ },
+
+ // Returns the result of multiplying the elements of the vector by the argument
+ multiply: function(k) {
+ return this.map(function(x) { return x*k; });
+ },
+
+ x: function(k) { return this.multiply(k); },
+
+ // Returns the scalar product of the vector with the argument
+ // Both vectors must have equal dimensionality
+ dot: function(vector) {
+ var V = vector.elements || vector;
+ var i, product = 0, n = this.elements.length;
+ if (n != V.length) { return null; }
+ do { product += this.elements[n-1] * V[n-1]; } while (--n);
+ return product;
+ },
+
+ // Returns the vector product of the vector with the argument
+ // Both vectors must have dimensionality 3
+ cross: function(vector) {
+ var B = vector.elements || vector;
+ if (this.elements.length != 3 || B.length != 3) { return null; }
+ var A = this.elements;
+ return Vector.create([
+ (A[1] * B[2]) - (A[2] * B[1]),
+ (A[2] * B[0]) - (A[0] * B[2]),
+ (A[0] * B[1]) - (A[1] * B[0])
+ ]);
+ },
+
+ // Returns the (absolute) largest element of the vector
+ max: function() {
+ var m = 0, n = this.elements.length, k = n, i;
+ do { i = k - n;
+ if (Math.abs(this.elements[i]) > Math.abs(m)) { m = this.elements[i]; }
+ } while (--n);
+ return m;
+ },
+
+ // Returns the index of the first match found
+ indexOf: function(x) {
+ var index = null, n = this.elements.length, k = n, i;
+ do { i = k - n;
+ if (index === null && this.elements[i] == x) {
+ index = i + 1;
+ }
+ } while (--n);
+ return index;
+ },
+
+ // Returns a diagonal matrix with the vector's elements as its diagonal elements
+ toDiagonalMatrix: function() {
+ return Matrix.Diagonal(this.elements);
+ },
+
+ // Returns the result of rounding the elements of the vector
+ round: function() {
+ return this.map(function(x) { return Math.round(x); });
+ },
+
+ // Returns a copy of the vector with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function(x) {
+ return this.map(function(y) {
+ return (Math.abs(y - x) <= Sylvester.precision) ? x : y;
+ });
+ },
+
+ // Returns the vector's distance from the argument, when considered as a point in space
+ distanceFrom: function(obj) {
+ if (obj.anchor) { return obj.distanceFrom(this); }
+ var V = obj.elements || obj;
+ if (V.length != this.elements.length) { return null; }
+ var sum = 0, part;
+ this.each(function(x, i) {
+ part = x - V[i-1];
+ sum += part * part;
+ });
+ return Math.sqrt(sum);
+ },
+
+ // Returns true if the vector is point on the given line
+ liesOn: function(line) {
+ return line.contains(this);
+ },
+
+ // Return true iff the vector is a point in the given plane
+ liesIn: function(plane) {
+ return plane.contains(this);
+ },
+
+ // Rotates the vector about the given object. The object should be a
+ // point if the vector is 2D, and a line if it is 3D. Be careful with line directions!
+ rotate: function(t, obj) {
+ var V, R, x, y, z;
+ switch (this.elements.length) {
+ case 2:
+ V = obj.elements || obj;
+ if (V.length != 2) { return null; }
+ R = Matrix.Rotation(t).elements;
+ x = this.elements[0] - V[0];
+ y = this.elements[1] - V[1];
+ return Vector.create([
+ V[0] + R[0][0] * x + R[0][1] * y,
+ V[1] + R[1][0] * x + R[1][1] * y
+ ]);
+ break;
+ case 3:
+ if (!obj.direction) { return null; }
+ var C = obj.pointClosestTo(this).elements;
+ R = Matrix.Rotation(t, obj.direction).elements;
+ x = this.elements[0] - C[0];
+ y = this.elements[1] - C[1];
+ z = this.elements[2] - C[2];
+ return Vector.create([
+ C[0] + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C[1] + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C[2] + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ]);
+ break;
+ default:
+ return null;
+ }
+ },
+
+ // Returns the result of reflecting the point in the given point, line or plane
+ reflectionIn: function(obj) {
+ if (obj.anchor) {
+ // obj is a plane or line
+ var P = this.elements.slice();
+ var C = obj.pointClosestTo(P).elements;
+ return Vector.create([C[0] + (C[0] - P[0]), C[1] + (C[1] - P[1]), C[2] + (C[2] - (P[2] || 0))]);
+ } else {
+ // obj is a point
+ var Q = obj.elements || obj;
+ if (this.elements.length != Q.length) { return null; }
+ return this.map(function(x, i) { return Q[i-1] + (Q[i-1] - x); });
+ }
+ },
+
+ // Utility to make sure vectors are 3D. If they are 2D, a zero z-component is added
+ to3D: function() {
+ var V = this.dup();
+ switch (V.elements.length) {
+ case 3: break;
+ case 2: V.elements.push(0); break;
+ default: return null;
+ }
+ return V;
+ },
+
+ // Returns a string representation of the vector
+ inspect: function() {
+ return '[' + this.elements.join(', ') + ']';
+ },
+
+ // Set vector's elements from an array
+ setElements: function(els) {
+ this.elements = (els.elements || els).slice();
+ return this;
+ }
+};
+
+// Constructor function
+Vector.create = function create (elements) {
+ var V = new Vector();
+ return V.setElements(elements);
+};
+
+Vector.createNoCopy = function createNoCopy (elements) {
+ var V = new Vector();
+ V.elements = elements;
+ return V;
+};
+
+// i, j, k unit vectors
+Vector.i = Vector.createNoCopy([1,0,0]);
+Vector.j = Vector.createNoCopy([0,1,0]);
+Vector.k = Vector.createNoCopy([0,0,1]);
+
+// Random vector of size n
+Vector.Random = function(n) {
+ var elements = [];
+ do { elements.push(Math.random());
+ } while (--n);
+ return Vector.createNoCopy(elements);
+};
+
+// Vector filled with zeros
+Vector.Zero = function(n) {
+ var elements = [];
+ do { elements.push(0);
+ } while (--n);
+ return Vector.createNoCopy(elements);
+};
+
+
+
+function Matrix() {}
+Matrix.prototype = {
+
+ // Returns element (i,j) of the matrix
+ e: function(i,j) {
+ if (i < 1 || i > this.elements.length || j < 1 || j > this.elements[0].length) { return null; }
+ return this.elements[i-1][j-1];
+ },
+
+ // Returns row k of the matrix as a vector
+ row: function(i) {
+ if (i > this.elements.length) { return null; }
+ return Vector.create(this.elements[i-1]);
+ },
+
+ // Returns column k of the matrix as a vector
+ col: function(j) {
+ if (j > this.elements[0].length) { return null; }
+ var col = [], n = this.elements.length, k = n, i;
+ do { i = k - n;
+ col.push(this.elements[i][j-1]);
+ } while (--n);
+ return Vector.create(col);
+ },
+
+ // Returns the number of rows/columns the matrix has
+ dimensions: function() {
+ return {rows: this.elements.length, cols: this.elements[0].length};
+ },
+
+ // Returns the number of rows in the matrix
+ rows: function() {
+ return this.elements.length;
+ },
+
+ // Returns the number of columns in the matrix
+ cols: function() {
+ return this.elements[0].length;
+ },
+
+ // Returns true iff the matrix is equal to the argument. You can supply
+ // a vector as the argument, in which case the receiver must be a
+ // one-column matrix equal to the vector.
+ eql: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (this.elements.length != M.length ||
+ this.elements[0].length != M[0].length) { return false; }
+ var ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ if (Math.abs(this.elements[i][j] - M[i][j]) > Sylvester.precision) { return false; }
+ } while (--nj);
+ } while (--ni);
+ return true;
+ },
+
+ // Returns a copy of the matrix
+ dup: function() {
+ return Matrix.create(this.elements);
+ },
+
+ // Maps the matrix to another matrix (of the same dimensions) according to the given function
+ map: function(fn) {
+ var els = [], ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ els[i] = [];
+ do { j = kj - nj;
+ els[i][j] = fn(this.elements[i][j], i + 1, j + 1);
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(els);
+ },
+
+ // Returns true iff the argument has the same dimensions as the matrix
+ isSameSizeAs: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ return (this.elements.length == M.length &&
+ this.elements[0].length == M[0].length);
+ },
+
+ // Returns the result of adding the argument to the matrix
+ add: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function(x, i, j) { return x + M[i-1][j-1]; });
+ },
+
+ // Returns the result of subtracting the argument from the matrix
+ subtract: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function(x, i, j) { return x - M[i-1][j-1]; });
+ },
+
+ // Returns true iff the matrix can multiply the argument from the left
+ canMultiplyFromLeft: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ // this.columns should equal matrix.rows
+ return (this.elements[0].length == M.length);
+ },
+
+ // Returns the result of multiplying the matrix from the right by the argument.
+ // If the argument is a scalar then just multiply all the elements. If the argument is
+ // a vector, a vector is returned, which saves you having to remember calling
+ // col(1) on the result.
+ multiply: function(matrix) {
+ if (!matrix.elements) {
+ return this.map(function(x) { return x * matrix; });
+ }
+ var returnVector = matrix.modulus ? true : false;
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.canMultiplyFromLeft(M)) { return null; }
+ var ni = this.elements.length, ki = ni, i, nj, kj = M[0].length, j;
+ var cols = this.elements[0].length, elements = [], sum, nc, c;
+ do { i = ki - ni;
+ elements[i] = [];
+ nj = kj;
+ do { j = kj - nj;
+ sum = 0;
+ nc = cols;
+ do { c = cols - nc;
+ sum += this.elements[i][c] * M[c][j];
+ } while (--nc);
+ elements[i][j] = sum;
+ } while (--nj);
+ } while (--ni);
+ var M = Matrix.create(elements);
+ return returnVector ? M.col(1) : M;
+ },
+
+ x: function(matrix) { return this.multiply(matrix); },
+
+ xvec : function xvec (vector) {
+ var inEl = vector.elements;
+ return Vector.createNoCopy (this.xvecarray (inEl));
+ },
+
+ xvecarray : function xvecarray (inEl) {
+ var jmax = inEl.length;
+ var outEl = new Array (jmax);
+ var thisEl = this.elements;
+ var imax = thisEl.length;
+ for (var i = 0; i < imax; ++i) {
+ var acc = 0;
+ var row = thisEl[i];
+ for (var j = 0; j < jmax; ++j) {
+ acc += row[j] * inEl[j];
+ }
+ outEl[i] = acc;
+ }
+ return outEl;
+ },
+
+ /**
+ * Multiplies a bigshot.Point3D with this matrix.
+ * The 4th column of the matrix is ignored, and the transformation
+ * behaves as if the point was a {@link bigshot.HomogeneousPoint3D} with a w value of 0.
+ */
+ xPoint3D : function xPoint3D (pt3d) {
+ var thisEl = this.elements;
+ return {
+ x : pt3d.x * thisEl[0][0] + pt3d.y * thisEl[0][1] + pt3d.z * thisEl[0][2],
+ y : pt3d.x * thisEl[1][0] + pt3d.y * thisEl[1][1] + pt3d.z * thisEl[1][2],
+ z : pt3d.x * thisEl[2][0] + pt3d.y * thisEl[2][1] + pt3d.z * thisEl[2][2]
+ };
+ },
+
+ /**
+ * Multiplies a bigshot.Point3D with this matrix.
+ * The transformation behaves as if the point was a {@link bigshot.HomogeneousPoint3D} homogenous coordinate with a w value of 1.
+ */
+ xPoint3Dhom1 : function xPoint3D (pt3d) {
+ var thisEl = this.elements;
+ return {
+ x : pt3d.x * thisEl[0][0] + pt3d.y * thisEl[0][1] + pt3d.z * thisEl[0][2] + thisEl[0][3],
+ y : pt3d.x * thisEl[1][0] + pt3d.y * thisEl[1][1] + pt3d.z * thisEl[1][2] + thisEl[1][3],
+ z : pt3d.x * thisEl[2][0] + pt3d.y * thisEl[2][1] + pt3d.z * thisEl[2][2] + thisEl[2][3]
+ };
+ },
+
+ /**
+ * Multiplies a bigshot.Point3D with this matrix, preserving the w-value.
+ * The transformation behaves as if the point was a x,y,z,w homogenous coordinate with a w value of 1.
+ *
+ * @type bigshot.HomogeneousPoint3D
+ */
+ xPoint3Dhom : function xPoint3D (pt3d) {
+ var thisEl = this.elements;
+ return {
+ x : pt3d.x * thisEl[0][0] + pt3d.y * thisEl[0][1] + pt3d.z * thisEl[0][2] + thisEl[0][3],
+ y : pt3d.x * thisEl[1][0] + pt3d.y * thisEl[1][1] + pt3d.z * thisEl[1][2] + thisEl[1][3],
+ z : pt3d.x * thisEl[2][0] + pt3d.y * thisEl[2][1] + pt3d.z * thisEl[2][2] + thisEl[2][3],
+ w : pt3d.x * thisEl[3][0] + pt3d.y * thisEl[3][1] + pt3d.z * thisEl[3][2] + thisEl[3][3]
+ };
+ },
+
+ // Returns a submatrix taken from the matrix
+ // Argument order is: start row, start col, nrows, ncols
+ // Element selection wraps if the required index is outside the matrix's bounds, so you could
+ // use this to perform row/column cycling or copy-augmenting.
+ minor: function(a, b, c, d) {
+ var elements = [], ni = c, i, nj, j;
+ var rows = this.elements.length, cols = this.elements[0].length;
+ do { i = c - ni;
+ elements[i] = [];
+ nj = d;
+ do { j = d - nj;
+ elements[i][j] = this.elements[(a+i-1)%rows][(b+j-1)%cols];
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(elements);
+ },
+
+ // Returns the transpose of the matrix
+ transpose: function() {
+ var rows = this.elements.length, cols = this.elements[0].length;
+ var elements = [], ni = cols, i, nj, j;
+ do { i = cols - ni;
+ elements[i] = [];
+ nj = rows;
+ do { j = rows - nj;
+ elements[i][j] = this.elements[j][i];
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(elements);
+ },
+
+ // Returns true iff the matrix is square
+ isSquare: function() {
+ return (this.elements.length == this.elements[0].length);
+ },
+
+ // Returns the (absolute) largest element of the matrix
+ max: function() {
+ var m = 0, ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ if (Math.abs(this.elements[i][j]) > Math.abs(m)) { m = this.elements[i][j]; }
+ } while (--nj);
+ } while (--ni);
+ return m;
+ },
+
+ // Returns the indeces of the first match found by reading row-by-row from left to right
+ indexOf: function(x) {
+ var index = null, ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ if (this.elements[i][j] == x) { return {i: i+1, j: j+1}; }
+ } while (--nj);
+ } while (--ni);
+ return null;
+ },
+
+ // If the matrix is square, returns the diagonal elements as a vector.
+ // Otherwise, returns null.
+ diagonal: function() {
+ if (!this.isSquare) { return null; }
+ var els = [], n = this.elements.length, k = n, i;
+ do { i = k - n;
+ els.push(this.elements[i][i]);
+ } while (--n);
+ return Vector.create(els);
+ },
+
+ // Make the matrix upper (right) triangular by Gaussian elimination.
+ // This method only adds multiples of rows to other rows. No rows are
+ // scaled up or switched, and the determinant is preserved.
+ toRightTriangular: function() {
+ var M = this.dup(), els;
+ var n = this.elements.length, k = n, i, np, kp = this.elements[0].length, p;
+ do { i = k - n;
+ if (M.elements[i][i] == 0) {
+ for (j = i + 1; j < k; j++) {
+ if (M.elements[j][i] != 0) {
+ els = []; np = kp;
+ do { p = kp - np;
+ els.push(M.elements[i][p] + M.elements[j][p]);
+ } while (--np);
+ M.elements[i] = els;
+ break;
+ }
+ }
+ }
+ if (M.elements[i][i] != 0) {
+ for (j = i + 1; j < k; j++) {
+ var multiplier = M.elements[j][i] / M.elements[i][i];
+ els = []; np = kp;
+ do { p = kp - np;
+ // Elements with column numbers up to an including the number
+ // of the row that we're subtracting can safely be set straight to
+ // zero, since that's the point of this routine and it avoids having
+ // to loop over and correct rounding errors later
+ els.push(p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier);
+ } while (--np);
+ M.elements[j] = els;
+ }
+ }
+ } while (--n);
+ return M;
+ },
+
+ toUpperTriangular: function() { return this.toRightTriangular(); },
+
+ // Returns the determinant for square matrices
+ determinant: function() {
+ if (!this.isSquare()) { return null; }
+ var M = this.toRightTriangular();
+ var det = M.elements[0][0], n = M.elements.length - 1, k = n, i;
+ do { i = k - n + 1;
+ det = det * M.elements[i][i];
+ } while (--n);
+ return det;
+ },
+
+ det: function() { return this.determinant(); },
+
+ // Returns true iff the matrix is singular
+ isSingular: function() {
+ return (this.isSquare() && this.determinant() === 0);
+ },
+
+ // Returns the trace for square matrices
+ trace: function() {
+ if (!this.isSquare()) { return null; }
+ var tr = this.elements[0][0], n = this.elements.length - 1, k = n, i;
+ do { i = k - n + 1;
+ tr += this.elements[i][i];
+ } while (--n);
+ return tr;
+ },
+
+ tr: function() { return this.trace(); },
+
+ // Returns the rank of the matrix
+ rank: function() {
+ var M = this.toRightTriangular(), rank = 0;
+ var ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ if (Math.abs(M.elements[i][j]) > Sylvester.precision) { rank++; break; }
+ } while (--nj);
+ } while (--ni);
+ return rank;
+ },
+
+ rk: function() { return this.rank(); },
+
+ // Returns the result of attaching the given argument to the right-hand side of the matrix
+ augment: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ var T = this.dup(), cols = T.elements[0].length;
+ var ni = T.elements.length, ki = ni, i, nj, kj = M[0].length, j;
+ if (ni != M.length) { return null; }
+ do { i = ki - ni;
+ nj = kj;
+ do { j = kj - nj;
+ T.elements[i][cols + j] = M[i][j];
+ } while (--nj);
+ } while (--ni);
+ return T;
+ },
+
+ // Returns the inverse (if one exists) using Gauss-Jordan
+ inverse: function() {
+ if (!this.isSquare() || this.isSingular()) { return null; }
+ var ni = this.elements.length, ki = ni, i, j;
+ var M = this.augment(Matrix.I(ni)).toRightTriangular();
+ var np, kp = M.elements[0].length, p, els, divisor;
+ var inverse_elements = [], new_element;
+ // Matrix is non-singular so there will be no zeros on the diagonal
+ // Cycle through rows from last to first
+ do { i = ni - 1;
+ // First, normalise diagonal elements to 1
+ els = []; np = kp;
+ inverse_elements[i] = [];
+ divisor = M.elements[i][i];
+ do { p = kp - np;
+ new_element = M.elements[i][p] / divisor;
+ els.push(new_element);
+ // Shuffle of the current row of the right hand side into the results
+ // array as it will not be modified by later runs through this loop
+ if (p >= ki) { inverse_elements[i].push(new_element); }
+ } while (--np);
+ M.elements[i] = els;
+ // Then, subtract this row from those above it to
+ // give the identity matrix on the left hand side
+ for (j = 0; j < i; j++) {
+ els = []; np = kp;
+ do { p = kp - np;
+ els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i]);
+ } while (--np);
+ M.elements[j] = els;
+ }
+ } while (--ni);
+ return Matrix.create(inverse_elements);
+ },
+
+ inv: function() { return this.inverse(); },
+
+ // Returns the result of rounding all the elements
+ round: function() {
+ return this.map(function(x) { return Math.round(x); });
+ },
+
+ // Returns a copy of the matrix with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function(x) {
+ return this.map(function(p) {
+ return (Math.abs(p - x) <= Sylvester.precision) ? x : p;
+ });
+ },
+
+ // Returns a string representation of the matrix
+ inspect: function() {
+ var matrix_rows = [];
+ var n = this.elements.length, k = n, i;
+ do { i = k - n;
+ matrix_rows.push(Vector.create(this.elements[i]).inspect());
+ } while (--n);
+ return matrix_rows.join('\n');
+ },
+
+ // Set the matrix's elements from an array. If the argument passed
+ // is a vector, the resulting matrix will be a single column.
+ setElements: function(els) {
+ var i, elements = els.elements || els;
+ if (typeof(elements[0][0]) != 'undefined') {
+ var ni = elements.length, ki = ni, nj, kj, j;
+ this.elements = [];
+ do { i = ki - ni;
+ nj = elements[i].length; kj = nj;
+ this.elements[i] = [];
+ do { j = kj - nj;
+ this.elements[i][j] = elements[i][j];
+ } while (--nj);
+ } while(--ni);
+ return this;
+ }
+ var n = elements.length, k = n;
+ this.elements = [];
+ do { i = k - n;
+ this.elements.push([elements[i]]);
+ } while (--n);
+ return this;
+ }
+};
+
+// Constructor function
+Matrix.create = function(elements) {
+ var M = new Matrix();
+ return M.setElements(elements);
+};
+
+// Identity matrix of size n
+Matrix.I = function(n) {
+ var els = [], k = n, i, nj, j;
+ do { i = k - n;
+ els[i] = []; nj = k;
+ do { j = k - nj;
+ els[i][j] = (i == j) ? 1 : 0;
+ } while (--nj);
+ } while (--n);
+ return Matrix.create(els);
+};
+
+// Diagonal matrix - all off-diagonal elements are zero
+Matrix.Diagonal = function(elements) {
+ var n = elements.length, k = n, i;
+ var M = Matrix.I(n);
+ do { i = k - n;
+ M.elements[i][i] = elements[i];
+ } while (--n);
+ return M;
+};
+
+// Rotation matrix about some axis. If no axis is
+// supplied, assume we're after a 2D transform
+Matrix.Rotation = function(theta, a) {
+ if (!a) {
+ return Matrix.create([
+ [Math.cos(theta), -Math.sin(theta)],
+ [Math.sin(theta), Math.cos(theta)]
+ ]);
+ }
+ var axis = a.dup();
+ if (axis.elements.length != 3) { return null; }
+ var mod = axis.modulus();
+ var x = axis.elements[0]/mod, y = axis.elements[1]/mod, z = axis.elements[2]/mod;
+ var s = Math.sin(theta), c = Math.cos(theta), t = 1 - c;
+ // Formula derived here: http://www.gamedev.net/reference/articles/article1199.asp
+ // That proof rotates the co-ordinate system so theta
+ // becomes -theta and sin becomes -sin here.
+ return Matrix.create([
+ [ t*x*x + c, t*x*y - s*z, t*x*z + s*y ],
+ [ t*x*y + s*z, t*y*y + c, t*y*z - s*x ],
+ [ t*x*z - s*y, t*y*z + s*x, t*z*z + c ]
+ ]);
+};
+
+// Special case rotations
+Matrix.RotationX = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [ 1, 0, 0 ],
+ [ 0, c, -s ],
+ [ 0, s, c ]
+ ]);
+};
+Matrix.RotationY = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [ c, 0, s ],
+ [ 0, 1, 0 ],
+ [ -s, 0, c ]
+ ]);
+};
+Matrix.RotationZ = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [ c, -s, 0 ],
+ [ s, c, 0 ],
+ [ 0, 0, 1 ]
+ ]);
+};
+
+// Random matrix of n rows, m columns
+Matrix.Random = function(n, m) {
+ return Matrix.Zero(n, m).map(
+ function() { return Math.random(); }
+ );
+};
+
+// Matrix filled with zeros
+Matrix.Zero = function(n, m) {
+ var els = [], ni = n, i, nj, j;
+ do { i = n - ni;
+ els[i] = [];
+ nj = m;
+ do { j = m - nj;
+ els[i][j] = 0;
+ } while (--nj);
+ } while (--ni);
+ return Matrix.create(els);
+};
+
+
+
+function Line() {}
+Line.prototype = {
+
+ // Returns true if the argument occupies the same space as the line
+ eql: function(line) {
+ return (this.isParallelTo(line) && this.contains(line.anchor));
+ },
+
+ // Returns a copy of the line
+ dup: function() {
+ return Line.create(this.anchor, this.direction);
+ },
+
+ // Returns the result of translating the line by the given vector/array
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ return Line.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.direction);
+ },
+
+ // Returns true if the line is parallel to the argument. Here, 'parallel to'
+ // means that the argument's direction is either parallel or antiparallel to
+ // the line's own direction. A line is parallel to a plane if the two do not
+ // have a unique intersection.
+ isParallelTo: function(obj) {
+ if (obj.normal) { return obj.isParallelTo(this); }
+ var theta = this.direction.angleFrom(obj.direction);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(theta - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns the line's perpendicular distance from the argument,
+ // which can be a point, a line or a plane
+ distanceFrom: function(obj) {
+ if (obj.normal) { return obj.distanceFrom(this); }
+ if (obj.direction) {
+ // obj is a line
+ if (this.isParallelTo(obj)) { return this.distanceFrom(obj.anchor); }
+ var N = this.direction.cross(obj.direction).toUnitVector().elements;
+ var A = this.anchor.elements, B = obj.anchor.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var PA1 = P[0] - A[0], PA2 = P[1] - A[1], PA3 = (P[2] || 0) - A[2];
+ var modPA = Math.sqrt(PA1*PA1 + PA2*PA2 + PA3*PA3);
+ if (modPA === 0) return 0;
+ // Assumes direction vector is normalized
+ var cosTheta = (PA1 * D[0] + PA2 * D[1] + PA3 * D[2]) / modPA;
+ var sin2 = 1 - cosTheta*cosTheta;
+ return Math.abs(modPA * Math.sqrt(sin2 < 0 ? 0 : sin2));
+ }
+ },
+
+ // Returns true iff the argument is a point on the line
+ contains: function(point) {
+ var dist = this.distanceFrom(point);
+ return (dist !== null && dist <= Sylvester.precision);
+ },
+
+ // Returns true iff the line lies in the given plane
+ liesIn: function(plane) {
+ return plane.contains(this);
+ },
+
+ // Returns true iff the line has a unique point of intersection with the argument
+ intersects: function(obj) {
+ if (obj.normal) { return obj.intersects(this); }
+ return (!this.isParallelTo(obj) && this.distanceFrom(obj) <= Sylvester.precision);
+ },
+
+ // Returns the unique intersection point with the argument, if one exists
+ intersectionWith: function(obj) {
+ if (obj.normal) { return obj.intersectionWith(this); }
+ if (!this.intersects(obj)) { return null; }
+ var P = this.anchor.elements, X = this.direction.elements,
+ Q = obj.anchor.elements, Y = obj.direction.elements;
+ var X1 = X[0], X2 = X[1], X3 = X[2], Y1 = Y[0], Y2 = Y[1], Y3 = Y[2];
+ var PsubQ1 = P[0] - Q[0], PsubQ2 = P[1] - Q[1], PsubQ3 = P[2] - Q[2];
+ var XdotQsubP = - X1*PsubQ1 - X2*PsubQ2 - X3*PsubQ3;
+ var YdotPsubQ = Y1*PsubQ1 + Y2*PsubQ2 + Y3*PsubQ3;
+ var XdotX = X1*X1 + X2*X2 + X3*X3;
+ var YdotY = Y1*Y1 + Y2*Y2 + Y3*Y3;
+ var XdotY = X1*Y1 + X2*Y2 + X3*Y3;
+ var k = (XdotQsubP * YdotY / XdotX + XdotY * YdotPsubQ) / (YdotY - XdotY * XdotY);
+ return Vector.create([P[0] + k*X1, P[1] + k*X2, P[2] + k*X3]);
+ },
+
+ // Returns the point on the line that is closest to the given point or line
+ pointClosestTo: function(obj) {
+ if (obj.direction) {
+ // obj is a line
+ if (this.intersects(obj)) { return this.intersectionWith(obj); }
+ if (this.isParallelTo(obj)) { return null; }
+ var D = this.direction.elements, E = obj.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], E1 = E[0], E2 = E[1], E3 = E[2];
+ // Create plane containing obj and the shared normal and intersect this with it
+ // Thank you: http://www.cgafaq.info/wiki/Line-line_distance
+ var x = (D3 * E1 - D1 * E3), y = (D1 * E2 - D2 * E1), z = (D2 * E3 - D3 * E2);
+ var N = Vector.create([x * E3 - y * E2, y * E1 - z * E3, z * E2 - x * E1]);
+ var P = Plane.create(obj.anchor, N);
+ return P.intersectionWith(this);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ if (this.contains(P)) { return Vector.create(P); }
+ var A = this.anchor.elements, D = this.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = D1 * (P[1]-A2) - D2 * (P[0]-A1), y = D2 * ((P[2] || 0) - A3) - D3 * (P[1]-A2),
+ z = D3 * (P[0]-A1) - D1 * ((P[2] || 0) - A3);
+ var V = Vector.create([D2 * x - D3 * z, D3 * y - D1 * x, D1 * z - D2 * y]);
+ var k = this.distanceFrom(P) / V.modulus();
+ return Vector.create([
+ P[0] + V.elements[0] * k,
+ P[1] + V.elements[1] * k,
+ (P[2] || 0) + V.elements[2] * k
+ ]);
+ }
+ },
+
+ // Returns a copy of the line rotated by t radians about the given line. Works by
+ // finding the argument's closest point to this line's anchor point (call this C) and
+ // rotating the anchor about C. Also rotates the line's direction about the argument's.
+ // Be careful with this - the rotation axis' direction affects the outcome!
+ rotate: function(t, line) {
+ // If we're working in 2D
+ if (typeof(line.direction) == 'undefined') { line = Line.create(line.to3D(), Vector.k); }
+ var R = Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Line.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * D[0] + R[0][1] * D[1] + R[0][2] * D[2],
+ R[1][0] * D[0] + R[1][1] * D[1] + R[1][2] * D[2],
+ R[2][0] * D[0] + R[2][1] * D[1] + R[2][2] * D[2]
+ ]);
+ },
+
+ // Returns the line's reflection in the given point or line
+ reflectionIn: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, D = this.direction.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], D1 = D[0], D2 = D[1], D3 = D[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the line's direction vector to its anchor, then mirror that in the plane
+ var AD1 = A1 + D1, AD2 = A2 + D2, AD3 = A3 + D3;
+ var Q = obj.pointClosestTo([AD1, AD2, AD3]).elements;
+ var newD = [Q[0] + (Q[0] - AD1) - newA[0], Q[1] + (Q[1] - AD2) - newA[1], Q[2] + (Q[2] - AD3) - newA[2]];
+ return Line.create(newA, newD);
+ } else if (obj.direction) {
+ // obj is a line - reflection obtained by rotating PI radians about obj
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point - just reflect the line's anchor in it
+ var P = obj.elements || obj;
+ return Line.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.direction);
+ }
+ },
+
+ // Set the line's anchor point and direction.
+ setVectors: function(anchor, direction) {
+ // Need to do this so that line's properties are not
+ // references to the arguments passed in
+ anchor = Vector.create(anchor);
+ direction = Vector.create(direction);
+ if (anchor.elements.length == 2) {anchor.elements.push(0); }
+ if (direction.elements.length == 2) { direction.elements.push(0); }
+ if (anchor.elements.length > 3 || direction.elements.length > 3) { return null; }
+ var mod = direction.modulus();
+ if (mod === 0) { return null; }
+ this.anchor = anchor;
+ this.direction = Vector.create([
+ direction.elements[0] / mod,
+ direction.elements[1] / mod,
+ direction.elements[2] / mod
+ ]);
+ return this;
+ }
+};
+
+
+// Constructor function
+Line.create = function(anchor, direction) {
+ var L = new Line();
+ return L.setVectors(anchor, direction);
+};
+
+// Axes
+Line.X = Line.create(Vector.Zero(3), Vector.i);
+Line.Y = Line.create(Vector.Zero(3), Vector.j);
+Line.Z = Line.create(Vector.Zero(3), Vector.k);
+
+
+
+function Plane() {}
+Plane.prototype = {
+
+ // Returns true iff the plane occupies the same space as the argument
+ eql: function(plane) {
+ return (this.contains(plane.anchor) && this.isParallelTo(plane));
+ },
+
+ // Returns a copy of the plane
+ dup: function() {
+ return Plane.create(this.anchor, this.normal);
+ },
+
+ // Returns the result of translating the plane by the given vector
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ return Plane.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.normal);
+ },
+
+ // Returns true iff the plane is parallel to the argument. Will return true
+ // if the planes are equal, or if you give a line and it lies in the plane.
+ isParallelTo: function(obj) {
+ var theta;
+ if (obj.normal) {
+ // obj is a plane
+ theta = this.normal.angleFrom(obj.normal);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(Math.PI - theta) <= Sylvester.precision);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.normal.isPerpendicularTo(obj.direction);
+ }
+ return null;
+ },
+
+ // Returns true iff the receiver is perpendicular to the argument
+ isPerpendicularTo: function(plane) {
+ var theta = this.normal.angleFrom(plane.normal);
+ return (Math.abs(Math.PI/2 - theta) <= Sylvester.precision);
+ },
+
+ // Returns the plane's distance from the given object (point, line or plane)
+ distanceFrom: function(obj) {
+ if (this.intersects(obj) || this.contains(obj)) { return 0; }
+ if (obj.anchor) {
+ // obj is a plane or line
+ var A = this.anchor.elements, B = obj.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2]);
+ }
+ },
+
+ // Returns true iff the plane contains the given point or line
+ contains: function(obj) {
+ if (obj.normal) { return null; }
+ if (obj.direction) {
+ return (this.contains(obj.anchor) && this.contains(obj.anchor.add(obj.direction)));
+ } else {
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var diff = Math.abs(N[0]*(A[0] - P[0]) + N[1]*(A[1] - P[1]) + N[2]*(A[2] - (P[2] || 0)));
+ return (diff <= Sylvester.precision);
+ }
+ },
+
+ // Returns true iff the plane has a unique point/line of intersection with the argument
+ intersects: function(obj) {
+ if (typeof(obj.direction) == 'undefined' && typeof(obj.normal) == 'undefined') { return null; }
+ return !this.isParallelTo(obj);
+ },
+
+ // Returns the unique intersection with the argument, if one exists. The result
+ // will be a vector if a line is supplied, and a line if a plane is supplied.
+ intersectionWith: function(obj) {
+ if (!this.intersects(obj)) { return null; }
+ if (obj.direction) {
+ // obj is a line
+ var A = obj.anchor.elements, D = obj.direction.elements,
+ P = this.anchor.elements, N = this.normal.elements;
+ var multiplier = (N[0]*(P[0]-A[0]) + N[1]*(P[1]-A[1]) + N[2]*(P[2]-A[2])) / (N[0]*D[0] + N[1]*D[1] + N[2]*D[2]);
+ return Vector.create([A[0] + D[0]*multiplier, A[1] + D[1]*multiplier, A[2] + D[2]*multiplier]);
+ } else if (obj.normal) {
+ // obj is a plane
+ var direction = this.normal.cross(obj.normal).toUnitVector();
+ // To find an anchor point, we find one co-ordinate that has a value
+ // of zero somewhere on the intersection, and remember which one we picked
+ var N = this.normal.elements, A = this.anchor.elements,
+ O = obj.normal.elements, B = obj.anchor.elements;
+ var solver = Matrix.Zero(2,2), i = 0;
+ while (solver.isSingular()) {
+ i++;
+ solver = Matrix.create([
+ [ N[i%3], N[(i+1)%3] ],
+ [ O[i%3], O[(i+1)%3] ]
+ ]);
+ }
+ // Then we solve the simultaneous equations in the remaining dimensions
+ var inverse = solver.inverse().elements;
+ var x = N[0]*A[0] + N[1]*A[1] + N[2]*A[2];
+ var y = O[0]*B[0] + O[1]*B[1] + O[2]*B[2];
+ var intersection = [
+ inverse[0][0] * x + inverse[0][1] * y,
+ inverse[1][0] * x + inverse[1][1] * y
+ ];
+ var anchor = [];
+ for (var j = 1; j <= 3; j++) {
+ // This formula picks the right element from intersection by
+ // cycling depending on which element we set to zero above
+ anchor.push((i == j) ? 0 : intersection[(j + (5 - i)%3)%3]);
+ }
+ return Line.create(anchor, direction);
+ }
+ },
+
+ // Returns the point in the plane closest to the given point
+ pointClosestTo: function(point) {
+ var P = point.elements || point;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var dot = (A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2];
+ return Vector.create([P[0] + N[0] * dot, P[1] + N[1] * dot, (P[2] || 0) + N[2] * dot]);
+ },
+
+ // Returns a copy of the plane, rotated by t radians about the given line
+ // See notes on Line#rotate.
+ rotate: function(t, line) {
+ var R = Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Plane.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * N[0] + R[0][1] * N[1] + R[0][2] * N[2],
+ R[1][0] * N[0] + R[1][1] * N[1] + R[1][2] * N[2],
+ R[2][0] * N[0] + R[2][1] * N[1] + R[2][2] * N[2]
+ ]);
+ },
+
+ // Returns the reflection of the plane in the given point, line or plane.
+ reflectionIn: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, N = this.normal.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], N1 = N[0], N2 = N[1], N3 = N[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the plane's normal to its anchor, then mirror that in the other plane
+ var AN1 = A1 + N1, AN2 = A2 + N2, AN3 = A3 + N3;
+ var Q = obj.pointClosestTo([AN1, AN2, AN3]).elements;
+ var newN = [Q[0] + (Q[0] - AN1) - newA[0], Q[1] + (Q[1] - AN2) - newA[1], Q[2] + (Q[2] - AN3) - newA[2]];
+ return Plane.create(newA, newN);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ return Plane.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.normal);
+ }
+ },
+
+ // Sets the anchor point and normal to the plane. If three arguments are specified,
+ // the normal is calculated by assuming the three points should lie in the same plane.
+ // If only two are sepcified, the second is taken to be the normal. Normal vector is
+ // normalised before storage.
+ setVectors: function(anchor, v1, v2) {
+ anchor = Vector.create(anchor);
+ anchor = anchor.to3D(); if (anchor === null) { return null; }
+ v1 = Vector.create(v1);
+ v1 = v1.to3D(); if (v1 === null) { return null; }
+ if (typeof(v2) == 'undefined') {
+ v2 = null;
+ } else {
+ v2 = Vector.create(v2);
+ v2 = v2.to3D(); if (v2 === null) { return null; }
+ }
+ var A1 = anchor.elements[0], A2 = anchor.elements[1], A3 = anchor.elements[2];
+ var v11 = v1.elements[0], v12 = v1.elements[1], v13 = v1.elements[2];
+ var normal, mod;
+ if (v2 !== null) {
+ var v21 = v2.elements[0], v22 = v2.elements[1], v23 = v2.elements[2];
+ normal = Vector.create([
+ (v12 - A2) * (v23 - A3) - (v13 - A3) * (v22 - A2),
+ (v13 - A3) * (v21 - A1) - (v11 - A1) * (v23 - A3),
+ (v11 - A1) * (v22 - A2) - (v12 - A2) * (v21 - A1)
+ ]);
+ mod = normal.modulus();
+ if (mod === 0) { return null; }
+ normal = Vector.create([normal.elements[0] / mod, normal.elements[1] / mod, normal.elements[2] / mod]);
+ } else {
+ mod = Math.sqrt(v11*v11 + v12*v12 + v13*v13);
+ if (mod === 0) { return null; }
+ normal = Vector.create([v1.elements[0] / mod, v1.elements[1] / mod, v1.elements[2] / mod]);
+ }
+ this.anchor = anchor;
+ this.normal = normal;
+ return this;
+ }
+};
+
+// Constructor function
+Plane.create = function(anchor, v1, v2) {
+ var P = new Plane();
+ return P.setVectors(anchor, v1, v2);
+};
+
+// X-Y-Z planes
+Plane.XY = Plane.create(Vector.Zero(3), Vector.k);
+Plane.YZ = Plane.create(Vector.Zero(3), Vector.i);
+Plane.ZX = Plane.create(Vector.Zero(3), Vector.j);
+Plane.YX = Plane.XY; Plane.ZY = Plane.YZ; Plane.XZ = Plane.ZX;
+
+// Utility functions
+var $V = Vector.create;
+var $M = Matrix.create;
+var $L = Line.create;
+var $P = Plane.create;
+/*
+ Copyright (c) 2009 Mozilla Corp
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+// augment Sylvester some
+Matrix.Translation = function (v)
+{
+ if (v.elements.length == 2) {
+ var r = Matrix.I(3);
+ r.elements[2][0] = v.elements[0];
+ r.elements[2][1] = v.elements[1];
+ return r;
+ }
+
+ if (v.elements.length == 3) {
+ var r = Matrix.I(4);
+ r.elements[0][3] = v.elements[0];
+ r.elements[1][3] = v.elements[1];
+ r.elements[2][3] = v.elements[2];
+ return r;
+ }
+
+ throw "Invalid length for Translation";
+}
+
+Matrix.prototype.flatten = function ()
+{
+ var result = [];
+ if (this.elements.length == 0)
+ return [];
+
+
+ for (var j = 0; j < this.elements[0].length; j++)
+ for (var i = 0; i < this.elements.length; i++)
+ result.push(this.elements[i][j]);
+ return result;
+}
+
+Matrix.prototype.ensure4x4 = function()
+{
+ if (this.elements.length == 4 &&
+ this.elements[0].length == 4)
+ return this;
+
+ if (this.elements.length > 4 ||
+ this.elements[0].length > 4)
+ return null;
+
+ for (var i = 0; i < this.elements.length; i++) {
+ for (var j = this.elements[i].length; j < 4; j++) {
+ if (i == j)
+ this.elements[i].push(1);
+ else
+ this.elements[i].push(0);
+ }
+ }
+
+ for (var i = this.elements.length; i < 4; i++) {
+ if (i == 0)
+ this.elements.push([1, 0, 0, 0]);
+ else if (i == 1)
+ this.elements.push([0, 1, 0, 0]);
+ else if (i == 2)
+ this.elements.push([0, 0, 1, 0]);
+ else if (i == 3)
+ this.elements.push([0, 0, 0, 1]);
+ }
+
+ return this;
+};
+
+Matrix.prototype.make3x3 = function()
+{
+ if (this.elements.length != 4 ||
+ this.elements[0].length != 4)
+ return null;
+
+ return Matrix.create([[this.elements[0][0], this.elements[0][1], this.elements[0][2]],
+ [this.elements[1][0], this.elements[1][1], this.elements[1][2]],
+ [this.elements[2][0], this.elements[2][1], this.elements[2][2]]]);
+};
+
+Vector.prototype.flatten = function ()
+{
+ return this.elements;
+};
+
+function mht(m) {
+ var s = "";
+ if (m.length == 16) {
+ for (var i = 0; i < 4; i++) {
+ s += "<span style='font-family: monospace'>[" + m[i*4+0].toFixed(4) + "," + m[i*4+1].toFixed(4) + "," + m[i*4+2].toFixed(4) + "," + m[i*4+3].toFixed(4) + "]</span><br>";
+ }
+ } else if (m.length == 9) {
+ for (var i = 0; i < 3; i++) {
+ s += "<span style='font-family: monospace'>[" + m[i*3+0].toFixed(4) + "," + m[i*3+1].toFixed(4) + "," + m[i*3+2].toFixed(4) + "]</font><br>";
+ }
+ } else {
+ return m.toString();
+ }
+ return s;
+}
+
+//
+// gluLookAt
+//
+function makeLookAt(ex, ey, ez,
+ cx, cy, cz,
+ ux, uy, uz)
+{
+ var eye = $V([ex, ey, ez]);
+ var center = $V([cx, cy, cz]);
+ var up = $V([ux, uy, uz]);
+
+ var mag;
+
+ var z = eye.subtract(center).toUnitVector();
+ var x = up.cross(z).toUnitVector();
+ var y = z.cross(x).toUnitVector();
+
+ var m = $M([[x.e(1), x.e(2), x.e(3), 0],
+ [y.e(1), y.e(2), y.e(3), 0],
+ [z.e(1), z.e(2), z.e(3), 0],
+ [0, 0, 0, 1]]);
+
+ var t = $M([[1, 0, 0, -ex],
+ [0, 1, 0, -ey],
+ [0, 0, 1, -ez],
+ [0, 0, 0, 1]]);
+ return m.x(t);
+}
+
+//
+// glOrtho
+//
+function makeOrtho(left, right,
+ bottom, top,
+ znear, zfar)
+{
+ var tx = -(right+left)/(right-left);
+ var ty = -(top+bottom)/(top-bottom);
+ var tz = -(zfar+znear)/(zfar-znear);
+
+ return $M([[2/(right-left), 0, 0, tx],
+ [0, 2/(top-bottom), 0, ty],
+ [0, 0, -2/(zfar-znear), tz],
+ [0, 0, 0, 1]]);
+}
+
+//
+// gluPerspective
+//
+function makePerspective(fovy, aspect, znear, zfar)
+{
+ var ymax = znear * Math.tan(fovy * Math.PI / 360.0);
+ var ymin = -ymax;
+ var xmin = ymin * aspect;
+ var xmax = ymax * aspect;
+
+ return makeFrustum(xmin, xmax, ymin, ymax, znear, zfar);
+}
+
+//
+// glFrustum
+//
+function makeFrustum(left, right,
+ bottom, top,
+ znear, zfar)
+{
+ var X = 2*znear/(right-left);
+ var Y = 2*znear/(top-bottom);
+ var A = (right+left)/(right-left);
+ var B = (top+bottom)/(top-bottom);
+ var C = -(zfar+znear)/(zfar-znear);
+ var D = -2*zfar*znear/(zfar-znear);
+
+ return $M([[X, 0, A, 0],
+ [0, Y, B, 0],
+ [0, 0, C, D],
+ [0, 0, -1, 0]]);
+}
+
+//
+// glOrtho
+//
+function makeOrtho(left, right, bottom, top, znear, zfar)
+{
+ var tx = - (right + left) / (right - left);
+ var ty = - (top + bottom) / (top - bottom);
+ var tz = - (zfar + znear) / (zfar - znear);
+
+ return $M([[2 / (right - left), 0, 0, tx],
+ [0, 2 / (top - bottom), 0, ty],
+ [0, 0, -2 / (zfar - znear), tz],
+ [0, 0, 0, 1]]);
+}
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+if (!self["bigshot"]) {
+ /**
+ * @namespace Bigshot namespace.
+ *
+ * Bigshot is a toolkit for zoomable images and VR panoramas.
+ *
+ * <h3>Zoomable Images</h3>
+ *
+ * <p>The two classes that are needed for zoomable images are:
+ *
+ * <ul>
+ * <li>{@link bigshot.Image}: The main class for making zoomable images. See the class docs
+ * for a tutorial.
+ * <li>{@link bigshot.ImageParameters}: Parameters for zoomable images.
+ * <li>{@link bigshot.SimpleImage}: A class for making simple zoomable images that don't
+ * require the generation of an image pyramid.. See the class docs for a tutorial.
+ * </ul>
+ *
+ * For hotspots, see:
+ *
+ * <ul>
+ * <li>{@link bigshot.HotspotLayer}
+ * <li>{@link bigshot.Hotspot}
+ * <li>{@link bigshot.LabeledHotspot}
+ * <li>{@link bigshot.LinkHotspot}
+ * </ul>
+ *
+ * <h3>VR Panoramas</h3>
+ *
+ * <p>The two classes that are needed for zoomable VR panoramas (requires WebGL) are:
+ *
+ * <ul>
+ * <li>{@link bigshot.VRPanorama}: The main class for making VR panoramas. See the class docs
+ * for a tutorial.
+ * <li>{@link bigshot.VRPanoramaParameters}: Parameters for VR panoramas.
+ * </ul>
+ *
+ * For hotspots, see:
+ *
+ * <ul>
+ * <li>{@link bigshot.VRHotspot}
+ * <li>{@link bigshot.VRRectangleHotspot}
+ * <li>{@link bigshot.VRPointHotspot}
+ * </ul>
+ */
+ bigshot = {};
+
+ /*
+ * This is supposed to be processed using a minimalhttpd.IncludeProcessor
+ * during development. The files must be listed in dependency order.
+ */
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This class has no constructor, it is created as an object literal.
+ * @name bigshot.HomogeneousPoint3D
+ * @class A 3d homogenous point.
+ * @property {number} x the x-coordinate
+ * @property {number} y the y-coordinate
+ * @property {number} z the z-coordinate
+ * @property {number} w the w-coordinate
+ */
+
+/**
+ * This class has no constructor, it is created as an object literal.
+ * @name bigshot.Point3D
+ * @class A 3d point.
+ * @property {number} x the x-coordinate
+ * @property {number} y the y-coordinate
+ * @property {number} z the z-coordinate
+ */
+
+/**
+ * This class has no constructor, it is created as an object literal.
+ * @name bigshot.Point2D
+ * @class A 2d point.
+ * @property {number} x the x-coordinate
+ * @property {number} y the y-coordinate
+ */
+
+/**
+ * This class has no constructor, it is created as an object literal.
+ * @name bigshot.Rotation
+ * @class A rotation specified as a yaw-pitch-roll triplet.
+ * @property {number} y the rotation around the yaw (y) axis
+ * @property {number} p the rotation around the pitch (x) axis
+ * @property {number} r the rotation around the roll (z) axis
+ */
+
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Object-oriented support functions, used to make JavaScript
+ * a bit more palatable to a Java-head.
+ */
+bigshot.Object = {
+ /**
+ * Extends a base class with a derived class.
+ *
+ * @param {Function} derived the derived-class
+ * @param {Function} base the base-class
+ */
+ extend : function (derived, base) {
+ for (var k in base.prototype) {
+ if (derived.prototype[k]) {
+ derived.prototype[k]._super = base.prototype[k];
+ } else {
+ derived.prototype[k] = base.prototype[k];
+ }
+ }
+ },
+
+ /**
+ * Resolves a name relative to <code>self</code>.
+ *
+ * @param {String} name the name to resolve
+ * @type {Object}
+ */
+ resolve : function (name) {
+ var c = name.split (".");
+ var clazz = self;
+ for (var i = 0; i < c.length; ++i) {
+ clazz = clazz[c[i]];
+ }
+ return clazz;
+ },
+
+ validate : function (clazzName, iface) {
+ },
+
+ /**
+ * Utility function to show an object's fields in a message box.
+ *
+ * @param {Object} o the object
+ */
+ alertr : function (o) {
+ var sb = "";
+ for (var k in o) {
+ sb += k + ":" + o[k] + "\n";
+ }
+ alert (sb);
+ },
+
+ /**
+ * Utility function to show an object's fields in the console log.
+ *
+ * @param {Object} o the object
+ */
+ logr : function (o) {
+ var sb = "";
+ for (var k in o) {
+ sb += k + ":" + o[k] + "\n";
+ }
+ if (console) {
+ console.log (sb);
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new browser helper object.
+ *
+ * @class Encapsulates common browser functions for cross-browser portability
+ * and convenience.
+ */
+bigshot.Browser = function () {
+ this.requestAnimationFrameFunction =
+ window.requestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ function (callback, element) { return setTimeout (callback, 0); };
+}
+
+bigshot.Browser.prototype = {
+ /**
+ * Removes all children from an element.
+ *
+ * @public
+ * @param {HTMLElement} element the element whose children are to be removed.
+ */
+ removeAllChildren : function (element) {
+ element.innerHTML = "";
+ /*
+ if (element.children.length > 0) {
+ for (var i = element.children.length - 1; i >= 0; --i) {
+ element.removeChild (element.children[i]);
+ }
+ }
+ */
+ },
+
+ /**
+ * Thunk to implement a faked "mouseenter" event.
+ * @private
+ */
+ mouseEnter : function (_fn) {
+ var isAChildOf = this.isAChildOf;
+ return function(_evt)
+ {
+ var relTarget = _evt.relatedTarget;
+ if (this === relTarget || isAChildOf (this, relTarget))
+ { return; }
+
+ _fn.call (this, _evt);
+ }
+ },
+
+ isAChildOf : function (_parent, _child) {
+ if (_parent === _child) { return false; }
+ while (_child && _child !== _parent)
+ { _child = _child.parentNode; }
+
+ return _child === _parent;
+ },
+
+ /**
+ * Unregisters a listener from an element.
+ *
+ * @param {HTMLElement} elem the element
+ * @param {String} eventName the event name ("click", "mouseover", etc.)
+ * @param {function(e)} fn the callback function to detach
+ * @param {boolean} useCapture specifies if we should unregister a listener from the capture chain.
+ */
+ unregisterListener : function (elem, eventName, fn, useCapture) {
+ if (typeof (elem.removeEventListener) != 'undefined') {
+ elem.removeEventListener (eventName, fn, useCapture);
+ } else if (typeof (elem.detachEvent) != 'undefined') {
+ elem.detachEvent('on' + eventName, fn);
+ }
+ },
+
+ /**
+ * Registers a listener to an element.
+ *
+ * @param {HTMLElement} elem the element
+ * @param {String} eventName the event name ("click", "mouseover", etc.)
+ * @param {function(e)} fn the callback function to attach
+ * @param {boolean} useCapture specifies if we want to initiate capture.
+ * See <a href="https://developer.mozilla.org/en/DOM/element.addEventListener">element.addEventListener</a>
+ * on MDN for an explanation.
+ */
+ registerListener : function (_elem, _evtName, _fn, _useCapture) {
+ if (typeof _elem.addEventListener != 'undefined')
+ {
+ if (_evtName === 'mouseenter')
+ { _elem.addEventListener('mouseover', this.mouseEnter(_fn), _useCapture); }
+ else if (_evtName === 'mouseleave')
+ { _elem.addEventListener('mouseout', this.mouseEnter(_fn), _useCapture); }
+ else
+ { _elem.addEventListener(_evtName, _fn, _useCapture); }
+ }
+ else if (typeof _elem.attachEvent != 'undefined')
+ {
+ _elem.attachEvent('on' + _evtName, _fn);
+ }
+ else
+ {
+ _elem['on' + _evtName] = _fn;
+ }
+ },
+
+ /**
+ * Stops an event from bubbling.
+ *
+ * @param {Event} eventObject the event object
+ */
+ stopEventBubbling : function (eventObject) {
+ if (eventObject) {
+ if (eventObject.stopPropagation) {
+ eventObject.stopPropagation ();
+ } else {
+ eventObject.cancelBubble = true;
+ }
+ }
+ },
+
+ /**
+ * Creates a callback function that simply stops the event from bubbling.
+ *
+ * @example
+ * var browser = new bigshot.Browser ();
+ * browser.registerListener (element,
+ * "mousedown",
+ * browser.stopEventBubblingHandler (),
+ * false);
+ * @type function(event)
+ * @return a new function that can be used to stop an event from bubbling
+ */
+ stopEventBubblingHandler : function () {
+ var that = this;
+ return function (event) {
+ that.stopEventBubbling (event);
+ return false;
+ };
+ },
+
+ /**
+ * Stops bubbling for all mouse events on the element.
+ *
+ * @param {HTMLElement} element the element
+ */
+ stopMouseEventBubbling : function (element) {
+ this.registerListener (element, "mousedown", this.stopEventBubblingHandler (), false);
+ this.registerListener (element, "mouseup", this.stopEventBubblingHandler (), false);
+ this.registerListener (element, "mousemove", this.stopEventBubblingHandler (), false);
+ },
+
+ /**
+ * Returns the size in pixels of the element
+ *
+ * @param {HTMLElement} obj the element
+ * @return a size object with two integer members, w and h, for width and height respectively.
+ */
+ getElementSize : function (obj) {
+ var size = {};
+ if (obj.clientWidth) {
+ size.w = obj.clientWidth;
+ }
+ if (obj.clientHeight) {
+ size.h = obj.clientHeight;
+ }
+ return size;
+ },
+
+ /**
+ * Returns true if the browser is scaling the window, such as on Mobile Safari.
+ * The method used here is far from perfect, but it catches the most important use case:
+ * If we are running on an iDevice and the page is zoomed out.
+ */
+ browserIsViewporting : function () {
+ if (window.innerWidth <= screen.width) {
+ return false;
+ } else {
+ return true;
+ }
+ },
+
+ /**
+ * Returns the device pixel scale, which is equal to the number of device
+ * pixels each css pixel corresponds to. Used to render the proper level of detail
+ * on mobile devices, especially when zoomed out and more detailed textures are
+ * simply wasted.
+ *
+ * @returns The number of device pixels each css pixel corresponds to.
+ * For example, if the browser is zoomed out to 50% and a div with <code>width</code>
+ * set to <code>100px</code> occupies 50 physical pixels, the function will return
+ * <code>0.5</code>.
+ * @type number
+ */
+ getDevicePixelScale : function () {
+ if (this.browserIsViewporting ()) {
+ return screen.width / window.innerWidth;
+ } else {
+ return 1.0;
+ }
+ },
+
+ /**
+ * Requests an animation frame, if the API is supported
+ * on the browser. If not, a <code>setTimeout</code> with
+ * a timeout of zero is used.
+ *
+ * @param {function()} callback the animation frame render function
+ * @param {HTMLElement} element the element to use when requesting an
+ * animation frame
+ */
+ requestAnimationFrame : function (callback, element) {
+ var raff = this.requestAnimationFrameFunction;
+ raff (callback, element);
+ },
+
+ /**
+ * Returns the position in pixels of the element relative
+ * to the top left corner of the document.
+ *
+ * @param {HTMLElement} obj the element
+ * @return a position object with two integer members, x and y.
+ */
+ getElementPosition : function (obj) {
+ var position = new Object();
+ position.x = 0;
+ position.y = 0;
+
+ var o = obj;
+ while (o) {
+ position.x += o.offsetLeft;
+ position.y += o.offsetTop;
+ if (o.clientLeft) {
+ position.x += o.clientLeft;
+ }
+ if (o.clientTop) {
+ position.y += o.clientTop;
+ }
+
+ if (o.x) {
+ position.x += o.x;
+ }
+ if (o.y) {
+ position.y += o.y;
+ }
+ o = o.offsetParent;
+ }
+ return position;
+ },
+
+ /**
+ * Creates an XMLHttpRequest object.
+ *
+ * @type XMLHttpRequest
+ * @returns a XMLHttpRequest object.
+ */
+ createXMLHttpRequest : function () {
+ try {
+ return new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ }
+
+ try {
+ return new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (e) {
+ }
+
+ try {
+ return new XMLHttpRequest();
+ } catch(e) {
+ }
+
+ alert("XMLHttpRequest not supported");
+
+ return null;
+ },
+
+ /**
+ * Creates an opacity transition from opaque to transparent.
+ * If CSS transitions aren't supported, the element is
+ * immediately made transparent without a transition.
+ *
+ * @param {HTMLElement} element the element to fade out
+ * @param {function()} onComplete function to call when
+ * the transition is complete.
+ */
+ makeOpacityTransition : function (element, onComplete) {
+ if (element.style.WebkitTransitionProperty != undefined) {
+ element.style.opacity = 1.0;
+ element.style.WebkitTransitionProperty = "opacity";
+ element.style.WebkitTransitionTimingFunction = "linear";
+ element.style.WebkitTransitionDuration = "1s";
+ setTimeout (function () {
+ element.addEventListener ("webkitTransitionEnd", function () {
+ onComplete ();
+ });
+ element.style.opacity = 0.0;
+ }, 0);
+ } else {
+ element.style.opacity = 0.0;
+ onComplete ();
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates an event dispatcher.
+ *
+ * @class Base class for objects that dispatch events.
+ */
+bigshot.EventDispatcher = function () {
+ /**
+ * The event listeners. Each key-value pair in the map is
+ * an event name and an <code>Array</code> of listeners.
+ *
+ * @type Object
+ */
+ this.eventListeners = {};
+}
+
+bigshot.EventDispatcher.prototype = {
+ /**
+ * Adds an event listener to the specified event.
+ *
+ * @example
+ * image.addEventListener ("click", function (event) { ... });
+ *
+ * @param {String} eventName the name of the event to add a listener for
+ * @param {Function} handler function that is invoked with an event object
+ * when the event is fired
+ */
+ addEventListener : function (eventName, handler) {
+ if (this.eventListeners[eventName] == undefined) {
+ this.eventListeners[eventName] = new Array ();
+ }
+ this.eventListeners[eventName].push (handler);
+ },
+
+ /**
+ * Removes an event listener.
+ * @param {String} eventName the name of the event to remove a listener for
+ * @param {Function} handler the handler to remove
+ */
+ removeEventListener : function (eventName, handler) {
+ if (this.eventListeners[eventName] != undefined) {
+ var el = this.eventListeners[eventName];
+ for (var i = 0; i < el.length; ++i) {
+ if (el[i] === listener) {
+ el.splice (i, 1);
+ if (el.length == 0) {
+ delete this.eventListeners[eventName];
+ }
+ break;
+ }
+ }
+ }
+ },
+
+ /**
+ * Fires an event.
+ *
+ * @param {String} eventName the name of the event to fire
+ * @param {bigshot.Event} eventObject the event object to pass to the handlers
+ */
+ fireEvent : function (eventName, eventObject) {
+ if (this.eventListeners[eventName] != undefined) {
+ var el = this.eventListeners[eventName];
+ for (var i = 0; i < el.length; ++i) {
+ el[i](eventObject);
+ }
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates an event.
+ *
+ * @class Base class for events. The interface is supposed to be as similar to
+ * standard DOM events as possible.
+ * @param {Object} data a data object whose fields will be used to set the
+ * corresponding fields of the event object.
+ */
+bigshot.Event = function (data) {
+
+ /**
+ * Indicates whether the event bubbles.
+ * @default false
+ * @type boolean
+ */
+ this.bubbles = false;
+
+ /**
+ * Indicates whether the event is cancelable.
+ * @default false
+ * @type boolean
+ */
+ this.cancelable = false;
+
+ /**
+ * The current target of the event
+ * @default null
+ */
+ this.currentTarget = null;
+
+ /**
+ * Set if the preventDefault method has been called.
+ * @default false
+ * @type boolean
+ */
+ this.defaultPrevented = false;
+
+ /**
+ * The target to which the event is dispatched.
+ * @default null
+ */
+ this.target = null;
+
+ /**
+ * The time the event was created, in milliseconds since the epoch.
+ * @default the current time, as given by <code>new Date ().getTime ()</code>
+ * @type number
+ */
+ this.timeStamp = new Date ().getTime ();
+
+ /**
+ * The event type.
+ * @default null
+ * @type String
+ */
+ this.type = null;
+
+ /**
+ * Flag indicating origin of event.
+ * @default false
+ * @type boolean
+ */
+ this.isTrusted = false;
+
+ for (var k in data) {
+ this[k] = data[k];
+ }
+}
+
+bigshot.Event.prototype = {
+ /**
+ * Prevents default handling of the event.
+ */
+ preventDefault : function () {
+ this.defaultPrevented = true;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Creates a new instance of the cached resource. May return
+ * null, in which case that value is cached. The function
+ * may be called multiple times, but a corresponding call to
+ * the dispose function will always occur inbetween.
+ * @name bigshot.TimedWeakReference.Create
+ * @function
+ */
+
+/**
+ * Disposes a of the cached resource.
+ * @name bigshot.TimedWeakReference.Dispose
+ * @function
+ * @param {Object} resource the resource that was created
+ * by the create function
+ */
+
+/**
+ * Creates a new instance.
+ *
+ * @class Caches a lazy-created resource for a given time before
+ * disposing it.
+ *
+ * @param {bigshot.TimedWeakReference.Create} create a function that creates the
+ * held resource. May be called multiple times, but not without a call to
+ * dispose inbetween.
+ * @param {bigshot.TimedWeakReference.Dispose} dispose a function that disposes the
+ * resource created by create.
+ * @param {int} interval the polling interval in milliseconds. If the last
+ * access time is further back than one interval, the held resource is
+ * disposed (and will be re-created
+ * on the next call to get).
+ */
+bigshot.TimedWeakReference = function (create, dispose, interval) {
+ this.object = null;
+ this.hasObject = false;
+ this.fnCreate = create;
+ this.fnDispose = dispose;
+ this.lastAccess = new Date ().getTime ();
+ this.hasTimer = false;
+ this.interval = interval;
+};
+
+bigshot.TimedWeakReference.prototype = {
+ /**
+ * Disposes of this instance. The resource is disposed.
+ */
+ dispose : function () {
+ this.clear ();
+ },
+
+ /**
+ * Gets the resource. The resource is created if needed.
+ * The last access time is updated.
+ */
+ get : function () {
+ if (!this.hasObject) {
+ this.hasObject = true;
+ this.object = this.fnCreate ();
+ this.startTimer ();
+ }
+ this.lastAccess = new Date ().getTime ();
+ return this.object;
+ },
+
+ /**
+ * Forcibly disposes the held resource, if any.
+ */
+ clear : function () {
+ if (this.hasObject) {
+ this.hasObject = false;
+ this.fnDispose (this.object);
+ this.object = null;
+ this.stopTimer ();
+ }
+ },
+
+ /**
+ * Stops the polling timer if it is running.
+ * @private
+ */
+ stopTimer : function () {
+ if (this.hasTimer) {
+ clearTimeout (this.timerId);
+ this.hasTimer = false;
+ }
+ },
+
+ /**
+ * Starts the polling timer if it isn't already running.
+ * @private
+ */
+ startTimer : function () {
+ if (!this.hasTimer) {
+ var that = this;
+ this.hasTimer = true;
+ this.timerId = setTimeout (function () {
+ that.hasTimer = false;
+ that.update ();
+ }, this.interval);
+ }
+ },
+
+ /**
+ * Disposes of the held resource if it hasn't been
+ * accessed in {@link #interval} milliseconds.
+ * @private
+ */
+ update : function () {
+ if (this.hasObject) {
+ var now = new Date ().getTime ();
+ if (now - this.lastAccess > this.interval) {
+ this.clear ();
+ } else {
+ this.startTimer ();
+ }
+ }
+ }
+}
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates an image event.
+ *
+ * @class Base class for events dispatched by bigshot.ImageBase.
+ * @param {Object} data a data object whose fields will be used to set the
+ * corresponding fields of the event object.
+ * @extends bigshot.Event
+ * @see bigshot.ImageBase
+ */
+bigshot.ImageEvent = function (data) {
+ bigshot.Event.call (this, data);
+}
+
+/**
+ * The image X coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#imageX
+ * @field
+ * @type number
+ */
+
+/**
+ * The image Y coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#imageY
+ * @field
+ * @type number
+ */
+
+/**
+ * The client X coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#clientX
+ * @field
+ * @type number
+ */
+
+/**
+ * The client Y coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#clientY
+ * @field
+ * @type number
+ */
+
+/**
+ * The local X coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#localX
+ * @field
+ * @type number
+ */
+
+/**
+ * The local Y coordinate of the event, if any.
+ *
+ * @name bigshot.ImageEvent#localY
+ * @field
+ * @type number
+ */
+
+
+bigshot.ImageEvent.prototype = {
+};
+
+bigshot.Object.extend (bigshot.ImageEvent, bigshot.Event);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates an image event.
+ *
+ * @class Base class for events dispatched by bigshot.VRPanorama.
+ * @param {Object} data a data object whose fields will be used to set the
+ * corresponding fields of the event object.
+ * @extends bigshot.Event
+ * @see bigshot.VRPanorama
+ */
+bigshot.VREvent = function (data) {
+ bigshot.Event.call (this, data);
+}
+
+/**
+ * The yaw coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#yaw
+ * @field
+ * @type number
+ */
+
+/**
+ * The pitch coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#pitch
+ * @field
+ * @type number
+ */
+
+/**
+ * The client X coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#clientX
+ * @field
+ * @type number
+ */
+
+/**
+ * The client Y coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#clientY
+ * @field
+ * @type number
+ */
+
+/**
+ * The local X coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#localX
+ * @field
+ * @type number
+ */
+
+/**
+ * The local Y coordinate of the event, if any.
+ *
+ * @name bigshot.VREvent#localY
+ * @field
+ * @type number
+ */
+
+/**
+ * A x,y,z triplet specifying a 3D ray from the viewer in the direction the
+ * event took place. The same as the yaw and pitch fields, but in Cartesian
+ * coordinates.
+ *
+ * @name bigshot.VREvent#ray
+ * @field
+ * @type xyz-triplet
+ */
+
+
+bigshot.VREvent.prototype = {
+};
+
+bigshot.Object.extend (bigshot.VREvent, bigshot.Event);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new full-screen handler for an element.
+ *
+ * @class A utility class for making an element "full screen", or as close to that
+ * as browser security allows. If the browser supports the <code>requestFullScreen</code>
+ * API - as standard or as <code>moz</code>- or <code>webkit</code>- extensions,
+ * this will be used.
+ *
+ * @param {HTMLElement} container the element that is to be made full screen
+ */
+bigshot.FullScreen = function (container) {
+ this.container = container;
+
+ this.isFullScreen = false;
+ this.savedBodyStyle = null;
+ this.savedParent = null;
+ this.savedSize = null;
+ this.expanderDiv = null;
+ this.restoreSize = false;
+
+ this.onCloseHandlers = new Array ();
+ this.onResizeHandlers = new Array ();
+
+ var findFunc = function (el, list) {
+ for (var i = 0; i < list.length; ++i) {
+ if (el[list[i]]) {
+ return list[i];
+ }
+ }
+ return null;
+ };
+
+ this.requestFullScreen = findFunc (container, ["requestFullScreen", "mozRequestFullScreen", "webkitRequestFullScreen"]);
+ this.cancelFullScreen = findFunc (document, ["cancelFullScreen", "mozCancelFullScreen", "webkitCancelFullScreen"]);
+
+ this.restoreSize = this.requestFullScreen != null;
+}
+
+bigshot.FullScreen.prototype = {
+ browser : new bigshot.Browser (),
+
+ getRootElement : function () {
+ return this.div;
+ },
+
+ /**
+ * Adds a function that will run when exiting full screen mode.
+ *
+ * @param {function()} onClose the function to call
+ */
+ addOnClose : function (onClose) {
+ this.onCloseHandlers.push (onClose);
+ },
+
+ /**
+ * Notifies all <code>onClose</code> handlers.
+ *
+ * @private
+ */
+ onClose : function () {
+ for (var i = 0; i < this.onCloseHandlers.length; ++i) {
+ this.onCloseHandlers[i] ();
+ }
+ },
+
+ /**
+ * Adds a function that will run when the element is resized.
+ *
+ * @param {function()} onResize the function to call
+ */
+ addOnResize : function (onResize) {
+ this.onResizeHandlers.push (onResize);
+ },
+
+ /**
+ * Notifies all resize handlers.
+ *
+ * @private
+ */
+ onResize : function () {
+ for (var i = 0; i < this.onResizeHandlers.length; ++i) {
+ this.onResizeHandlers[i] ();
+ }
+ },
+
+ /**
+ * Begins full screen mode.
+ */
+ open : function () {
+ this.isFullScreen = true;
+
+ if (this.requestFullScreen) {
+ return this.openRequestFullScreen ();
+ } else {
+ return this.openCompat ();
+ }
+ },
+
+ /**
+ * Makes the element really full screen using the <code>requestFullScreen</code>
+ * API.
+ *
+ * @private
+ */
+ openRequestFullScreen : function () {
+ this.savedSize = {
+ width : this.container.style.width,
+ height : this.container.style.height
+ };
+
+ this.container.style.width = "100%";
+ this.container.style.height = "100%";
+
+ var that = this;
+
+ if (this.requestFullScreen == "mozRequestFullScreen") {
+ /**
+ * @private
+ */
+ var errFun = function () {
+ that.container.removeEventListener ("mozfullscreenerror", errFun);
+ that.isFullScreen = false;
+ that.exitFullScreenHandler ();
+ that.onClose ();
+ };
+ this.container.addEventListener ("mozfullscreenerror", errFun);
+
+ /**
+ * @private
+ */
+ var changeFun = function () {
+ if (document.mozFullScreenElement !== that.container) {
+ document.removeEventListener ("mozfullscreenchange", changeFun);
+ that.exitFullScreenHandler ();
+ } else {
+ that.onResize ();
+ }
+ };
+ document.addEventListener ("mozfullscreenchange", changeFun);
+ } else {
+ /**
+ * @private
+ */
+ var changeFun = function () {
+ if (document.webkitCurrentFullScreenElement !== that.container) {
+ that.container.removeEventListener ("webkitfullscreenchange", changeFun);
+ that.exitFullScreenHandler ();
+ } else {
+ that.onResize ();
+ }
+ };
+ this.container.addEventListener ("webkitfullscreenchange", changeFun);
+ }
+
+ this.exitFullScreenHandler = function () {
+ if (that.isFullScreen) {
+ that.isFullScreen = false;
+ document[that.cancelFullScreen]();
+ if (that.restoreSize) {
+ that.container.style.width = that.savedSize.width;
+ that.container.style.height = that.savedSize.height;
+ }
+ that.onResize ();
+ that.onClose ();
+ }
+ };
+ this.container[this.requestFullScreen]();
+ },
+
+ /**
+ * Makes the element "full screen" in older browsers by covering the browser's client area.
+ *
+ * @private
+ */
+ openCompat : function () {
+ this.savedParent = this.container.parentNode;
+
+ this.savedSize = {
+ width : this.container.style.width,
+ height : this.container.style.height
+ };
+ this.savedBodyStyle = document.body.style.cssText;
+
+ document.body.style.overflow = "hidden";
+
+ this.expanderDiv = document.createElement ("div");
+ this.expanderDiv.style.position = "absolute";
+ this.expanderDiv.style.top = "0px";
+ this.expanderDiv.style.left = "0px";
+ this.expanderDiv.style.width = Math.max (window.innerWidth, document.documentElement.clientWidth) + "px";
+ this.expanderDiv.style.height = Math.max (window.innerHeight, document.documentElement.clientHeight) + "px";
+
+ document.body.appendChild (this.expanderDiv);
+
+ this.div = document.createElement ("div");
+ this.div.style.position = "fixed";
+ this.div.style.top = window.pageYOffset + "px";
+ this.div.style.left = window.pageXOffset + "px";
+
+ this.div.style.width = window.innerWidth + "px";
+ this.div.style.height = window.innerHeight + "px";
+ this.div.style.zIndex = 9998;
+
+ this.div.appendChild (this.container);
+
+ //this.container.style.width = window.innerWidth + "px";
+ //this.container.style.height = window.innerHeight + "px";
+
+ document.body.appendChild (this.div);
+
+ var that = this;
+ var resizeHandler = function (e) {
+ setTimeout (function () {
+ that.div.style.width = window.innerWidth + "px";
+ that.div.style.height = window.innerHeight + "px";
+ setTimeout (function () {
+ that.onResize ();
+ }, 1);
+ }, 1);
+ };
+
+
+ var rotationHandler = function (e) {
+ that.expanderDiv.style.width = Math.max (window.innerWidth, document.documentElement.clientWidth) + "px";
+ that.expanderDiv.style.height = Math.max (window.innerHeight, document.documentElement.clientHeight) + "px";
+ setTimeout (function () {
+ that.div.style.top = window.pageYOffset + "px";
+ that.div.style.left = window.pageXOffset + "px";
+ that.div.style.width = window.innerWidth + "px";
+ that.div.style.height = window.innerHeight + "px";
+ setTimeout (function () {
+ that.onResize ();
+ }, 1);
+ }, 1);
+ };
+
+ var escHandler = function (e) {
+ if (e.keyCode == 27) {
+ that.exitFullScreenHandler ();
+ }
+ };
+
+ this.exitFullScreenHandler = function () {
+ that.isFullScreen = false;
+ that.browser.unregisterListener (document, "keydown", escHandler);
+ that.browser.unregisterListener (window, "resize", resizeHandler);
+ that.browser.unregisterListener (document.body, "orientationchange", rotationHandler);
+ if (that.restoreSize) {
+ that.container.style.width = that.savedSize.width;
+ that.container.style.height = that.savedSize.height;
+ }
+
+ document.body.style.cssText = that.savedBodyStyle;
+
+ that.savedParent.appendChild (that.container);
+ document.body.removeChild (that.div);
+ document.body.removeChild (that.expanderDiv);
+
+ that.onResize ();
+ that.onClose ();
+ setTimeout (function () {
+ that.onResize ();
+ }, 1);
+ };
+
+ this.browser.registerListener (document, "keydown", escHandler, false);
+ this.browser.registerListener (window, "resize", resizeHandler, false);
+ this.browser.registerListener (document.body, "orientationchange", rotationHandler, false);
+
+ this.onResize ();
+
+ return this.exitFullScreenHandler;
+ },
+
+ /**
+ * Ends full screen mode.
+ */
+ close : function () {
+ this.exitFullScreenHandler ();
+ }
+};
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Loads image and XML data.
+ */
+bigshot.DataLoader = function () {
+}
+
+bigshot.DataLoader.prototype = {
+ /**
+ * Loads an image.
+ *
+ * @param {String} url the url to load
+ * @param {function(success,img)} onloaded called on complete
+ */
+ loadImage : function (url, onloaded) {},
+
+ /**
+ * Loads XML data.
+ *
+ * @param {String} url the url to load
+ * @param {boolean} async use async request
+ * @param {function(success,xml)} [onloaded] called on complete for async requests
+ * @return the xml for synchronous calls
+ */
+ loadXml : function (url, async, onloaded) {}
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new data loader.
+ *
+ * @param {int} [maxRetries=0] the maximum number of times to retry requests
+ * @param {String} [crossOrigin] the CORS crossOrigin parameter to use when loading images
+ * @class Data loader using standard browser functions.
+ * @augments bigshot.DataLoader
+ */
+bigshot.DefaultDataLoader = function (maxRetries, crossOrigin) {
+ this.maxRetries = maxRetries;
+ this.crossOrigin = crossOrigin;
+
+ if (!this.maxRetries) {
+ this.maxRetries = 0;
+ }
+}
+
+bigshot.DefaultDataLoader.prototype = {
+ browser : new bigshot.Browser (),
+
+ loadImage : function (url, onloaded) {
+ var tile = document.createElement ("img");
+ tile.retries = 0;
+ if (this.crossOrigin != null) {
+ tile.crossOrigin = this.crossOrigin;
+ }
+ var that = this;
+ this.browser.registerListener (tile, "load", function () {
+ if (onloaded) {
+ onloaded (tile);
+ }
+ }, false);
+ this.browser.registerListener (tile, "error", function () {
+ tile.retries++;
+ if (tile.retries <= that.maxRetries) {
+ setTimeout (function () {
+ tile.src = url;
+ }, tile.retries * 1000);
+ } else {
+ if (onloaded) {
+ onloaded (null);
+ }
+ }
+ }, false);
+ tile.src = url;
+ return tile;
+ },
+
+ loadXml : function (url, synchronous, onloaded) {
+ for (var tries = 0; tries <= this.maxRetries; ++tries) {
+ var req = this.browser.createXMLHttpRequest ();
+
+ req.open("GET", url, false);
+ req.send(null);
+ if(req.status == 200) {
+ var xml = req.responseXML;
+ if (xml != null) {
+ if (onloaded) {
+ onloaded (xml);
+ }
+ return xml;
+ }
+ }
+
+ if (tries == that.maxRetries) {
+ if (onloaded) {
+ onloaded (null);
+ }
+ return null;
+ }
+ }
+ }
+}
+
+bigshot.Object.validate ("bigshot.DefaultDataLoader", bigshot.DataLoader);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Data loader using standard browser functions that maintains
+ * an in-memory cache of everything loaded.
+ * @augments bigshot.DataLoader
+ */
+bigshot.CachingDataLoader = function () {
+ this.cache = {};
+ this.requested = {};
+ this.requestedTiles = {};
+}
+
+bigshot.CachingDataLoader.prototype = {
+
+ browser : new bigshot.Browser (),
+
+ loadImage : function (url, onloaded) {
+ if (this.cache[url]) {
+ if (onloaded) {
+ onloaded (this.cache[url]);
+ }
+ return this.cache[url];
+ } else if (this.requested[url]) {
+ if (onloaded) {
+ this.requested[url].push (onloaded);
+ }
+ return this.requestedTiles[url];
+ } else {
+ var that = this;
+ this.requested[url] = new Array ();
+ if (onloaded) {
+ this.requested[url].push (onloaded);
+ }
+
+ var tile = document.createElement ("img");
+ this.requestedTiles[url] = tile;
+ this.browser.registerListener (tile, "load", function () {
+ var listeners = that.requested[url];
+ delete that.requested[url];
+ delete that.requestedTiles[url];
+ that.cache[url] = tile;
+
+ for (var i = 0; i < listeners.length; ++i) {
+ listeners[i] (tile);
+ }
+ }, false);
+ tile.src = url;
+ return tile;
+ }
+ },
+
+ loadXml : function (url, async, onloaded) {
+ if (this.cache[url]) {
+ if (onloaded) {
+ onloaded (this.cache[url]);
+ }
+ return this.cache[url];
+ } else if (this.requested[url] && async) {
+ if (onloaded) {
+ this.requested[url].push (onloaded);
+ }
+ } else {
+ var req = this.browser.createXMLHttpRequest ();
+
+ if (!this.requested[url]) {
+ this.requested[url] = new Array ();
+ }
+
+ if (async) {
+ if (onloaded) {
+ this.requested[url].push (onloaded);
+ }
+ }
+
+ var that = this;
+ var finishRequest = function () {
+ if (that.requested[url]) {
+ var xml = null;
+ if(req.status == 200) {
+ xml = req.responseXML;
+ }
+ var listeners = that.requested[url];
+ delete that.requested[url];
+ that.cache[url] = xml
+
+ for (var i = 0; i < listeners.length; ++i) {
+ listeners[i](xml);
+ }
+ }
+ return xml;
+ };
+
+ if (async) {
+ req.onreadystatechange = function () {
+ if (req.readyState == 4) {
+ finishRequest ();
+ }
+ };
+ req.open("GET", url, true);
+ req.send ();
+ } else {
+ req.open("GET", url, false);
+ req.send ();
+ return finishRequest ();
+ }
+ }
+ }
+}
+
+bigshot.Object.validate ("bigshot.CachingDataLoader", bigshot.DataLoader);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new hotspot instance.
+ *
+ * @class Base class for hotspots in a {@link bigshot.HotspotLayer}. See {@link bigshot.HotspotLayer} for
+ * examples.
+ *
+ * @param {number} x x-coordinate of the top-left corner, given in full image pixels
+ * @param {number} y y-coordinate of the top-left corner, given in full image pixels
+ * @param {number} w width of the hotspot, given in full image pixels
+ * @param {number} h height of the hotspot, given in full image pixels
+ * @see bigshot.HotspotLayer
+ * @see bigshot.LabeledHotspot
+ * @see bigshot.LinkHotspot
+ * @constructor
+ */
+bigshot.Hotspot = function (x, y, w, h) {
+ var element = document.createElement ("div");
+ element.style.position = "absolute";
+ element.style.overflow = "visible";
+
+ this.element = element;
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+}
+
+bigshot.Hotspot.prototype = {
+
+ browser : new bigshot.Browser (),
+
+ /**
+ * Lays out the hotspot in the viewport.
+ *
+ * @name bigshot.Hotspot#layout
+ * @param x0 x-coordinate of top-left corner of the full image in css pixels
+ * @param y0 y-coordinate of top-left corner of the full image in css pixels
+ * @param zoomFactor the zoom factor.
+ * @function
+ */
+ layout : function (x0, y0, zoomFactor) {
+ var sx = this.x * zoomFactor + x0;
+ var sy = this.y * zoomFactor + y0;
+ var sw = this.w * zoomFactor;
+ var sh = this.h * zoomFactor;
+ this.element.style.top = sy + "px";
+ this.element.style.left = sx + "px";
+ this.element.style.width = sw + "px";
+ this.element.style.height = sh + "px";
+ },
+
+ /**
+ * Returns the HTMLDivElement used to show the hotspot.
+ * Clients can access this element in order to style it.
+ *
+ * @type HTMLDivElement
+ */
+ getElement : function () {
+ return this.element;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new labeled hotspot instance.
+ *
+ * @class A point hotspot consisting of an image.
+ *
+ * @see bigshot.HotspotLayer
+ * @param {number} x x-coordinate of the center corner, given in full image pixels
+ * @param {number} y y-coordinate of the center corner, given in full image pixels
+ * @param {number} w width of the hotspot, given in screen pixels
+ * @param {number} h height of the hotspot, given in screen pixels
+ * @param {number} xo x-offset, given in screen pixels
+ * @param {number} yo y-offset, given in screen pixels
+ * @param {HTMLElement} element the HTML element to position
+ * @param {String} [imageUrl] the image to use as hotspot sprite
+ * @augments bigshot.Hotspot
+ */
+bigshot.PointHotspot = function (x, y, w, h, xo, yo, imageUrl) {
+ bigshot.Hotspot.call (this, x, y, w, h);
+ this.xo = xo;
+ this.yo = yo;
+
+ if (imageUrl) {
+ var el = this.getElement ();
+ el.style.backgroundImage = "url('" + imageUrl + "')";
+ el.style.backgroundRepeat = "no-repeat";
+ }
+}
+
+bigshot.PointHotspot.prototype = {
+ /**
+ * Returns the label element.
+ *
+ * @type HTMLDivElement
+ */
+ getLabel : function () {
+ return this.label;
+ },
+
+ layout : function (x0, y0, zoomFactor) {
+ var sx = this.x * zoomFactor + x0 + this.xo;
+ var sy = this.y * zoomFactor + y0 + this.yo;
+ this.element.style.top = sy + "px";
+ this.element.style.left = sx + "px";
+ this.element.style.width = this.w + "px";
+ this.element.style.height = this.h + "px";
+ }
+};
+
+bigshot.Object.extend (bigshot.PointHotspot, bigshot.Hotspot);
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Abstract interface description for a Layer.
+ *
+ * @class Abstract interface description for a layer.
+ */
+bigshot.Layer = function () {
+}
+
+bigshot.Layer.prototype = {
+ /**
+ * Returns the layer container.
+ *
+ * @type HTMLDivElement
+ */
+ getContainer : function () {},
+
+ /**
+ * Sets the maximum number of image tiles that will be visible in the image.
+ *
+ * @param {int} x the number of tiles horizontally
+ * @param {int} y the number of tiles vertically
+ */
+ setMaxTiles : function (x, y) {},
+
+ /**
+ * Called when the image's viewport is resized.
+ *
+ * @param {int} w the new width of the viewport, in css pixels
+ * @param {int} h the new height of the viewport, in css pixels
+ */
+ resize : function (w, h) {},
+
+ /**
+ * Lays out the layer.
+ *
+ * @param {number} zoom the zoom level, adjusted for texture stretching
+ * @param {number} x0 the x-coordinate of the top-left corner of the top-left tile in css pixels
+ * @param {number} y0 the y-coordinate of the top-left corner of the top-left tile in css pixels
+ * @param {number} tx0 column number (starting at zero) of the top-left tile
+ * @param {number} ty0 row number (starting at zero) of the top-left tile
+ * @param {number} size the {@link bigshot.ImageParameters#tileSize} - width of each
+ * image tile in pixels - of the image
+ * @param {number} stride offset (vertical and horizontal) from the top-left corner
+ * of a tile to the next tile's top-left corner.
+ * @param {number} opacity the opacity of the layer as a CSS opacity value.
+ */
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {}
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new labeled hotspot instance.
+ *
+ * @class A hotspot with a label under it. The label element can be accessed using
+ * the getLabel method and styled as any HTMLElement. See {@link bigshot.HotspotLayer} for
+ * examples.
+ *
+ * @see bigshot.HotspotLayer
+ * @param {number} x x-coordinate of the top-left corner, given in full image pixels
+ * @param {number} y y-coordinate of the top-left corner, given in full image pixels
+ * @param {number} w width of the hotspot, given in full image pixels
+ * @param {number} h height of the hotspot, given in full image pixels
+ * @param {String} labelText text of the label
+ * @augments bigshot.Hotspot
+ */
+bigshot.LabeledHotspot = function (x, y, w, h, labelText) {
+ bigshot.Hotspot.call (this, x, y, w, h);
+
+ this.label = document.createElement ("div");
+ this.label.style.position = "relative";
+ this.label.style.display = "inline-block";
+
+ this.getElement ().appendChild (this.label);
+ this.label.innerHTML = labelText;
+ this.labelSize = this.browser.getElementSize (this.label);
+}
+
+bigshot.LabeledHotspot.prototype = {
+ /**
+ * Returns the label element.
+ *
+ * @type HTMLDivElement
+ */
+ getLabel : function () {
+ return this.label;
+ },
+
+ layout : function (x0, y0, zoomFactor) {
+ this.layout._super.call (this, x0, y0, zoomFactor);
+ var sw = this.w * zoomFactor;
+ var sh = this.h * zoomFactor;
+ this.label.style.top = (sh + 4) + "px";
+ this.label.style.left = ((sw - this.labelSize.w) / 2) + "px";
+ }
+};
+
+bigshot.Object.extend (bigshot.LabeledHotspot, bigshot.Hotspot);
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new link-hotspot instance.
+ *
+ * @class A labeled hotspot that takes the user to another
+ * location when it is clicked on. See {@link bigshot.HotspotLayer} for
+ * examples.
+ *
+ * @see bigshot.HotspotLayer
+ * @param {number} x x-coordinate of the top-left corner, given in full image pixels
+ * @param {number} y y-coordinate of the top-left corner, given in full image pixels
+ * @param {number} w width of the hotspot, given in full image pixels
+ * @param {number} h height of the hotspot, given in full image pixels
+ * @param {String} labelText text of the label
+ * @param {String} url url to go to on click
+ * @augments bigshot.LabeledHotspot
+ * @constructor
+ */
+bigshot.LinkHotspot = function (x, y, w, h, labelText, url) {
+ bigshot.LabeledHotspot.call (this, x, y, w, h, labelText);
+ this.browser.registerListener (this.getElement (), "click", function () {
+ document.location.href = url;
+ });
+};
+
+bigshot.Object.extend (bigshot.LinkHotspot, bigshot.LabeledHotspot);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new hotspot layer. The layer must be added to the image using
+ * {@link bigshot.ImageBase#addLayer}.
+ *
+ * @class A hotspot layer.
+ * @example
+ * var image = new bigshot.Image (...);
+ * var hotspotLayer = new bigshot.HotspotLayer (image);
+ * var hotspot = new bigshot.LinkHotspot (100, 100, 200, 100,
+ * "Bigshot on Google Code",
+ * "http://code.google.com/p/bigshot/");
+ *
+ * // Style the hotspot a bit
+ * hotspot.getElement ().className = "hotspot";
+ * hotspot.getLabel ().className = "label";
+ *
+ * hotspotLayer.addHotspot (hotspot);
+ *
+ * image.addLayer (hotspotLayer);
+ *
+ * @param {bigshot.ImageBase} image the image this hotspot layer will be part of
+ * @augments bigshot.Layer
+ * @constructor
+ */
+bigshot.HotspotLayer = function (image) {
+ this.image = image;
+ this.hotspots = new Array ();
+ this.browser = new bigshot.Browser ();
+ this.container = image.createLayerContainer ();
+ this.parentContainer = image.getContainer ();
+ this.resize (0, 0);
+}
+
+bigshot.HotspotLayer.prototype = {
+
+ getContainer : function () {
+ return this.container;
+ },
+
+ resize : function (w, h) {
+ this.container.style.width = this.parentContainer.clientWidth + "px";
+ this.container.style.height = this.parentContainer.clientHeight + "px";
+ },
+
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {
+ var zoomFactor = Math.pow (2, this.image.getZoom ());
+ x0 -= stride * tx0;
+ y0 -= stride * ty0;
+ for (var i = 0; i < this.hotspots.length; ++i) {
+ this.hotspots[i].layout (x0, y0, zoomFactor);
+ }
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ },
+
+ /**
+ * Adds a hotspot to the layer.
+ *
+ * @param {bigshot.Hotspot} hotspot the hotspot to add.
+ */
+ addHotspot : function (hotspot) {
+ this.container.appendChild (hotspot.getElement ());
+ this.hotspots.push (hotspot);
+ }
+}
+
+bigshot.Object.validate ("bigshot.HotspotLayer", bigshot.Layer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new image layer.
+ *
+ * @param {bigshot.ImageBase} image the image that this layer is part of
+ * @param {bigshot.ImageParameters} parameters the associated image parameters
+ * @param {number} w the current width in css pixels of the viewport
+ * @param {number} h the current height in css pixels of the viewport
+ * @param {bigshot.ImageTileCache} itc the tile cache to use
+ * @class A tiled, zoomable image layer.
+ * @constructor
+ */
+bigshot.TileLayer = function (image, parameters, w, h, itc) {
+ this.rows = new Array ();
+ this.browser = new bigshot.Browser ();
+ this.container = image.createLayerContainer ();
+ this.parentContainer = image.getContainer ();
+ this.parameters = parameters;
+ this.w = w;
+ this.h = h;
+ this.imageTileCache = itc;
+
+ this.resize (w, h);
+ return this;
+}
+
+bigshot.TileLayer.prototype = {
+ getContainer : function () {
+ return this.container;
+ },
+
+ resize : function (w, h) {
+ this.container.style.width = this.parentContainer.clientWidth + "px";
+ this.container.style.height = this.parentContainer.clientHeight + "px";
+ this.pixelWidth = this.parentContainer.clientWidth;
+ this.pixelHeight = this.parentContainer.clientHeight;
+ this.w = w;
+ this.h = h;
+ this.rows = new Array ();
+ this.browser.removeAllChildren (this.container);
+ for (var r = 0; r < h; ++r) {
+ var row = new Array ();
+ for (var c = 0; c < w; ++c) {
+ var tileAnchor = document.createElement ("div");
+ tileAnchor.style.position = "absolute";
+ tileAnchor.style.overflow = "hidden";
+ tileAnchor.style.width = this.container.clientWidth + "px";
+ tileAnchor.style.height = this.container.clientHeight + "px";
+
+ var tile = document.createElement ("div");
+ tile.style.position = "relative";
+ tile.style.border = "hidden";
+ tile.style.visibility = "hidden";
+ tile.bigshotData = {
+ visible : false
+ };
+ row.push (tile);
+ this.container.appendChild (tileAnchor);
+ tileAnchor.appendChild (tile);
+ }
+ this.rows.push (row);
+ }
+ },
+
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {
+ zoom = Math.min (0, Math.ceil (zoom));
+
+ this.imageTileCache.resetUsed ();
+ var y = y0;
+
+ var visible = 0;
+ for (var r = 0; r < this.h; ++r) {
+ var x = x0;
+ for (var c = 0; c < this.w; ++c) {
+ var tile = this.rows[r][c];
+ var bigshotData = tile.bigshotData;
+ if (x + size < 0 || x > this.pixelWidth || y + size < 0 || y > this.pixelHeight) {
+ if (bigshotData.visible) {
+ bigshotData.visible = false;
+ tile.style.visibility = "hidden";
+ }
+ } else {
+ visible++;
+ tile.style.left = x + "px";
+ tile.style.top = y + "px";
+ tile.style.width = size + "px";
+ tile.style.height = size + "px";
+ tile.style.opacity = opacity;
+ if (!bigshotData.visible) {
+ bigshotData.visible = true;
+ tile.style.visibility = "visible";
+ }
+ var tx = c + tx0;
+ var ty = r + ty0;
+ if (this.parameters.wrapX) {
+ if (tx < 0 || tx >= this.imageTileCache.maxTileX) {
+ tx = (tx + this.imageTileCache.maxTileX) % this.imageTileCache.maxTileX;
+ }
+ }
+
+ if (this.parameters.wrapY) {
+ if (ty < 0 || ty >= this.imageTileCache.maxTileY) {
+ ty = (ty + this.imageTileCache.maxTileY) % this.imageTileCache.maxTileY;
+ }
+ }
+
+ var imageKey = tx + "_" + ty + "_" + zoom;
+ var isOutside = tx < 0 || tx >= this.imageTileCache.maxTileX || ty < 0 || ty >= this.imageTileCache.maxTileY;
+ if (isOutside) {
+ if (!bigshotData.isOutside) {
+ var image = this.imageTileCache.getImage (tx, ty, zoom);
+
+ this.browser.removeAllChildren (tile);
+ tile.appendChild (image);
+ bigshotData.image = image;
+ }
+ bigshotData.isOutside = true;
+ bigshotData.imageKey = "EMPTY";
+ bigshotData.image.style.width = size + "px";
+ bigshotData.image.style.height = size + "px";
+ } else {
+ var image = this.imageTileCache.getImage (tx, ty, zoom);
+
+ bigshotData.isOutside = false;
+
+ if (bigshotData.imageKey !== imageKey || bigshotData.isPartial) {
+ this.browser.removeAllChildren (tile);
+ tile.appendChild (image);
+ bigshotData.image = image;
+ bigshotData.imageKey = imageKey;
+ bigshotData.isPartial = image.isPartial;
+ }
+ bigshotData.image.style.width = size + "px";
+ bigshotData.image.style.height = size + "px";
+
+ }
+ }
+ x += stride;
+ }
+ y += stride;
+ }
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ this.imageTileCache.setMaxTiles (mtx, mty);
+ }
+};
+
+bigshot.Object.validate ("bigshot.TileLayer", bigshot.Layer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new, empty, LRUMap instance.
+ *
+ * @class Implementation of a Least-Recently-Used cache map.
+ * Used by the ImageTileCache to keep track of cache entries.
+ * @constructor
+ */
+bigshot.LRUMap = function () {
+ /**
+ * Key to last-accessed time mapping.
+ *
+ * @type Object
+ */
+ this.keyToTime = {};
+
+ /**
+ * Current time counter. Incremented for each access of
+ * a key in the map.
+ * @type int
+ */
+ this.counter = 0;
+
+ /**
+ * Current size of the map.
+ * @type int
+ */
+ this.size = 0;
+}
+
+bigshot.LRUMap.prototype = {
+ /**
+ * Marks access to an item, represented by its key in the map.
+ * The key's last-accessed time is updated to the current time
+ * and the current time is incremented by one step.
+ *
+ * @param {String} key the key associated with the accessed item
+ */
+ access : function (key) {
+ this.remove (key);
+ this.keyToTime[key] = this.counter;
+ ++this.counter;
+ ++this.size;
+ },
+
+ /**
+ * Removes a key from the map.
+ *
+ * @param {String} key the key to remove
+ * @returns true iff the key existed in the map.
+ * @type boolean
+ */
+ remove : function (key) {
+ if (this.keyToTime[key]) {
+ delete this.keyToTime[key];
+ --this.size;
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ /**
+ * Returns the current number of keys in the map.
+ * @type int
+ */
+ getSize : function () {
+ return this.size;
+ },
+
+ /**
+ * Returns the key in the map with the lowest
+ * last-accessed time. This is done as a linear
+ * search through the map. It could be done much
+ * faster with a sorted map, but unless this becomes
+ * a bottleneck it is just not worth the effort.
+ * @type String
+ */
+ leastUsed : function () {
+ var least = this.counter + 1;
+ var leastKey = null;
+ for (var k in this.keyToTime) {
+ if (this.keyToTime[k] < least) {
+ least = this.keyToTime[k];
+ leastKey = k;
+ }
+ }
+ return leastKey;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new cache instance.
+ *
+ * @class Tile cache for the {@link bigshot.TileLayer}.
+ * @constructor
+ */
+bigshot.ImageTileCache = function (onLoaded, onCacheInit, parameters) {
+ var that = this;
+
+ this.parameters = parameters;
+
+ /**
+ * Reduced-resolution preview of the full image.
+ * Loaded from the "poster" image created by
+ * MakeImagePyramid
+ *
+ * @private
+ * @type HTMLImageElement
+ */
+ this.fullImage = null;
+ parameters.dataLoader.loadImage (parameters.fileSystem.getPosterFilename (), function (tile) {
+ that.fullImage = tile;
+ if (onCacheInit) {
+ onCacheInit ();
+ }
+ });
+
+ /**
+ * Maximum number of tiles in the cache.
+ * @private
+ * @type int
+ */
+ this.maxCacheSize = 512;
+ this.maxTileX = 0;
+ this.maxTileY = 0;
+ this.cachedImages = {};
+ this.requestedImages = {};
+ this.usedImages = {};
+ this.lastOnLoadFiredAt = 0;
+ this.imageRequests = 0;
+ this.lruMap = new bigshot.LRUMap ();
+ this.onLoaded = onLoaded;
+ this.browser = new bigshot.Browser ();
+ this.partialImageSize = parameters.tileSize / 4;
+ this.POSTER_ZOOM_LEVEL = Math.log (parameters.posterSize / Math.max (parameters.width, parameters.height)) / Math.log (2);
+}
+
+bigshot.ImageTileCache.prototype = {
+ resetUsed : function () {
+ this.usedImages = {};
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ this.maxTileX = mtx;
+ this.maxTileY = mty;
+ },
+
+ getPartialImage : function (tileX, tileY, zoomLevel) {
+ var img = this.getPartialImageFromDownsampled (tileX, tileY, zoomLevel, 0, 0, this.parameters.tileSize, this.parameters.tileSize);
+ if (img == null) {
+ img = this.getPartialImageFromPoster (tileX, tileY, zoomLevel);
+ }
+ return img;
+ },
+
+ getPartialImageFromPoster : function (tileX, tileY, zoomLevel) {
+ if (this.fullImage && this.fullImage.complete) {
+ var posterScale = this.fullImage.width / this.parameters.width;
+ var tileSizeAtZoom = posterScale * this.parameters.tileSize / Math.pow (2, zoomLevel);
+
+ x0 = Math.floor (tileSizeAtZoom * tileX);
+ y0 = Math.floor (tileSizeAtZoom * tileY);
+ w = Math.floor (tileSizeAtZoom);
+ h = Math.floor (tileSizeAtZoom);
+
+ return this.createPartialImage (this.fullImage, this.fullImage.width, x0, y0, w, h);
+ } else {
+ return null;
+ }
+ },
+
+ createPartialImage : function (sourceImage, expectedSourceImageSize, x0, y0, w, h) {
+ var canvas = document.createElement ("canvas");
+ if (!canvas["width"]) {
+ return null;
+ }
+ canvas.width = this.partialImageSize;
+ canvas.height = this.partialImageSize;
+ var ctx = canvas.getContext('2d');
+
+ var scale = sourceImage.width / expectedSourceImageSize;
+
+ var sx = Math.floor (x0 * scale);
+ var sy = Math.floor (y0 * scale);
+ var dw = this.partialImageSize;
+ var dh = this.partialImageSize;
+
+ w *= scale;
+ if (sx + w >= sourceImage.width) {
+ var w0 = w;
+ w = sourceImage.width - sx;
+ dw *= w / w0;
+ }
+
+ h *= scale;
+ if (sy + h >= sourceImage.height) {
+ var h0 = h;
+ h = sourceImage.height - sy;
+ dh *= h / h0;
+ }
+
+ try {
+ ctx.drawImage (sourceImage, sx, sy, w, h, -0.1, -0.1, dw + 0.2, dh + 0.2);
+ } catch (e) {
+ // DOM INDEX error on iPad.
+ return null;
+ }
+
+ return canvas;
+ },
+
+ getPartialImageFromDownsampled : function (tileX, tileY, zoomLevel, x0, y0, w, h) {
+ // Give up if the poster image has higher resolution.
+ if (zoomLevel < this.POSTER_ZOOM_LEVEL || zoomLevel < this.parameters.minZoom) {
+ return null;
+ }
+
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ var sourceImage = this.cachedImages[key];
+
+ if (sourceImage == null) {
+ this.requestImage (tileX, tileY, zoomLevel);
+ }
+
+ if (sourceImage) {
+ return this.createPartialImage (sourceImage, this.parameters.tileSize, x0, y0, w, h);
+ } else {
+ w /= 2;
+ h /= 2;
+ x0 /= 2;
+ y0 /= 2;
+ if ((tileX % 2) == 1) {
+ x0 += this.parameters.tileSize / 2;
+ }
+ if ((tileY % 2) == 1) {
+ y0 += this.parameters.tileSize / 2;
+ }
+ tileX = Math.floor (tileX / 2);
+ tileY = Math.floor (tileY / 2);
+ --zoomLevel;
+ return this.getPartialImageFromDownsampled (tileX, tileY, zoomLevel, x0, y0, w, h);
+ }
+ },
+
+ getEmptyImage : function () {
+ var tile = document.createElement ("img");
+ if (this.parameters.emptyImage) {
+ tile.src = this.parameters.emptyImage;
+ } else {
+ tile.src = "data:image/gif,GIF89a%01%00%01%00%80%00%00%00%00%00%FF%FF%FF!%F9%04%00%00%00%00%00%2C%00%00%00%00%01%00%01%00%00%02%02D%01%00%3B";
+ }
+ return tile;
+ },
+
+ getImage : function (tileX, tileY, zoomLevel) {
+ if (tileX < 0 || tileY < 0 || tileX >= this.maxTileX || tileY >= this.maxTileY) {
+ return this.getEmptyImage ();
+ }
+
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ this.lruMap.access (key);
+
+ if (this.cachedImages[key]) {
+ if (this.usedImages[key]) {
+ var tile = this.parameters.dataLoader.loadImage (this.getImageFilename (tileX, tileY, zoomLevel));
+ tile.isPartial = false;
+ return tile;
+ } else {
+ this.usedImages[key] = true;
+ var img = this.cachedImages[key];
+ return img;
+ }
+ } else {
+ this.requestImage (tileX, tileY, zoomLevel);
+ var img = this.getPartialImage (tileX, tileY, zoomLevel);
+ if (img != null) {
+ img.isPartial = true;
+ this.cachedImages[key] = img;
+ } else {
+ img = this.getEmptyImage ();
+ if (img != null) {
+ img.isPartial = true;
+ }
+ }
+ return img;
+ }
+ },
+
+ requestImage : function (tileX, tileY, zoomLevel) {
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ if (!this.requestedImages[key]) {
+ this.imageRequests++;
+ var that = this;
+ this.requestedImages[key] = true;
+ this.parameters.dataLoader.loadImage (this.getImageFilename (tileX, tileY, zoomLevel), function (tile) {
+ delete that.requestedImages[key];
+ that.imageRequests--;
+ tile.isPartial = false;
+ that.cachedImages[key] = tile;
+ that.fireOnLoad ();
+ });
+ }
+ },
+
+ /**
+ * Fires the onload event, if it hasn't been fired for at least 50 ms
+ */
+ fireOnLoad : function () {
+ var now = new Date();
+ if (this.imageRequests == 0 || now.getTime () > (this.lastOnLoadFiredAt + 50)) {
+ this.purgeCache ();
+ this.lastOnLoadFiredAt = now.getTime ();
+ this.onLoaded ();
+ }
+ },
+
+ /**
+ * Removes the least-recently used objects from the cache,
+ * if the size of the cache exceeds the maximum cache size.
+ * A maximum of four objects will be removed per call.
+ *
+ * @private
+ */
+ purgeCache : function () {
+ for (var i = 0; i < 4; ++i) {
+ if (this.lruMap.getSize () > this.maxCacheSize) {
+ var leastUsed = this.lruMap.leastUsed ();
+ this.lruMap.remove (leastUsed);
+ delete this.cachedImages[leastUsed];
+ }
+ }
+ },
+
+ getImageKey : function (tileX, tileY, zoomLevel) {
+ return "I" + tileX + "_" + tileY + "_" + zoomLevel;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var f = this.parameters.fileSystem.getImageFilename (tileX, tileY, zoomLevel);
+ return f;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new image parameter object and populates it with default values for
+ * all values not explicitly given.
+ *
+ * @class ImageParameters parameter object.
+ * You need not set any fields that can be read from the image descriptor that
+ * MakeImagePyramid creates. See the {@link bigshot.Image} documentation for
+ * required parameters.
+ *
+ * <p>Usage:
+ *
+ * @example
+ * var bsi = new bigshot.Image (
+ * new bigshot.ImageParameters ({
+ * basePath : "/bigshot.php?file=myshot.bigshot",
+ * fileSystemType : "archive",
+ * container : document.getElementById ("bigshot_div")
+ * }));
+ *
+ * @param values named parameter map, see the fields below for parameter names and types.
+ * @see bigshot.Image
+ */
+bigshot.ImageParameters = function (values) {
+ /**
+ * Size of low resolution preview image along the longest image
+ * dimension. The preview is assumed to have the same aspect
+ * ratio as the full image (specified by width and height).
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ * @public
+ */
+ this.posterSize = 0;
+
+ /**
+ * Url for the image tile to show while the tile is loading and no
+ * low-resolution preview is available.
+ *
+ * @default <code>null</code>, which results in an all-black image
+ * @type String
+ * @public
+ */
+ this.emptyImage = null;
+
+ /**
+ * Suffix to append to the tile filenames. Typically <code>".jpg"</code> or
+ * <code>".png"</code>.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type String
+ */
+ this.suffix = null;
+
+ /**
+ * The width of the full image; in pixels.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ */
+ this.width = 0;
+
+ /**
+ * The height of the full image; in pixels.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ */
+ this.height = 0;
+
+ /**
+ * For {@link bigshot.Image} and {@link bigshot.SimpleImage}, the <code>div</code>
+ * to use as a container for the image.
+ *
+ * @type HTMLDivElement
+ */
+ this.container = null;
+
+ /**
+ * The minimum zoom value. Zoom values are specified as a magnification; where
+ * 2<sup>n</sup> is the magnification and n is the zoom value. So a zoom value of
+ * 2 means a 4x magnification of the full image. -3 means showing an image that
+ * is a eighth (1/8 or 1/2<sup>3</sup>) of the full size.
+ *
+ * @type number
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.minZoom = 0.0;
+
+ /**
+ * The maximum zoom value. Zoom values are specified as a magnification; where
+ * 2<sup>n</sup> is the magnification and n is the zoom value. So a zoom value of
+ * 2 means a 4x magnification of the full image. -3 means showing an image that
+ * is a eighth (1/8 or 1/2<sup>3</sup>) of the full size.
+ *
+ * @type number
+ * @default 0.0
+ */
+ this.maxZoom = 0.0;
+
+ /**
+ * Size of one tile in pixels.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.tileSize = 0;
+
+ /**
+ * Tile overlap. Not implemented.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.overlap = 0;
+
+ /**
+ * Flag indicating that the image should wrap horizontally. The image wraps on tile
+ * boundaries; so in order to get a seamless wrap at zoom level -n; the image width must
+ * be evenly divisible by <code>tileSize * 2^n</code>. Set the minZoom value appropriately.
+ *
+ * @type boolean
+ * @default false
+ */
+ this.wrapX = false;
+
+ /**
+ * Flag indicating that the image should wrap vertically. The image wraps on tile
+ * boundaries; so in order to get a seamless wrap at zoom level -n; the image height must
+ * be evenly divisible by <code>tileSize * 2^n</code>. Set the minZoom value appropriately.
+ *
+ * @type boolean
+ * @default false
+ */
+ this.wrapY = false;
+
+ /**
+ * Base path for the image. This is filesystem dependent; but for the two most common cases
+ * the following should be set
+ *
+ * <ul>
+ * <li><b>archive</b>= The basePath is <code>"&lt;path&gt;/bigshot.php?file=&lt;path-to-bigshot-archive-relative-to-bigshot.php&gt;"</code>;
+ * for example; <code>"/bigshot.php?file=images/bigshot-sample.bigshot"</code>.
+ * <li><b>folder</b>= The basePath is <code>"&lt;path-to-image-folder&gt;"</code>;
+ * for example; <code>"/images/bigshot-sample"</code>.
+ * </ul>
+ *
+ * @type String
+ */
+ this.basePath = null;
+
+ /**
+ * The file system type. Used to create a filesystem instance unless
+ * the fileSystem field is set. Possible values are <code>"archive"</code>,
+ * <code>"folder"</code> or <code>"dzi"</code>.
+ *
+ * @type String
+ * @default "folder"
+ */
+ this.fileSystemType = "folder";
+
+ /**
+ * A reference to a filesystem implementation. If set; it overrides the
+ * fileSystemType field.
+ *
+ * @default set depending on value of bigshot.ImageParameters.fileSystemType
+ * @type bigshot.FileSystem
+ */
+ this.fileSystem = null;
+
+ /**
+ * Object used to load data files.
+ *
+ * @default bigshot.DefaultDataLoader
+ * @type bigshot.DataLoader
+ */
+ this.dataLoader = new bigshot.DefaultDataLoader ();
+
+ /**
+ * Enable the touch-friendly ui. The touch-friendly UI splits the viewport into
+ * three click-sensitive regions:
+ * <p style="text-align:center"><img src="../images/touch-ui.png"/></p>
+ *
+ * <p>Clicking (or tapping with a finger) on the outer region causes the viewport to zoom out.
+ * Clicking anywhere within the middle, "pan", region centers the image on the spot clicked.
+ * Finally, clicking in the center hotspot will center the image on the spot clicked and zoom
+ * in half a zoom level.
+ *
+ * <p>As before, you can drag to pan anywhere.
+ *
+ * <p>If you have navigation tools for mouse users that hover over the image container, it
+ * is recommended that any click events on them are kept from bubbling, otherwise the click
+ * will propagate to the touch ui. One way is to use the
+ * {@link bigshot.Browser#stopMouseEventBubbling} method:
+ *
+ * @example
+ * var browser = new bigshot.Browser ();
+ * browser.stopMouseEventBubbling (document.getElementById ("myBigshotControlDiv"));
+ *
+ * @see bigshot.ImageBase#showTouchUI
+ *
+ * @type boolean
+ * @default true
+ * @deprecated Bigshot supports all common touch-gestures.
+ */
+ this.touchUI = false;
+
+ /**
+ * Lets you "fling" the image.
+ *
+ * @type boolean
+ * @default true
+ */
+ this.fling = true;
+
+ /**
+ * The maximum amount that a tile will be stretched until we try to show
+ * the next more detailed level.
+ *
+ * @type float
+ * @default 1.0
+ */
+ this.maxTextureMagnification = 1.0;
+
+ if (values) {
+ for (var k in values) {
+ this[k] = values[k];
+ }
+ }
+
+ this.merge = function (values, overwrite) {
+ for (var k in values) {
+ if (overwrite || !this[k]) {
+ this[k] = values[k];
+ }
+ }
+ }
+ return this;
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Sets up base image functionality.
+ *
+ * @param {bigshot.ImageParameters} parameters the image parameters
+ * @class Base class for image viewers.
+ * @extends bigshot.EventDispatcher
+ */
+bigshot.ImageBase = function (parameters) {
+ // Base class init
+ bigshot.EventDispatcher.call (this);
+
+ this.parameters = parameters;
+ this.flying = 0;
+ this.container = parameters.container;
+ this.x = parameters.width / 2.0;
+ this.y = parameters.height / 2.0;
+ this.zoom = 0.0;
+ this.width = parameters.width;
+ this.height = parameters.height;
+ this.minZoom = parameters.minZoom;
+ this.maxZoom = parameters.maxZoom;
+ this.tileSize = parameters.tileSize;
+ this.overlap = 0;
+ this.imageTileCache = null;
+
+ this.dragStart = null;
+ this.dragged = false;
+
+ this.layers = new Array ();
+
+ this.fullScreenHandler = null;
+ this.currentGesture = null;
+
+ var that = this;
+ this.onresizeHandler = function (e) {
+ that.onresize ();
+ }
+
+ /**
+ * Helper function to consume events.
+ * @private
+ */
+ var consumeEvent = function (event) {
+ if (event.preventDefault) {
+ event.preventDefault ();
+ }
+ return false;
+ };
+
+ /**
+ * Helper function to translate touch events to mouse-like events.
+ * @private
+ */
+ var translateEvent = function (event) {
+ if (event.clientX) {
+ return event;
+ } else {
+ return {
+ clientX : event.changedTouches[0].clientX,
+ clientY : event.changedTouches[0].clientY,
+ changedTouches : event.changedTouches
+ };
+ };
+ };
+
+ this.setupLayers ();
+
+ this.resize ();
+
+ this.allListeners = {
+ "DOMMouseScroll" : function (e) {
+ that.mouseWheel (e);
+ return consumeEvent (e);
+ },
+ "mousewheel" : function (e) {
+ that.mouseWheel (e);
+ return consumeEvent (e);
+ },
+ "dblclick" : function (e) {
+ that.mouseDoubleClick (e);
+ return consumeEvent (e);
+ },
+ "mousedown" : function (e) {
+ that.dragMouseDown (e);
+ return consumeEvent (e);
+ },
+ "gesturestart" : function (e) {
+ that.gestureStart (e);
+ return consumeEvent (e);
+ },
+ "gesturechange" : function (e) {
+ that.gestureChange (e);
+ return consumeEvent (e);
+ },
+ "gestureend" : function (e) {
+ that.gestureEnd (e);
+ return consumeEvent (e);
+ },
+ "touchstart" : function (e) {
+ that.dragMouseDown (translateEvent (e));
+ return consumeEvent (e);
+ },
+ "mouseup" : function (e) {
+ that.dragMouseUp (e);
+ return consumeEvent (e);
+ },
+ "touchend" : function (e) {
+ that.dragMouseUp (translateEvent (e));
+ return consumeEvent (e);
+ },
+ "mousemove" : function (e) {
+ that.dragMouseMove (e);
+ return consumeEvent (e);
+ },
+ "mouseout" : function (e) {
+ //that.dragMouseUp (e);
+ return consumeEvent (e);
+ },
+ "touchmove" : function (e) {
+ that.dragMouseMove (translateEvent (e));
+ return consumeEvent (e);
+ }
+ };
+
+ this.addEventListeners ();
+ this.browser.registerListener (window, 'resize', that.onresizeHandler, false);
+ this.zoomToFit ();
+}
+
+bigshot.ImageBase.prototype = {
+ /**
+ * Browser helper and compatibility functions.
+ *
+ * @private
+ * @type bigshot.Browser
+ */
+ browser : new bigshot.Browser (),
+
+ /**
+ * Adds all event listeners to the container object.
+ * @private
+ */
+ addEventListeners : function () {
+ for (var k in this.allListeners) {
+ this.browser.registerListener (this.container, k, this.allListeners[k], false);
+ }
+ },
+
+ /**
+ * Removes all event listeners from the container object.
+ * @private
+ */
+ removeEventListeners : function () {
+ for (var k in this.allListeners) {
+ this.browser.unregisterListener (this.container, k, this.allListeners[k], false);
+ }
+ },
+
+ /**
+ * Sets up the initial layers of the image. Override in subclass.
+ */
+ setupLayers : function () {
+ },
+
+ /**
+ * Returns the base 2 logarithm of the maximum texture stretching, allowing for device pixel scaling.
+ * @type number
+ * @private
+ */
+ getTextureStretch : function () {
+ var ts = Math.log (this.parameters.maxTextureMagnification / this.browser.getDevicePixelScale ()) / Math.LN2;
+ return ts;
+ },
+
+ /**
+ * Constrains the x and y coordinates to allowed values
+ * @param {number} x the initial x coordinate
+ * @param {number} y the initial y coordinate
+ * @return {number} .x the constrained x coordinate
+ * @return {number} .y the constrained y coordinate
+ */
+ clampXY : function (x, y) {
+ var viewportWidth = this.container.clientWidth;
+ var viewportHeight = this.container.clientHeight;
+
+ var realZoomFactor = Math.pow (2, this.zoom);
+ /*
+ Constrain X and Y
+ */
+ var viewportWidthInImagePixels = viewportWidth / realZoomFactor;
+ var viewportHeightInImagePixels = viewportHeight / realZoomFactor;
+
+ var constrain = function (viewportSizeInImagePixels, imageSizeInImagePixels, p) {
+ var min = viewportSizeInImagePixels / 2;
+ min = Math.min (imageSizeInImagePixels / 2, min);
+ if (p < min) {
+ p = min;
+ }
+
+ var max = imageSizeInImagePixels - viewportSizeInImagePixels / 2;
+ max = Math.max (imageSizeInImagePixels / 2, max);
+ if (p > max) {
+ p = max;
+ }
+ return p;
+ };
+
+ var o = {};
+ if (x != null) {
+ o.x = constrain (viewportWidthInImagePixels, this.width, x);
+ }
+
+ if (y != null) {
+ o.y = constrain (viewportHeightInImagePixels, this.height, y);
+ }
+
+ return o;
+ },
+
+ /**
+ * Lays out all layers according to the current
+ * x, y and zoom values.
+ *
+ * @public
+ */
+ layout : function () {
+ var viewportWidth = this.container.clientWidth;
+ var viewportHeight = this.container.clientHeight;
+
+ var zoomWithStretch = Math.min (this.maxZoom, Math.max (this.zoom - this.getTextureStretch (), this.minZoom));
+
+ var zoomLevel = Math.min (0, Math.ceil (zoomWithStretch));
+ var zoomFactor = Math.pow (2, zoomLevel);
+
+ var clamped = this.clampXY (this.x, this.y);
+
+ if (!this.parameters.wrapY) {
+ this.y = clamped.y;
+ }
+
+ if (!this.parameters.wrapX) {
+ this.x = clamped.x;
+ }
+
+ var tileWidthInRealPixels = this.tileSize / zoomFactor;
+
+ var fractionalZoomFactor = Math.pow (2, this.zoom - zoomLevel);
+ var tileDisplayWidth = this.tileSize * fractionalZoomFactor;
+
+ var widthInTiles = this.width / tileWidthInRealPixels;
+ var heightInTiles = this.height / tileWidthInRealPixels;
+ var centerInTilesX = this.x / tileWidthInRealPixels;
+ var centerInTilesY = this.y / tileWidthInRealPixels;
+
+ var topLeftInTilesX = centerInTilesX - (viewportWidth / 2) / tileDisplayWidth;
+ var topLeftInTilesY = centerInTilesY - (viewportHeight / 2) / tileDisplayWidth;
+
+ var topLeftTileX = Math.floor (topLeftInTilesX);
+ var topLeftTileY = Math.floor (topLeftInTilesY);
+ var topLeftTileXoffset = Math.round ((topLeftInTilesX - topLeftTileX) * tileDisplayWidth);
+ var topLeftTileYoffset = Math.round ((topLeftInTilesY - topLeftTileY) * tileDisplayWidth);
+
+ for (var i = 0; i < this.layers.length; ++i) {
+ this.layers[i].layout (
+ zoomWithStretch,
+ -topLeftTileXoffset - tileDisplayWidth, -topLeftTileYoffset - tileDisplayWidth,
+ topLeftTileX - 1, topLeftTileY - 1,
+ Math.ceil (tileDisplayWidth), Math.ceil (tileDisplayWidth),
+ 1.0);
+ }
+ },
+
+ /**
+ * Resizes the layers of this image.
+ *
+ * @public
+ */
+ resize : function () {
+ var tilesW = Math.ceil (2 * this.container.clientWidth / this.tileSize) + 2;
+ var tilesH = Math.ceil (2 * this.container.clientHeight / this.tileSize) + 2;
+ for (var i = 0; i < this.layers.length; ++i) {
+ this.layers[i].resize (tilesW, tilesH);
+ }
+ },
+
+ /**
+ * Creates a HTML div container for a layer. This method
+ * is called by the layer's constructor to obtain a
+ * container.
+ *
+ * @public
+ * @type HTMLDivElement
+ */
+ createLayerContainer : function () {
+ var layerContainer = document.createElement ("div");
+ layerContainer.style.position = "absolute";
+ layerContainer.style.overflow = "hidden";
+ return layerContainer;
+ },
+
+ /**
+ * Returns the div element used as viewport.
+ *
+ * @public
+ * @type HTMLDivElement
+ */
+ getContainer : function () {
+ return this.container;
+ },
+
+ /**
+ * Adds a new layer to the image.
+ *
+ * @public
+ * @see bigshot.HotspotLayer for usage example
+ * @param {bigshot.Layer} layer the layer to add.
+ */
+ addLayer : function (layer) {
+ this.container.appendChild (layer.getContainer ());
+ this.layers.push (layer);
+ },
+
+ /**
+ * Clamps the zoom value to be between minZoom and maxZoom.
+ *
+ * @param {number} zoom the zoom value
+ * @type number
+ */
+ clampZoom : function (zoom) {
+ return Math.min (this.maxZoom, Math.max (zoom, this.minZoom));
+ },
+
+ /**
+ * Sets the current zoom value.
+ *
+ * @private
+ * @param {number} zoom the zoom value.
+ * @param {boolean} [layout] trigger a viewport update after setting. Defaults to <code>false</code>.
+ */
+ setZoom : function (zoom, updateViewport) {
+ this.zoom = this.clampZoom (zoom);
+ var zoomLevel = Math.ceil (this.zoom - this.getTextureStretch ());
+ var zoomFactor = Math.pow (2, zoomLevel);
+ var maxTileX = Math.ceil (zoomFactor * this.width / this.tileSize);
+ var maxTileY = Math.ceil (zoomFactor * this.height / this.tileSize);
+ for (var i = 0; i < this.layers.length; ++i) {
+ this.layers[i].setMaxTiles (maxTileX, maxTileY);
+ }
+ if (updateViewport) {
+ this.layout ();
+ }
+ },
+
+ /**
+ * Sets the maximum zoom value. The maximum magnification (of the full-size image)
+ * is 2<sup>maxZoom</sup>. Set to 0.0 to avoid pixelation.
+ *
+ * @public
+ * @param {number} maxZoom the maximum zoom value
+ */
+ setMaxZoom : function (maxZoom) {
+ this.maxZoom = maxZoom;
+ },
+
+ /**
+ * Gets the maximum zoom value. The maximum magnification (of the full-size image)
+ * is 2<sup>maxZoom</sup>.
+ *
+ * @public
+ * @type number
+ */
+ getMaxZoom : function () {
+ return this.maxZoom;
+ },
+
+ /**
+ * Sets the minimum zoom value. The minimum magnification (of the full-size image)
+ * is 2<sup>minZoom</sup>, so a minZoom of <code>-3</code> means that the smallest
+ * image shown will be one-eighth of the full-size image.
+ *
+ * @public
+ * @param {number} minZoom the minimum zoom value for this image
+ */
+ setMinZoom : function (minZoom) {
+ this.minZoom = minZoom;
+ },
+
+ /**
+ * Gets the minimum zoom value. The minimum magnification (of the full-size image)
+ * is 2<sup>minZoom</sup>, so a minZoom of <code>-3</code> means that the smallest
+ * image shown will be one-eighth of the full-size image.
+ *
+ * @public
+ * @type number
+ */
+ getMinZoom : function () {
+ return this.minZoom;
+ },
+
+ /**
+ * Adjusts a coordinate so that the center of zoom
+ * remains constant during zooming operations. The
+ * method is intended to be called twice, once for x
+ * and once for y. The <code>current</code> and
+ * <code>centerOfZoom</code> values will be the current
+ * and the center for the x and y, respectively.
+ *
+ * @example
+ * this.x = this.adjustCoordinateForZoom (this.x, zoomCenterX, oldZoom, newZoom);
+ * this.y = this.adjustCoordinateForZoom (this.y, zoomCenterY, oldZoom, newZoom);
+ *
+ * @param {number} current the current value of the coordinate
+ * @param {number} centerOfZoom the center of zoom along the coordinate axis
+ * @param {number} oldZoom the old zoom value
+ * @param {number} oldZoom the new zoom value
+ * @type number
+ * @returns the new value for the coordinate
+ */
+ adjustCoordinateForZoom : function (current, centerOfZoom, oldZoom, newZoom) {
+ var zoomRatio = Math.pow (2, oldZoom) / Math.pow (2, newZoom);
+ return centerOfZoom + (current - centerOfZoom) * zoomRatio;
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ gestureStart : function (event) {
+ this.currentGesture = {
+ startZoom : this.zoom,
+ scale : event.scale
+ };
+ },
+
+ /**
+ * Ends a gesture.
+ *
+ * @param {Event} event the <code>gestureend</code> event
+ * @private
+ */
+ gestureEnd : function (event) {
+ this.currentGesture = null;
+ if (this.dragStart) {
+ this.dragStart.hadGesture = true;
+ }
+ },
+
+ /**
+ * Adjusts the zoom level based on the scale property of the
+ * gesture.
+ *
+ * @private
+ */
+ gestureChange : function (event) {
+ if (this.currentGesture) {
+ if (this.dragStart) {
+ this.dragStart.hadGesture = true;
+ }
+
+ var newZoom = this.clampZoom (this.currentGesture.startZoom + Math.log (event.scale) / Math.log (2));
+ var oldZoom = this.getZoom ();
+ if (this.currentGesture.clientX !== undefined && this.currentGesture.clientY !== undefined) {
+ var centerOfZoom = this.clientToImage (this.currentGesture.clientX, this.currentGesture.clientY);
+
+ var nx = this.adjustCoordinateForZoom (this.x, centerOfZoom.x, oldZoom, newZoom);
+ var ny = this.adjustCoordinateForZoom (this.y, centerOfZoom.y, oldZoom, newZoom);
+
+ this.moveTo (nx, ny, newZoom);
+ } else {
+ this.setZoom (newZoom);
+ this.layout ();
+ }
+ }
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ dragMouseDown : function (event) {
+ this.dragStart = {
+ x : event.clientX,
+ y : event.clientY
+ };
+ this.dragLast = {
+ clientX : event.clientX,
+ clientY : event.clientY,
+ dx : 0,
+ dy : 0,
+ dt : 1000000,
+ time : new Date ().getTime ()
+ };
+ this.dragged = false;
+ },
+
+ /**
+ * Handles a mouse drag event by panning the image.
+ * Also sets the dragged flag to indicate that the
+ * following <code>click</code> event should be ignored.
+ * @private
+ */
+ dragMouseMove : function (event) {
+ if (this.currentGesture != null && event.changedTouches != null && event.changedTouches.length > 0) {
+ var cx = 0;
+ var cy = 0;
+ for (var i = 0; i < event.changedTouches.length; ++i) {
+ cx += event.changedTouches[i].clientX;
+ cy += event.changedTouches[i].clientY;
+ }
+ this.currentGesture.clientX = cx / event.changedTouches.length;
+ this.currentGesture.clientY = cy / event.changedTouches.length;
+ }
+
+ if (this.currentGesture == null && this.dragStart != null) {
+ var delta = {
+ x : event.clientX - this.dragStart.x,
+ y : event.clientY - this.dragStart.y
+ };
+ if (delta.x != 0 || delta.y != 0) {
+ this.dragged = true;
+ }
+ var zoomFactor = Math.pow (2, this.zoom);
+ var realX = delta.x / zoomFactor;
+ var realY = delta.y / zoomFactor;
+
+ this.dragStart = {
+ x : event.clientX,
+ y : event.clientY
+ };
+
+ var dt = new Date ().getTime () - this.dragLast.time;
+ if (dt > 20) {
+ this.dragLast = {
+ dx : this.dragLast.clientX - event.clientX,
+ dy : this.dragLast.clientY - event.clientY,
+ dt : dt,
+ clientX : event.clientX,
+ clientY : event.clientY,
+ time : new Date ().getTime ()
+ };
+ }
+
+ this.moveTo (this.x - realX, this.y - realY);
+ }
+ },
+
+ /**
+ * Ends a drag event by freeing the associated structures.
+ * @private
+ */
+ dragMouseUp : function (event) {
+ if (this.currentGesture == null && !this.dragStart.hadGesture && this.dragStart != null) {
+ this.dragStart = null;
+ if (!this.dragged) {
+ this.mouseClick (event);
+ } else {
+ var scale = Math.pow (2, this.zoom);
+ var dx = this.dragLast.dx / scale;
+ var dy = this.dragLast.dy / scale;
+ var ds = Math.sqrt (dx * dx + dy * dy);
+ var dt = this.dragLast.dt;
+ var dtb = new Date ().getTime () - this.dragLast.time;
+ this.dragLast = null;
+
+ var v = dt > 0 ? (ds / dt) : 0;
+ if (v > 0.05 && dtb < 250 && dt > 20 && this.parameters.fling) {
+ var t0 = new Date ().getTime ();
+
+ dx /= dt;
+ dy /= dt;
+
+ this.flyTo (this.x + dx * 250, this.y + dy * 250, this.zoom);
+ }
+ }
+ }
+ },
+
+ /**
+ * Mouse double-click handler. Pans to the clicked point and
+ * zooms in half a zoom level (approx 40%).
+ * @private
+ */
+ mouseDoubleClick : function (event) {
+ var eventData = this.createImageEventData ({
+ type : "dblclick",
+ clientX : event.clientX,
+ clientY : event.clientY
+ });
+ this.fireEvent ("dblclick", eventData);
+ if (!eventData.defaultPrevented) {
+ this.flyTo (eventData.imageX, eventData.imageY, this.zoom + 0.5);
+ }
+ },
+
+ /**
+ * Returns the current zoom level.
+ *
+ * @public
+ * @type number
+ */
+ getZoom : function () {
+ return this.zoom;
+ },
+
+ /**
+ * Stops any current flyTo operation and sets the current position.
+ *
+ * @param [x] the new x-coordinate
+ * @param [y] the new y-coordinate
+ * @param [zoom] the new zoom level
+ * @param [updateViewport=true] updates the viewport
+ * @public
+ */
+ moveTo : function (x, y, zoom, updateViewport) {
+ this.stopFlying ();
+
+ if (x != null || y != null) {
+ this.setPosition (x, y, false);
+ }
+ if (zoom != null) {
+ this.setZoom (zoom, false);
+ }
+ if (updateViewport == undefined || updateViewport == true) {
+ this.layout ();
+ }
+ },
+
+ /**
+ * Sets the current position.
+ *
+ * @param [x] the new x-coordinate
+ * @param [y] the new y-coordinate
+ * @param [updateViewport=true] if the viewport should be updated
+ * @private
+ */
+ setPosition : function (x, y, updateViewport) {
+ var clamped = this.clampXY (x, y);
+
+ if (x != null) {
+ if (this.parameters.wrapX) {
+ if (x < 0 || x >= this.width) {
+ x = (x + this.width) % this.width;
+ }
+ } else {
+ x = clamped.x;
+ }
+ this.x = Math.max (0, Math.min (this.width, x));
+ }
+
+ if (y != null) {
+ if (this.parameters.wrapY) {
+ if (y < 0 || y >= this.height) {
+ y = (y + this.height) % this.height;
+ }
+ } else {
+ y = clamped.y;
+ }
+ this.y = Math.max (0, Math.min (this.height, y));
+ }
+
+ if (updateViewport != false) {
+ this.layout ();
+ }
+ },
+
+ /**
+ * Helper function for calculating zoom levels.
+ *
+ * @public
+ * @returns the zoom level at which the given number of full-image pixels
+ * occupy the given number of screen pixels.
+ * @param {number} imageDimension the image dimension in full-image pixels
+ * @param {number} containerDimension the container dimension in screen pixels
+ * @type number
+ */
+ fitZoom : function (imageDimension, containerDimension) {
+ var scale = containerDimension / imageDimension;
+ return Math.log (scale) / Math.LN2;
+ },
+
+ /**
+ * Returns the maximum zoom level at which the full image
+ * is visible in the viewport.
+ * @public
+ * @type number
+ */
+ getZoomToFitValue : function () {
+ return Math.min (
+ this.fitZoom (this.parameters.width, this.container.clientWidth),
+ this.fitZoom (this.parameters.height, this.container.clientHeight));
+ },
+
+ /**
+ * Returns the zoom level at which the image fills the whole
+ * viewport.
+ * @public
+ * @type number
+ */
+ getZoomToFillValue : function () {
+ return Math.max (
+ this.fitZoom (this.parameters.width, this.container.clientWidth),
+ this.fitZoom (this.parameters.height, this.container.clientHeight));
+ },
+
+ /**
+ * Adjust the zoom level to fit the image in the viewport.
+ * @public
+ */
+ zoomToFit : function () {
+ this.moveTo (null, null, this.getZoomToFitValue ());
+ },
+
+ /**
+ * Adjust the zoom level to fit the image in the viewport.
+ * @public
+ */
+ zoomToFill : function () {
+ this.moveTo (null, null, this.getZoomToFillValue ());
+ },
+
+ /**
+ * Adjust the zoom level to fit the
+ * image height in the viewport.
+ * @public
+ */
+ zoomToFitHeight : function () {
+ this.moveTo (null, null, this.fitZoom (this.parameters.height, this.container.clientHeight));
+ },
+
+ /**
+ * Adjust the zoom level to fit the
+ * image width in the viewport.
+ * @public
+ */
+ zoomToFitWidth : function () {
+ this.moveTo (null, null, this.fitZoom (this.parameters.width, this.container.clientWidth));
+ },
+
+ /**
+ * Smoothly adjust the zoom level to fit the
+ * image height in the viewport.
+ * @public
+ */
+ flyZoomToFitHeight : function () {
+ this.flyTo (null, this.parameters.height / 2, this.fitZoom (this.parameters.height, this.container.clientHeight));
+ },
+
+ /**
+ * Smoothly adjust the zoom level to fit the
+ * image width in the viewport.
+ * @public
+ */
+ flyZoomToFitWidth : function () {
+ this.flyTo (this.parameters.width / 2, null, this.fitZoom (this.parameters.width, this.container.clientWidth));
+ },
+
+ /**
+ * Smoothly adjust the zoom level to fit the
+ * full image in the viewport.
+ * @public
+ */
+ flyZoomToFit : function () {
+ this.flyTo (this.parameters.width / 2, this.parameters.height / 2, this.getZoomToFitValue ());
+ },
+
+ /**
+ * Converts client-relative screen coordinates to image coordinates.
+ *
+ * @param {number} clientX the client x-coordinate
+ * @param {number} clientY the client y-coordinate
+ *
+ * @returns {number} .x the image x-coordinate
+ * @returns {number} .y the image y-coordinate
+ * @type Object
+ */
+ clientToImage : function (clientX, clientY) {
+ var zoomFactor = Math.pow (2, this.zoom);
+ return {
+ x : (clientX - this.container.clientWidth / 2) / zoomFactor + this.x,
+ y : (clientY - this.container.clientHeight / 2) / zoomFactor + this.y
+ };
+ },
+
+ /**
+ * Handles mouse wheel actions.
+ * @private
+ */
+ mouseWheelHandler : function (delta, event) {
+ var zoomDelta = false;
+ if (delta > 0) {
+ zoomDelta = 0.5;
+ } else if (delta < 0) {
+ zoomDelta = -0.5;
+ }
+
+ if (zoomDelta) {
+ var centerOfZoom = this.clientToImage (event.clientX, event.clientY);
+ var newZoom = Math.min (this.maxZoom, Math.max (this.getZoom () + zoomDelta, this.minZoom));
+
+ var nx = this.adjustCoordinateForZoom (this.x, centerOfZoom.x, this.getZoom (), newZoom);
+ var ny = this.adjustCoordinateForZoom (this.y, centerOfZoom.y, this.getZoom (), newZoom);
+
+ this.flyTo (nx, ny, newZoom, true);
+ }
+ },
+
+ /**
+ * Translates mouse wheel events.
+ * @private
+ */
+ mouseWheel : function (event){
+ var delta = 0;
+ if (!event) /* For IE. */
+ event = window.event;
+ if (event.wheelDelta) { /* IE/Opera. */
+ delta = event.wheelDelta / 120;
+ /*
+ * In Opera 9, delta differs in sign as compared to IE.
+ */
+ if (window.opera)
+ delta = -delta;
+ } else if (event.detail) { /* Mozilla case. */
+ /*
+ * In Mozilla, sign of delta is different than in IE.
+ * Also, delta is multiple of 3.
+ */
+ delta = -event.detail;
+ }
+
+ /*
+ * If delta is nonzero, handle it.
+ * Basically, delta is now positive if wheel was scrolled up,
+ * and negative, if wheel was scrolled down.
+ */
+ if (delta) {
+ this.mouseWheelHandler (delta, event);
+ }
+
+ /*
+ * Prevent default actions caused by mouse wheel.
+ * That might be ugly, but we handle scrolls somehow
+ * anyway, so don't bother here..
+ */
+ if (event.preventDefault) {
+ event.preventDefault ();
+ }
+ event.returnValue = false;
+ },
+
+ /**
+ * Triggers a right-sizing of all layers.
+ * Called on window resize via the {@link bigshot.ImageBase#onresizeHandler} stub.
+ * @public
+ */
+ onresize : function () {
+ this.resize ();
+ this.layout ();
+ },
+
+ /**
+ * Returns the current x-coordinate, which is the full-image x coordinate
+ * in the center of the viewport.
+ * @public
+ * @type number
+ */
+ getX : function () {
+ return this.x;
+ },
+
+ /**
+ * Returns the current y-coordinate, which is the full-image x coordinate
+ * in the center of the viewport.
+ * @public
+ * @type number
+ */
+ getY : function () {
+ return this.y;
+ },
+
+ /**
+ * Interrupts the current {@link #flyTo}, if one is active.
+ * @public
+ */
+ stopFlying : function () {
+ this.flying++;
+ },
+
+ /**
+ * Smoothly flies to the specified position.
+ *
+ * @public
+ * @param {number} [x=current x] the new x-coordinate
+ * @param {number} [y=current y] the new y-coordinate
+ * @param {number} [zoom=current zoom] the new zoom level
+ * @param {boolean} [uniformApproach=false] if true, uses the same interpolation curve for x, y and zoom.
+ */
+ flyTo : function (x, y, zoom, uniformApproach) {
+ var that = this;
+
+ x = x != null ? x : this.x;
+ y = y != null ? y : this.y;
+ zoom = zoom != null ? zoom : this.zoom;
+ uniformApproach = uniformApproach != null ? uniformApproach : false;
+
+ var startX = this.x;
+ var startY = this.y;
+ var startZoom = this.zoom;
+
+ var clamped = this.clampXY (x, y);
+ var targetX = this.parameters.wrapX ? x : clamped.x;
+ var targetY = this.parameters.wrapY ? y : clamped.y;
+ var targetZoom = Math.min (this.maxZoom, Math.max (zoom, this.minZoom));
+
+ this.flying++;
+ var flyingAtStart = this.flying;
+
+ var t0 = new Date ().getTime ();
+
+ var approach = function (start, target, dt, step, linear) {
+ var delta = (target - start);
+
+ var diff = - delta * Math.pow (2, -dt * step);
+
+ var lin = dt * linear;
+ if (delta < 0) {
+ diff = Math.max (0, diff - lin);
+ } else {
+ diff = Math.min (0, diff + lin);
+ }
+
+ return target + diff;
+ };
+
+
+ var iter = function () {
+ if (that.flying == flyingAtStart) {
+ var dt = (new Date ().getTime () - t0) / 1000;
+
+ var nx = approach (startX, targetX, dt, uniformApproach ? 10 : 4, uniformApproach ? 0.2 : 1.0);
+ var ny = approach (startY, targetY, dt, uniformApproach ? 10 : 4, uniformApproach ? 0.2 : 1.0);
+ var nz = approach (startZoom, targetZoom, dt, 10, 0.2);
+ var done = true;
+
+ var zoomFactor = Math.min (Math.pow (2, that.getZoom ()), 1);
+
+ if (Math.abs (nx - targetX) < (0.5 * zoomFactor)) {
+ nx = targetX;
+ } else {
+ done = false;
+ }
+ if (Math.abs (ny - targetY) < (0.5 * zoomFactor)) {
+ ny = targetY;
+ } else {
+ done = false;
+ }
+ if (Math.abs (nz - targetZoom) < 0.02) {
+ nz = targetZoom;
+ } else {
+ done = false;
+ }
+ that.setPosition (nx, ny, false);
+ that.setZoom (nz, false);
+ that.layout ();
+ if (!done) {
+ that.browser.requestAnimationFrame (iter, that.container);
+ }
+ };
+ }
+ this.browser.requestAnimationFrame (iter, this.container);
+ },
+
+ /**
+ * Returns the maximum zoom level at which a rectangle with the given dimensions
+ * fit into the viewport.
+ *
+ * @public
+ * @param {number} w the width of the rectangle, given in full-image pixels
+ * @param {number} h the height of the rectangle, given in full-image pixels
+ * @type number
+ * @returns the zoom level that will precisely fit the given rectangle
+ */
+ rectVisibleAtZoomLevel : function (w, h) {
+ return Math.min (
+ this.fitZoom (w, this.container.clientWidth),
+ this.fitZoom (h, this.container.clientHeight));
+ },
+
+ /**
+ * Returns the base size in screen pixels of the two zoom touch areas.
+ * The zoom out border will be getTouchAreaBaseSize() pixels wide,
+ * and the center zoom in hotspot will be 2*getTouchAreaBaseSize() pixels wide
+ * and tall.
+ * @deprecated
+ * @type number
+ * @public
+ */
+ getTouchAreaBaseSize : function () {
+ var averageSize = ((this.container.clientWidth + this.container.clientHeight) / 2) * 0.2;
+ return Math.min (averageSize, Math.min (this.container.clientWidth, this.container.clientHeight) / 6);
+ },
+
+ /**
+ * Creates a new {@link bigshot.ImageEvent} using the supplied data object,
+ * transforming the client x- and y-coordinates to local and image coordinates.
+ * The returned event object will have the {@link bigshot.ImageEvent#localX},
+ * {@link bigshot.ImageEvent#localY}, {@link bigshot.ImageEvent#imageX},
+ * {@link bigshot.ImageEvent#imageY}, {@link bigshot.Event#target} and
+ * {@link bigshot.Event#currentTarget} fields set.
+ *
+ * @param {Object} data data object with initial values for the event object
+ * @param {number} data.clientX the clientX of the event
+ * @param {number} data.clientY the clientY of the event
+ * @returns the new event object
+ * @type bigshot.ImageEvent
+ */
+ createImageEventData : function (data) {
+ var elementPos = this.browser.getElementPosition (this.container);
+ data.localX = data.clientX - elementPos.x;
+ data.localY = data.clientY - elementPos.y;
+
+ var scale = Math.pow (2, this.zoom);
+
+ data.imageX = (data.localX - this.container.clientWidth / 2) / scale + this.x;
+ data.imageY = (data.localY - this.container.clientHeight / 2) / scale + this.y;
+
+ data.target = this;
+ data.currentTarget = this;
+
+ return new bigshot.ImageEvent (data);
+ },
+
+ /**
+ * Handles mouse click events. If the touch UI is active,
+ * we'll pan and/or zoom, as appropriate. If not, we just ignore
+ * the event.
+ * @private
+ */
+ mouseClick : function (event) {
+ var eventData = this.createImageEventData ({
+ type : "click",
+ clientX : event.clientX,
+ clientY : event.clientY
+ });
+ this.fireEvent ("click", eventData);
+ /*
+ if (!eventData.defaultPrevented) {
+ if (!this.parameters.touchUI) {
+ return;
+ }
+ if (this.dragged) {
+ return;
+ }
+
+ var zoomOutBorderSize = this.getTouchAreaBaseSize ();
+ var zoomInHotspotSize = this.getTouchAreaBaseSize ();
+
+ if (Math.abs (clickPos.x) > (this.container.clientWidth / 2 - zoomOutBorderSize) || Math.abs (clickPos.y) > (this.container.clientHeight / 2 - zoomOutBorderSize)) {
+ this.flyTo (this.x, this.y, this.zoom - 0.5);
+ } else {
+ var newZoom = this.zoom;
+ if (Math.abs (clickPos.x) < zoomInHotspotSize && Math.abs (clickPos.y) < zoomInHotspotSize) {
+ newZoom += 0.5;
+ }
+ var scale = Math.pow (2, this.zoom);
+ clickPos.x /= scale;
+ clickPos.y /= scale;
+ this.flyTo (this.x + clickPos.x, this.y + clickPos.y, newZoom);
+ }
+ }
+ */
+ },
+
+ /**
+ * Briefly shows the touch ui zones. See the {@link bigshot.ImageParameters#touchUI}
+ * documentation for an explanation of the touch ui.
+ *
+ * @public
+ * @deprecated All common touch gestures are supported by default.
+ * @see bigshot.ImageParameters#touchUI
+ * @param {int} [delay] milliseconds before fading out
+ * @param {int} [fadeOut] milliseconds to fade out the zone overlays in
+ */
+ showTouchUI : function (delay, fadeOut) {
+ if (!delay) {
+ delay = 2500;
+ }
+ if (!fadeOut) {
+ fadeOut = 1000;
+ }
+
+ var zoomOutBorderSize = this.getTouchAreaBaseSize ();
+ var zoomInHotspotSize = this.getTouchAreaBaseSize ();
+ var centerX = this.container.clientWidth / 2;
+ var centerY = this.container.clientHeight / 2;
+
+ var frameDiv = document.createElement ("div");
+ frameDiv.style.position = "absolute";
+ frameDiv.style.zIndex = "9999";
+ frameDiv.style.opacity = 0.9;
+ frameDiv.style.width = this.container.clientWidth + "px";
+ frameDiv.style.height = this.container.clientHeight + "px";
+
+ var centerSpotAnchor = document.createElement ("div");
+ centerSpotAnchor.style.position = "absolute";
+
+ var centerSpot = document.createElement ("div");
+ centerSpot.style.position = "relative";
+ centerSpot.style.background = "black";
+ centerSpot.style.textAlign = "center";
+ centerSpot.style.top = (centerY - zoomInHotspotSize) + "px";
+ centerSpot.style.left = (centerX - zoomInHotspotSize) + "px";
+ centerSpot.style.width = (2 * zoomInHotspotSize) + "px";
+ centerSpot.style.height = (2 * zoomInHotspotSize) + "px";
+
+ frameDiv.appendChild (centerSpotAnchor);
+ centerSpotAnchor.appendChild (centerSpot);
+ centerSpot.innerHTML = "<span style='display:inline-box; position:relative; vertical-align:middle; font-size: 20pt; top: 10pt; color:white'>ZOOM IN</span>";
+
+ var zoomOutBorderAnchor = document.createElement ("div");
+ zoomOutBorderAnchor.style.position = "absolute";
+
+ var zoomOutBorder = document.createElement ("div");
+ zoomOutBorder.style.position = "relative";
+ zoomOutBorder.style.border = zoomOutBorderSize + "px solid black";
+ zoomOutBorder.style.top = "0px";
+ zoomOutBorder.style.left = "0px";
+ zoomOutBorder.style.textAlign = "center";
+ zoomOutBorder.style.width = this.container.clientWidth + "px";
+ zoomOutBorder.style.height = this.container.clientHeight + "px";
+ zoomOutBorder.style.MozBoxSizing =
+ zoomOutBorder.style.boxSizing =
+ zoomOutBorder.style.WebkitBoxSizing =
+ "border-box";
+
+ zoomOutBorder.innerHTML = "<span style='position:relative; font-size: 20pt; top: -25pt; color:white'>ZOOM OUT</span>";
+
+ zoomOutBorderAnchor.appendChild (zoomOutBorder);
+ frameDiv.appendChild (zoomOutBorderAnchor);
+
+ this.container.appendChild (frameDiv);
+
+ var that = this;
+ var opacity = 0.9;
+ var fadeOutSteps = fadeOut / 50;
+ if (fadeOutSteps < 1) {
+ fadeOutSteps = 1;
+ }
+ var iter = function () {
+ opacity = opacity - (0.9 / fadeOutSteps);
+ if (opacity < 0.0) {
+ that.container.removeChild (frameDiv);
+ } else {
+ frameDiv.style.opacity = opacity;
+ setTimeout (iter, 50);
+ }
+ };
+ setTimeout (iter, delay);
+ },
+
+ /**
+ * Forces exit from full screen mode, if we're there.
+ * @public
+ */
+ exitFullScreen : function () {
+ if (this.fullScreenHandler) {
+ this.removeEventListeners ();
+ this.fullScreenHandler.close ();
+ this.addEventListeners ();
+ this.fullScreenHandler = null;
+ return;
+ }
+ },
+
+ /**
+ * Maximizes the image to cover the browser viewport.
+ * The container div is removed from its parent node upon entering
+ * full screen mode. When leaving full screen mode, the container
+ * is appended to its old parent node. To avoid rearranging the
+ * nodes, wrap the container in an extra div.
+ *
+ * <p>For unknown reasons (probably security), browsers will
+ * not let you open a window that covers the entire screen.
+ * Even when specifying "fullscreen=yes", all you get is a window
+ * that has a title bar and only covers the desktop (not any task
+ * bars or the like). For now, this is the best that I can do,
+ * but should the situation change I'll update this to be
+ * full-screen<i>-ier</i>.
+ * @public
+ */
+ fullScreen : function (onClose) {
+ if (this.fullScreenHandler) {
+ return;
+ }
+
+ var message = document.createElement ("div");
+ message.style.position = "absolute";
+ message.style.fontSize = "16pt";
+ message.style.top = "128px";
+ message.style.width = "100%";
+ message.style.color = "white";
+ message.style.padding = "16px";
+ message.style.zIndex = "9999";
+ message.style.textAlign = "center";
+ message.style.opacity = "0.75";
+ message.innerHTML = "<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";
+
+ var that = this;
+
+ this.fullScreenHandler = new bigshot.FullScreen (this.container);
+ this.fullScreenHandler.restoreSize = true;
+
+ this.fullScreenHandler.addOnResize (function () {
+ if (that.fullScreenHandler && that.fullScreenHandler.isFullScreen) {
+ that.container.style.width = window.innerWidth + "px";
+ that.container.style.height = window.innerHeight + "px";
+ }
+ that.onresize ();
+ });
+
+ this.fullScreenHandler.addOnClose (function () {
+ if (message.parentNode) {
+ try {
+ div.removeChild (message);
+ } catch (x) {
+ }
+ }
+ that.fullScreenHandler = null;
+ });
+
+ if (onClose) {
+ this.fullScreenHandler.addOnClose (function () {
+ onClose ();
+ });
+ }
+
+ this.removeEventListeners ();
+ this.fullScreenHandler.open ();
+ this.addEventListeners ();
+ if (this.fullScreenHandler.getRootElement ()) {
+ this.fullScreenHandler.getRootElement ().appendChild (message);
+
+ setTimeout (function () {
+ var opacity = 0.75;
+ var iter = function () {
+ opacity -= 0.02;
+ if (message.parentNode) {
+ if (opacity <= 0) {
+ try {
+ div.removeChild (message);
+ } catch (x) {}
+ } else {
+ message.style.opacity = opacity;
+ setTimeout (iter, 20);
+ }
+ }
+ };
+ setTimeout (iter, 20);
+ }, 3500);
+ }
+
+ return function () {
+ that.fullScreenHandler.close ();
+ };
+ },
+
+ /**
+ * Unregisters event handlers and other page-level hooks. The client need not call this
+ * method unless bigshot images are created and removed from the page
+ * dynamically. In that case, this method must be called when the client wishes to
+ * free the resources allocated by the image. Otherwise the browser will garbage-collect
+ * all resources automatically.
+ * @public
+ */
+ dispose : function () {
+ this.browser.unregisterListener (window, "resize", this.onresizeHandler, false);
+ this.removeEventListeners ();
+ }
+};
+
+/**
+ * Fired when the user double-clicks on the image
+ *
+ * @name bigshot.ImageBase#dblclick
+ * @event
+ * @param {bigshot.ImageEvent} event the event object
+ */
+
+/**
+ * Fired when the user clicks on (but does not drag) the image
+ *
+ * @name bigshot.ImageBase#click
+ * @event
+ * @param {bigshot.ImageEvent} event the event object
+ */
+
+bigshot.Object.extend (bigshot.ImageBase, bigshot.EventDispatcher);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Creates a new tiled image viewer. (Note: See {@link bigshot.ImageBase#dispose} for important information.)
+ *
+ * @example
+ * var bsi = new bigshot.Image (
+ * new bigshot.ImageParameters ({
+ * basePath : "/bigshot.php?file=myshot.bigshot",
+ * fileSystemType : "archive",
+ * container : document.getElementById ("bigshot_div")
+ * }));
+ *
+ * @param {bigshot.ImageParameters} parameters the image parameters. Required fields are: <code>basePath</code> and <code>container</code>.
+ * If you intend to use the archive filesystem, you need to set the <code>fileSystemType</code> to <code>"archive"</code>
+ * as well.
+ * @see bigshot.ImageBase#dispose
+ * @class A tiled, zoomable image viewer.
+ *
+ * <h3 id="creating-a-wrapping-image">Creating a Wrapping Image</h3>
+ *
+ * <p>If you have set the wrapX or wrapY parameters in the {@link bigshot.ImageParameters}, the
+ * image must be an integer multiple of the tile size at the desired minimum zoom level, otherwise
+ * there will be a gap at the wrap point:
+ *
+ * <p>The way to figure out the proper input size is this:
+ *
+ * <ol>
+ * <li><p>Decide on a tile size and call this <i>tileSize</i>.</p></li>
+ * <li><p>Decide on a minimum integer zoom level, and call this <i>minZoom</i>.</p></li>
+ * <li><p>Compute <i>tileSize * 2<sup>-minZoom</sup></i>, call this <i>S</i>.</p></li>
+ * <li><p>The source image size along the wrapped axis must be evenly divisible by <i>S</i>.</p></li>
+ * </ol>
+ *
+ * <p>An example:</p>
+ *
+ * <ol>
+ * <li><p>I have an image that is 23148x3242 pixels.</p></li>
+ * <li><p>I chose 256x256 pixel tiles: <i>tileSize = 256</i>.</p></li>
+ * <li><p>When displaying the image, I want the user to be able to zoom out so that the
+ * whole image is less than or equal to 600 pixels tall. Since the image is 3242 pixels
+ * tall originally, I will need a <i>minZoom</i> of -3. A <i>minZoom</i> of -2 would only let me
+ * zoom out to 1/4 (2<sup>-2</sup>), or an image that is 810 pixels tall. A <i>minZoom</i> of -3, however lets me
+ * zoom out to 1/8 (2<sup>-3</sup>), or an image that is 405 pixels tall. Thus: <i>minZoom = -3</i></p></li>
+ * <li><p>Computing <i>S</i> gives: <i>S = 256 * 2<sup>3</sup> = 256 * 8 = 2048</i></p></li>
+ * <li><p>I want it to wrap along the X axis. Therefore I may have to adjust the width,
+ * currently 23148 pixels.</p></li>
+ * <li><p>Rounding 23148 down to the nearest multiple of 2048 gives 22528. (23148 divided by 2048 is 11.3, and 11 times 2048 is 22528.)</p></li>
+ * <li><p>I will shrink my source image to be 22528 pixels wide before building the image pyramid,
+ * and I will set the <code>minZoom</code> parameter to -3 in the {@link bigshot.ImageParameters} when creating
+ * the image. (I will also set <code>wrapX</code> to <code>true</code>.)</p></li>
+ * </ol>
+ *
+ * @augments bigshot.ImageBase
+ */
+bigshot.Image = function (parameters) {
+ bigshot.setupFileSystem (parameters);
+ parameters.merge (parameters.fileSystem.getDescriptor (), false);
+
+ bigshot.ImageBase.call (this, parameters);
+}
+
+bigshot.Image.prototype = {
+ setupLayers : function () {
+ var that = this;
+ this.thisTileCache = new bigshot.ImageTileCache (function () {
+ that.layout ();
+ }, null, this.parameters);
+
+ this.addLayer (
+ new bigshot.TileLayer (this, this.parameters, 0, 0, this.thisTileCache)
+ );
+ }
+};
+
+bigshot.Object.extend (bigshot.Image, bigshot.ImageBase);
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new HTML element layer. The layer must be added to the image using
+ * {@link bigshot.ImageBase#addLayer}.
+ *
+ * @class A layer consisting of a single HTML element that is moved and scaled to cover
+ * the layer.
+ * @example
+ * var image = new bigshot.Image (...);
+ * image.addLayer (
+ * new bigshot.HTMLElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height)
+ * );
+ * @param {bigshot.ImageBase} image the image this hotspot layer will be part of
+ * @param {HTMLElement} element the element to present in this layer
+ * @param {int} width the width, in image pixels (display size at zoom level 0), of the HTML element
+ * @param {int} height the height, in image pixels (display size at zoom level 0), of the HTML element
+ * @augments bigshot.Layer
+ */
+bigshot.HTMLElementLayer = function (image, element, width, height) {
+ this.hotspots = new Array ();
+ this.browser = new bigshot.Browser ();
+ this.image = image;
+ this.container = image.createLayerContainer ();
+ this.parentContainer = image.getContainer ();
+ this.element = element;
+ this.parentContainer.appendChild (element);
+ this.w = width;
+ this.h = height;
+ this.resize (0, 0);
+}
+
+bigshot.HTMLElementLayer.prototype = {
+
+ getContainer : function () {
+ return this.container;
+ },
+
+ resize : function (w, h) {
+ this.container.style.width = this.parentContainer.clientWidth + "px";
+ this.container.style.height = this.parentContainer.clientHeight + "px";
+ },
+
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {
+ var zoomFactor = Math.pow (2, this.image.getZoom ());
+ x0 -= stride * tx0;
+ y0 -= stride * ty0;
+
+ this.element.style.top = y0 + "px";
+ this.element.style.left = x0 + "px";
+ this.element.style.width = (this.w * zoomFactor) + "px";
+ this.element.style.height = (this.h * zoomFactor) + "px";
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ }
+}
+
+bigshot.Object.validate ("bigshot.HTMLElementLayer", bigshot.Layer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new HTML element layer. The layer must be added to the image using
+ * {@link bigshot.ImageBase#addLayer}.
+ *
+ * @class A layer consisting of a single HTML element that is moved and scaled to cover
+ * the layer.
+ * @example
+ * var image = new bigshot.Image (...);
+ * image.addLayer (
+ * new bigshot.HTMLElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height)
+ * );
+ * @param {bigshot.ImageBase} image the image this hotspot layer will be part of
+ * @param {HTMLElement} element the element to present in this layer
+ * @param {int} width the width, in image pixels (display size at zoom level 0), of the HTML element
+ * @param {int} height the height, in image pixels (display size at zoom level 0), of the HTML element
+ * @augments bigshot.Layer
+ */
+bigshot.HTMLDivElementLayer = function (image, element, width, height, wrapX, wrapY) {
+ this.wrapX = wrapX;
+ this.wrapY = wrapY;
+ this.hotspots = new Array ();
+ this.browser = new bigshot.Browser ();
+ this.image = image;
+ this.container = image.createLayerContainer ();
+ this.parentContainer = image.getContainer ();
+ this.element = element;
+ this.parentContainer.appendChild (element);
+ this.w = width;
+ this.h = height;
+ this.resize (0, 0);
+}
+
+bigshot.HTMLDivElementLayer.prototype = {
+
+ getContainer : function () {
+ return this.container;
+ },
+
+ resize : function (w, h) {
+ this.container.style.width = this.parentContainer.clientWidth + "px";
+ this.container.style.height = this.parentContainer.clientHeight + "px";
+ },
+
+ layout : function (zoom, x0, y0, tx0, ty0, size, stride, opacity) {
+ var zoomFactor = Math.pow (2, this.image.getZoom ());
+ x0 -= stride * tx0;
+ y0 -= stride * ty0;
+
+ var imW = (this.w * zoomFactor);
+ var imH = (this.h * zoomFactor);
+
+ this.element.style.backgroundSize = imW + "px " + imH + "px";
+
+ var bposX = "0px";
+ var bposY = "0px";
+
+ if (this.wrapY) {
+ this.element.style.top = "0px";
+ this.element.style.height = (this.parentContainer.clientHeight) + "px";
+ bposY = y0 + "px";
+ } else {
+ this.element.style.top = y0 + "px";
+ this.element.style.height = imH + "px";
+ }
+
+ if (this.wrapX) {
+ this.element.style.left = "0px";
+ this.element.style.width = (this.parentContainer.clientWidth) + "px";
+ bposX = x0 + "px";
+ } else {
+ this.element.style.left = x0 + "px";
+ this.element.style.width = imW + "px";
+ }
+
+ this.element.style.backgroundPosition = bposX + " " + bposY;
+ },
+
+ setMaxTiles : function (mtx, mty) {
+ }
+}
+
+bigshot.Object.validate ("bigshot.HTMLDivElementLayer", bigshot.Layer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Creates a new image viewer. (Note: See {@link bigshot.SimpleImage#dispose} for important information.)
+ *
+ * @example
+ * var bsi = new bigshot.SimpleImage (
+ * new bigshot.ImageParameters ({
+ * basePath : "myimage.jpg",
+ * width : 681,
+ * height : 1024,
+ * container : document.getElementById ("bigshot_div")
+ * }));
+ *
+ * @param {bigshot.ImageParameters} parameters the image parameters. Required fields are: <code>container</code>.
+ * If the <code>imgElement</code> parameter is not given, then <code>basePath</code>, <code>width</code> and <code>height</code> are also required. The
+ * following parameters are not supported and should be left as defaults: <code>fileSystem</code>, <code>fileSystemType</code>,
+ * <code>maxTextureMagnification</code> and <code>tileSize</code>. <code>wrapX</code> and <code>wrapY</code> may only be used if the imgElement is <b>not</b>
+ * set.
+ *
+ * @param {HTMLImageElement} [imgElement] an img element to use. The element should have <code>style.position = "absolute"</code>.
+ * @see bigshot.ImageBase#dispose
+ * @class A zoomable image viewer.
+ * @augments bigshot.ImageBase
+ */
+bigshot.SimpleImage = function (parameters, imgElement) {
+ parameters.merge ({
+ fileSystem : null,
+ fileSystemType : "simple",
+ maxTextureMagnification : 1.0,
+ tileSize : 1024
+ }, true);
+
+ if (imgElement) {
+ parameters.merge ({
+ width : imgElement.width,
+ height : imgElement.height
+ });
+ this.imgElement = imgElement;
+ } else {
+ if (parameters.width == 0 || parameters.height == 0) {
+ throw new Error ("No imgElement and missing width or height in ImageParameters");
+ }
+ }
+ bigshot.setupFileSystem (parameters);
+
+ bigshot.ImageBase.call (this, parameters);
+}
+
+bigshot.SimpleImage.prototype = {
+ setupLayers : function () {
+ if (!this.imgElement) {
+ /*
+ this.imgElement = document.createElement ("img");
+ this.imgElement.src = this.parameters.basePath;
+ this.imgElement.style.position = "absolute";
+ */
+ this.imgElement = document.createElement ("div");
+ this.imgElement.style.backgroundImage = "url('" + this.parameters.basePath + "')";
+ this.imgElement.style.position = "absolute";
+ if (!this.parameters.wrapX && !this.parameters.wrapY) {
+ this.imgElement.style.backgroundRepeat = "no-repeat";
+ } else if (this.parameters.wrapX && !this.parameters.wrapY) {
+ this.imgElement.style.backgroundRepeat = "repeat-x";
+ } else if (!this.parameters.wrapX && this.parameters.wrapY) {
+ this.imgElement.style.backgroundRepeat = "repeat-y";
+ } else if (this.parameters.wrapX && this.parameters.wrapY) {
+ this.imgElement.style.backgroundRepeat = "repeat";
+ }
+ }
+
+ this.addLayer (
+ new bigshot.HTMLDivElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height, this.parameters.wrapX, this.parameters.wrapY)
+ );
+ }
+};
+
+bigshot.Object.extend (bigshot.SimpleImage, bigshot.ImageBase);
+
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Abstract filesystem definition.
+ *
+ * @class Abstract filesystem definition.
+ */
+bigshot.FileSystem = function () {
+}
+
+bigshot.FileSystem.prototype = {
+ /**
+ * Returns the URL filename for the given filesystem entry.
+ *
+ * @param {String} name the entry name
+ */
+ getFilename : function (name) {},
+
+ /**
+ * Returns the entry filename for the given tile.
+ *
+ * @param {int} tileX the column of the tile
+ * @param {int} tileY the row of the tile
+ * @param {int} zoomLevel the zoom level
+ */
+ getImageFilename : function (tileX, tileY, zoomLevel) {},
+
+ /**
+ * Sets an optional prefix that is prepended, along with a forward
+ * slash ("/"), to all names.
+ *
+ * @param {String} prefix the prefix
+ */
+ setPrefix : function (prefix) {},
+
+ /**
+ * Returns an image descriptor object from the descriptor file.
+ *
+ * @return a descriptor object
+ */
+ getDescriptor : function () {},
+
+ /**
+ * Returns the poster URL filename. For Bigshot images this is
+ * typically the URL corresponding to the entry "poster.jpg",
+ * but for other filesystems it can be different.
+ */
+ getPosterFilename : function () {}
+};
+
+/**
+ * Sets up a filesystem instance in the given parameters object, if none exist.
+ * If the {@link bigshot.ImageParameters#fileSystem} member isn't set, the
+ * {@link bigshot.ImageParameters#fileSystemType} member is used to create a new
+ * {@link bigshot.FileSystem} instance and set it.
+ *
+ * @param {bigshot.ImageParameters or bigshot.VRPanoramaParameters or bigshot.ImageCarouselPanoramaParameters} parameters the parameters object to populate
+ */
+bigshot.setupFileSystem = function (parameters) {
+ if (!parameters.fileSystem) {
+ if (parameters.fileSystemType == "archive") {
+ parameters.fileSystem = new bigshot.ArchiveFileSystem (parameters);
+ } else if (parameters.fileSystemType == "dzi") {
+ parameters.fileSystem = new bigshot.DeepZoomImageFileSystem (parameters);
+ } else if (parameters.fileSystemType == "simple") {
+ parameters.fileSystem = new bigshot.SimpleFileSystem (parameters);
+ } else {
+ parameters.fileSystem = new bigshot.FolderFileSystem (parameters);
+ }
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new instance of a filesystem adapter for the SimpleImage class.
+ *
+ * @class Filesystem adapter for bigshot.SimpleImage. This class is not
+ * supposed to be used outside of the {@link bigshot.SimpleImage} class.
+ * @param {bigshot.ImageParameters} parameters the associated image parameters
+ * @augments bigshot.FileSystem
+ * @see bigshot.SimpleImage
+ */
+bigshot.SimpleFileSystem = function (parameters) {
+ this.parameters = parameters;
+};
+
+
+bigshot.SimpleFileSystem.prototype = {
+ getDescriptor : function () {
+ return {};
+ },
+
+ getPosterFilename : function () {
+ return null;
+ },
+
+ getFilename : function (name) {
+ return null;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ return null;
+ },
+
+ getPrefix : function () {
+ return "";
+ },
+
+ setPrefix : function (prefix) {
+ this.prefix = prefix;
+ }
+}
+
+bigshot.Object.validate ("bigshot.SimpleFileSystem", bigshot.FileSystem);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new instance of a folder-based filesystem adapter.
+ *
+ * @augments bigshot.FileSystem
+ * @class Folder-based filesystem.
+ * @param {bigshot.ImageParameters|bigshot.VRPanoramaParameters} parameters the associated image parameters
+ * @constructor
+ */
+bigshot.FolderFileSystem = function (parameters) {
+ this.prefix = null;
+ this.suffix = "";
+ this.parameters = parameters;
+}
+
+
+bigshot.FolderFileSystem.prototype = {
+ getDescriptor : function () {
+ this.browser = new bigshot.Browser ();
+ var req = this.browser.createXMLHttpRequest ();
+
+ req.open("GET", this.getFilename ("descriptor"), false);
+ req.send(null);
+ var descriptor = {};
+ if(req.status == 200) {
+ var substrings = req.responseText.split (":");
+ for (var i = 0; i < substrings.length; i += 2) {
+ if (substrings[i] == "suffix") {
+ descriptor[substrings[i]] = substrings[i + 1];
+ } else {
+ descriptor[substrings[i]] = parseInt (substrings[i + 1]);
+ }
+ }
+ this.suffix = descriptor.suffix;
+ return descriptor;
+ } else {
+ throw new Error ("Unable to find descriptor.");
+ }
+ },
+
+ getPosterFilename : function () {
+ return this.getFilename ("poster" + this.suffix);
+ },
+
+ setPrefix : function (prefix) {
+ this.prefix = prefix;
+ },
+
+ getPrefix : function () {
+ if (this.prefix) {
+ return this.prefix + "/";
+ } else {
+ return "";
+ }
+ },
+
+ getFilename : function (name) {
+ return this.parameters.basePath + "/" + this.getPrefix () + name;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var key = (-zoomLevel) + "/" + tileX + "_" + tileY + this.suffix;
+ return this.getFilename (key);
+ }
+};
+
+bigshot.Object.validate ("bigshot.FolderFileSystem", bigshot.FileSystem);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new instance of a Deep Zoom Image folder-based filesystem adapter.
+ *
+ * @augments bigshot.FileSystem
+ * @class A Deep Zoom Image filesystem.
+ * @param {bigshot.ImageParameters|bigshot.VRPanoramaParameters} parameters the associated image parameters
+ * @constructor
+ */
+bigshot.DeepZoomImageFileSystem = function (parameters) {
+ this.prefix = "";
+ this.suffix = "";
+
+ this.DZ_NAMESPACE = "http://schemas.microsoft.com/deepzoom/2009";
+ this.fullZoomLevel = 0;
+ this.posterName = "";
+ this.parameters = parameters;
+}
+
+bigshot.DeepZoomImageFileSystem.prototype = {
+ getDescriptor : function () {
+ var descriptor = {};
+
+ var xml = this.parameters.dataLoader.loadXml (this.parameters.basePath + this.prefix + ".xml", false);
+ var image = xml.getElementsByTagName ("Image")[0];
+ var size = xml.getElementsByTagName ("Size")[0];
+ descriptor.width = parseInt (size.getAttribute ("Width"));
+ descriptor.height = parseInt (size.getAttribute ("Height"));
+ descriptor.tileSize = parseInt (image.getAttribute ("TileSize"));
+ descriptor.overlap = parseInt (image.getAttribute ("Overlap"));
+ descriptor.suffix = "." + image.getAttribute ("Format")
+ descriptor.posterSize = descriptor.tileSize;
+
+ this.suffix = descriptor.suffix;
+ this.fullZoomLevel = Math.ceil (Math.log (Math.max (descriptor.width, descriptor.height)) / Math.LN2);
+
+ descriptor.minZoom = -this.fullZoomLevel;
+ var posterZoomLevel = Math.ceil (Math.log (descriptor.tileSize) / Math.LN2);
+ this.posterName = this.getImageFilename (0, 0, posterZoomLevel - this.fullZoomLevel);
+ return descriptor;
+ },
+
+ setPrefix : function (prefix) {
+ this.prefix = prefix;
+ },
+
+ getPosterFilename : function () {
+ return this.posterName;
+ },
+
+ getFilename : function (name) {
+ return this.parameters.basePath + this.prefix + "/" + name;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var dziZoomLevel = this.fullZoomLevel + zoomLevel;
+ var key = dziZoomLevel + "/" + tileX + "_" + tileY + this.suffix;
+ return this.getFilename (key);
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new instance of a <code>.bigshot</code> archive filesystem adapter.
+ *
+ * @class Bigshot archive filesystem.
+ * @param {bigshot.ImageParameters|bigshot.VRPanoramaParameters} parameters the associated image parameters
+ * @augments bigshot.FileSystem
+ * @constructor
+ */
+bigshot.ArchiveFileSystem = function (parameters) {
+ this.indexSize = 0;
+ this.offset = 0;
+ this.index = {};
+ this.prefix = "";
+ this.suffix = "";
+ this.parameters = parameters;
+
+ var browser = new bigshot.Browser ();
+ var req = browser.createXMLHttpRequest ();
+ req.open("GET", this.parameters.basePath + "&start=0&length=24&type=text/plain", false);
+ req.send(null);
+ if(req.status == 200) {
+ if (req.responseText.substring (0, 7) != "BIGSHOT") {
+ alert ("\"" + this.parameters.basePath + "\" is not a valid bigshot file");
+ return;
+ }
+ this.indexSize = parseInt (req.responseText.substring (8), 16);
+ this.offset = this.indexSize + 24;
+
+ req.open("GET", this.parameters.basePath + "&type=text/plain&start=24&length=" + this.indexSize, false);
+ req.send(null);
+ if(req.status == 200) {
+ var substrings = req.responseText.split (":");
+ for (var i = 0; i < substrings.length; i += 3) {
+ this.index[substrings[i]] = {
+ start : parseInt (substrings[i + 1]) + this.offset,
+ length : parseInt (substrings[i + 2])
+ };
+ }
+ } else {
+ alert ("The index of \"" + this.parameters.basePath + "\" could not be loaded: " + req.status);
+ }
+ } else {
+ alert ("The header of \"" + this.parameters.basePath + "\" could not be loaded: " + req.status);
+ }
+};
+
+
+bigshot.ArchiveFileSystem.prototype = {
+ getDescriptor : function () {
+ this.browser = new bigshot.Browser ();
+ var req = this.browser.createXMLHttpRequest ();
+
+ req.open("GET", this.getFilename ("descriptor"), false);
+ req.send(null);
+ var descriptor = {};
+ if(req.status == 200) {
+ var substrings = req.responseText.split (":");
+ for (var i = 0; i < substrings.length; i += 2) {
+ if (substrings[i] == "suffix") {
+ descriptor[substrings[i]] = substrings[i + 1];
+ } else {
+ descriptor[substrings[i]] = parseInt (substrings[i + 1]);
+ }
+ }
+ this.suffix = descriptor.suffix;
+ return descriptor;
+ } else {
+ throw new Error ("Unable to find descriptor.");
+ }
+ },
+
+ getPosterFilename : function () {
+ return this.getFilename ("poster" + this.suffix);
+ },
+
+ getFilename : function (name) {
+ name = this.getPrefix () + name;
+ if (!this.index[name] && console) {
+ console.log ("Can't find " + name);
+ }
+ var f = this.parameters.basePath + "&start=" + this.index[name].start + "&length=" + this.index[name].length;
+ if (name.substring (name.length - 4) == ".jpg") {
+ f = f + "&type=image/jpeg";
+ } else if (name.substring (name.length - 4) == ".png") {
+ f = f + "&type=image/png";
+ } else {
+ f = f + "&type=text/plain";
+ }
+ return f;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var key = (-zoomLevel) + "/" + tileX + "_" + tileY + this.suffix;
+ return this.getFilename (key);
+ },
+
+ getPrefix : function () {
+ if (this.prefix) {
+ return this.prefix + "/";
+ } else {
+ return "";
+ }
+ },
+
+ setPrefix : function (prefix) {
+ this.prefix = prefix;
+ }
+}
+
+bigshot.Object.validate ("bigshot.ArchiveFileSystem", bigshot.FileSystem);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract base class.
+ */
+bigshot.VRTileCache = function () {
+}
+
+bigshot.VRTileCache.prototype = {
+ /**
+ * Returns the texture object for the given tile-x, tile-y and zoom level.
+ * The return type is dependent on the renderer. The WebGL renderer, for example
+ * uses a tile cache that returns WebGL textures, while the CSS3D renderer
+ * returns HTML img or canvas elements.
+ */
+ getTexture : function (tileX, tileY, zoomLevel) {},
+
+ /**
+ * Purges the cache of old entries.
+ *
+ * @type void
+ */
+ purge : function () {},
+
+ /**
+ * Disposes the cache and all its entries.
+ *
+ * @type void
+ */
+ dispose : function () {}
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class A VR tile cache backed by a {@link bigshot.ImageTileCache}.
+ * @augments bigshot.VRTileCache
+ */
+bigshot.ImageVRTileCache = function (onloaded, onCacheInit, parameters) {
+ this.imageTileCache = new bigshot.ImageTileCache (onloaded, onCacheInit, parameters);
+
+ // Keep the imageTileCache from wrapping around.
+ this.imageTileCache.setMaxTiles (999999, 999999);
+}
+
+bigshot.ImageVRTileCache.prototype = {
+ getTexture : function (tileX, tileY, zoomLevel) {
+ var res = this.imageTileCache.getImage (tileX, tileY, zoomLevel);
+ return res;
+ },
+
+ purge : function () {
+ this.imageTileCache.resetUsed ();
+ },
+
+ dispose : function () {
+
+ }
+}
+
+bigshot.Object.validate ("bigshot.ImageVRTileCache", bigshot.VRTileCache);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new cache instance.
+ *
+ * @class Tile texture cache for a {@link bigshot.VRFace}.
+ * @augments bigshot.VRTileCache
+ * @param {function()} onLoaded function that is called whenever a texture tile has been loaded
+ * @param {function()} onCacheInit function that is called when the texture cache is fully initialized
+ * @param {bigshot.VRPanoramaParameters} parameters image parameters
+ * @param {bigshot.WebGL} _webGl WebGL instance to use
+ */
+bigshot.TextureTileCache = function (onLoaded, onCacheInit, parameters, _webGl) {
+ this.parameters = parameters;
+ this.webGl = _webGl;
+
+ /**
+ * Reduced-resolution preview of the full image.
+ * Loaded from the "poster" image created by
+ * MakeImagePyramid
+ *
+ * @private
+ * @type HTMLImageElement
+ */
+ this.fullImage = parameters.dataLoader.loadImage (parameters.fileSystem.getPosterFilename (), onCacheInit);
+
+ /**
+ * Maximum number of WebGL textures in the cache. This is the
+ * "L1" cache.
+ *
+ * @private
+ * @type int
+ */
+ this.maxTextureCacheSize = 512;
+
+ /**
+ * Maximum number of HTMLImageElement images in the cache. This is the
+ * "L2" cache.
+ *
+ * @private
+ * @type int
+ */
+ this.maxImageCacheSize = 2048;
+ this.cachedTextures = {};
+ this.cachedImages = {};
+ this.requestedImages = {};
+ this.lastOnLoadFiredAt = 0;
+ this.imageRequests = 0;
+ this.partialImageSize = parameters.tileSize / 8;
+ this.imageLruMap = new bigshot.LRUMap ();
+ this.textureLruMap = new bigshot.LRUMap ();
+ this.onLoaded = onLoaded;
+ this.browser = new bigshot.Browser ();
+ this.disposed = false;
+}
+
+bigshot.TextureTileCache.prototype = {
+
+ getPartialTexture : function (tileX, tileY, zoomLevel) {
+ if (this.fullImage.complete) {
+ var canvas = document.createElement ("canvas");
+ if (!canvas["width"]) {
+ return null;
+ }
+ canvas.width = this.partialImageSize;
+ canvas.height = this.partialImageSize;
+ var ctx = canvas.getContext ("2d");
+
+ var posterScale = this.parameters.posterSize / Math.max (this.parameters.width, this.parameters.height);
+
+ var posterWidth = Math.floor (posterScale * this.parameters.width);
+ var posterHeight = Math.floor (posterScale * this.parameters.height);
+
+ var tileSizeAtZoom = posterScale * (this.parameters.tileSize - this.parameters.overlap) / Math.pow (2, zoomLevel);
+ var sx = Math.floor (tileSizeAtZoom * tileX);
+ var sy = Math.floor (tileSizeAtZoom * tileY);
+ var sw = Math.floor (tileSizeAtZoom);
+ var sh = Math.floor (tileSizeAtZoom);
+ var dw = this.partialImageSize + 2;
+ var dh = this.partialImageSize + 2;
+
+ if (sx + sw > posterWidth) {
+ sw = posterWidth - sx;
+ dw = this.partialImageSize * (sw / Math.floor (tileSizeAtZoom));
+ }
+ if (sy + sh > posterHeight) {
+ sh = posterHeight - sy;
+ dh = this.partialImageSize * (sh / Math.floor (tileSizeAtZoom));
+ }
+
+ ctx.drawImage (this.fullImage, sx, sy, sw, sh, -1, -1, dw, dh);
+
+ return this.webGl.createImageTextureFromImage (canvas, this.parameters.textureMinFilter, this.parameters.textureMagFilter);
+ } else {
+ return null;
+ }
+ },
+
+ setCachedTexture : function (key, newTexture) {
+ if (this.cachedTextures[key] != null) {
+ this.webGl.deleteTexture (this.cachedTextures[key]);
+ }
+ this.cachedTextures[key] = newTexture;
+ },
+
+ getTexture : function (tileX, tileY, zoomLevel) {
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ this.textureLruMap.access (key);
+ this.imageLruMap.access (key);
+
+ if (this.cachedTextures[key]) {
+ return this.cachedTextures[key];
+ } else if (this.cachedImages[key]) {
+ this.setCachedTexture (key, this.webGl.createImageTextureFromImage (this.cachedImages[key], this.parameters.textureMinFilter, this.parameters.textureMagFilter));
+ return this.cachedTextures[key];
+ } else {
+ this.requestImage (tileX, tileY, zoomLevel);
+ var partial = this.getPartialTexture (tileX, tileY, zoomLevel);
+ if (partial) {
+ this.setCachedTexture (key, partial);
+ }
+ return partial;
+ }
+ },
+
+ requestImage : function (tileX, tileY, zoomLevel) {
+ var key = this.getImageKey (tileX, tileY, zoomLevel);
+ if (!this.requestedImages[key]) {
+ this.imageRequests++;
+ var that = this;
+ this.parameters.dataLoader.loadImage (this.getImageFilename (tileX, tileY, zoomLevel), function (tile) {
+ if (that.disposed) {
+ return;
+ }
+ that.cachedImages[key] = tile;
+ that.setCachedTexture (key, that.webGl.createImageTextureFromImage (tile, that.parameters.textureMinFilter, that.parameters.textureMagFilter));
+ delete that.requestedImages[key];
+ that.imageRequests--;
+ var now = new Date();
+ if (that.imageRequests == 0 || now.getTime () > (that.lastOnLoadFiredAt + 50)) {
+ that.lastOnLoadFiredAt = now.getTime ();
+ that.onLoaded ();
+ }
+ });
+ this.requestedImages[key] = true;
+ }
+ },
+
+ purge : function () {
+ var that = this;
+ this.purgeCache (this.textureLruMap, this.cachedTextures, this.maxTextureCacheSize, function (leastUsedKey) {
+ that.webGl.deleteTexture (that.cachedTextures[leastUsedKey]);
+ });
+ this.purgeCache (this.imageLruMap, this.cachedImages, this.maxImageCacheSize, function (leastUsedKey) {
+ });
+ },
+
+ purgeCache : function (lruMap, cache, maxCacheSize, onEvict) {
+ for (var i = 0; i < 64; ++i) {
+ if (lruMap.getSize () > maxCacheSize) {
+ var leastUsed = lruMap.leastUsed ();
+ lruMap.remove (leastUsed);
+ if (onEvict) {
+ onEvict (leastUsed);
+ }
+ delete cache[leastUsed];
+ } else {
+ break;
+ }
+ }
+ },
+
+ getImageKey : function (tileX, tileY, zoomLevel) {
+ return "I" + tileX + "_" + tileY + "_" + zoomLevel;
+ },
+
+ getImageFilename : function (tileX, tileY, zoomLevel) {
+ var f = this.parameters.fileSystem.getImageFilename (tileX, tileY, zoomLevel);
+ return f;
+ },
+
+ dispose : function () {
+ this.disposed = true;
+ for (var k in this.cachedTextures) {
+ this.webGl.deleteTexture (this.cachedTextures[k]);
+ }
+ }
+};
+
+
+bigshot.Object.validate ("bigshot.TextureTileCache", bigshot.VRTileCache);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new VR cube face.
+ *
+ * @class a VR cube face. The {@link bigshot.VRPanorama} instance holds
+ * six of these.
+ *
+ * @param {bigshot.VRPanorama} owner the VR panorama this face is part of.
+ * @param {String} key the identifier for the face. "f" is front, "b" is back, "u" is
+ * up, "d" is down, "l" is left and "r" is right.
+ * @param {bigshot.Point3D} topLeft_ the top-left corner of the quad.
+ * @param {number} width_ the length of the sides of the face, expressed in multiples of u and v.
+ * @param {bigshot.Point3D} u basis vector going from the top left corner along the top edge of the face
+ * @param {bigshot.Point3D} v basis vector going from the top left corner along the left edge of the face
+ */
+bigshot.VRFace = function (owner, key, topLeft_, width_, u, v, onLoaded) {
+ var that = this;
+ this.owner = owner;
+ this.key = key;
+ this.topLeft = topLeft_;
+ this.width = width_;
+ this.u = u;
+ this.v = v;
+ this.updated = false;
+ this.parameters = new Object ();
+
+ for (var k in this.owner.getParameters ()) {
+ this.parameters[k] = this.owner.getParameters ()[k];
+ }
+
+ bigshot.setupFileSystem (this.parameters);
+ this.parameters.fileSystem.setPrefix ("face_" + key);
+ this.parameters.merge (this.parameters.fileSystem.getDescriptor (), false);
+
+
+ /**
+ * Texture cache.
+ *
+ * @private
+ */
+ this.tileCache = owner.renderer.createTileCache (function () {
+ that.updated = true;
+ owner.renderUpdated (bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE);
+ }, onLoaded, this.parameters);
+
+ this.fullSize = this.parameters.width;
+ this.overlap = this.parameters.overlap;
+ this.tileSize = this.parameters.tileSize;
+
+ this.minDivisions = 0;
+ var fullZoom = Math.log (this.fullSize - this.overlap) / Math.LN2;
+ var singleTile = Math.log (this.tileSize - this.overlap) / Math.LN2;
+ this.maxDivisions = Math.floor (fullZoom - singleTile);
+ this.maxTesselation = this.parameters.maxTesselation >= 0 ? this.parameters.maxTesselation : this.maxDivisions;
+}
+
+bigshot.VRFace.prototype = {
+ browser : new bigshot.Browser (),
+
+ dispose : function () {
+ this.tileCache.dispose ();
+ },
+
+ /**
+ * Utility function to do a multiply-and-add of a 3d point.
+ *
+ * @private
+ * @param p {bigshot.Point3D} the point to multiply
+ * @param m {number} the number to multiply the elements of p with
+ * @param a {bigshot.Point3D} the point to add
+ * @return p * m + a
+ */
+ pt3dMultAdd : function (p, m, a) {
+ return {
+ x : p.x * m + a.x,
+ y : p.y * m + a.y,
+ z : p.z * m + a.z
+ };
+ },
+
+ /**
+ * Utility function to do an element-wise multiply of a 3d point.
+ *
+ * @private
+ * @param p {bigshot.Point3D} the point to multiply
+ * @param m {number} the number to multiply the elements of p with
+ * @return p * m
+ */
+ pt3dMult : function (p, m) {
+ return {
+ x : p.x * m,
+ y : p.y * m,
+ z : p.z * m
+ };
+ },
+
+ /**
+ * Creates a textured quad.
+ *
+ * @private
+ */
+ generateFace : function (scene, topLeft, width, tx, ty, divisions) {
+ width *= this.tileSize / (this.tileSize - this.overlap);
+ var texture = this.tileCache.getTexture (tx, ty, -this.maxDivisions + divisions);
+ scene.addQuad (this.owner.renderer.createTexturedQuad (
+ topLeft,
+ this.pt3dMult (this.u, width),
+ this.pt3dMult (this.v, width),
+ texture
+ )
+ );
+ },
+
+ VISIBLE_NONE : 0,
+ VISIBLE_SOME : 1,
+ VISIBLE_ALL : 2,
+
+ /**
+ * Tests whether the point is in the axis-aligned rectangle.
+ *
+ * @private
+ * @param point the point
+ * @param min top left corner of the rectangle
+ * @param max bottom right corner of the rectangle
+ */
+ pointInRect : function (point, min, max) {
+ return (point.x >= min.x && point.y >= min.y && point.x < max.x && point.y < max.y);
+ },
+
+ /**
+ * Intersects a quadrilateral with the view frustum.
+ * The test is a simple rectangle intersection of the AABB of
+ * the transformed quad with the viewport.
+ *
+ * @private
+ * @return VISIBLE_NONE, VISIBLE_SOME or VISIBLE_ALL
+ */
+ intersectWithView : function intersectWithView (transformed) {
+ var numNull = 0;
+ var tf = [];
+ var tfl = transformed.length;
+ for (var i = 0; i < tfl; ++i) {
+ if (transformed[i] == null) {
+ numNull++;
+ } else {
+ tf.push (transformed[i]);
+ }
+ }
+ if (numNull == 4) {
+ return this.VISIBLE_NONE;
+ }
+
+ var minX = tf[0].x;
+ var minY = tf[0].y;
+
+ var maxX = minX;
+ var maxY = minY;
+
+ var viewMinX = 0;
+ var viewMinY = 0;
+
+ var viewMaxX = this.viewportWidth;
+ var viewMaxY = this.viewportHeight;
+
+ var pointsInViewport = 0;
+ var tl = tf.length;
+ for (var i = 1; i < tl; ++i) {
+ var tix = tf[i].x;
+ var tiy = tf[i].y;
+
+ minX = minX < tix ? minX : tix;
+ minY = minY < tiy ? minY : tiy;
+
+
+ maxX = maxX > tix ? maxX : tix;
+ maxY = maxY > tiy ? maxY : tiy;
+ }
+
+ var iminX = minX > viewMinX ? minX : viewMinX;
+ var iminY = minY > viewMinY ? minY : viewMinY;
+
+ var imaxX = maxX < viewMaxX ? maxX : viewMaxX;
+ var imaxY = maxY < viewMaxY ? maxY : viewMaxY;
+
+ if (iminX <= imaxX && iminY <= imaxY) {
+ return this.VISIBLE_SOME;
+ }
+
+ return this.VISIBLE_NONE;
+ },
+
+ /**
+ * Quick and dirty computation of the on-screen distance in pixels
+ * between two 2d points. We use the max of the x and y differences.
+ * In case a point is null (that is, it's not on the screen), we
+ * return an arbitrarily high number.
+ *
+ * @private
+ */
+ screenDistance : function screenDistance (p0, p1) {
+ if (p0 == null || p1 == null) {
+ return 0;
+ }
+ return Math.max (Math.abs (p0.x - p1.x), Math.abs (p0.y - p1.y));
+ },
+
+ transformToScreen : function transformToScreen (v) {
+ return this.owner.renderer.transformToScreen (v);
+ },
+
+ /**
+ * Optionally subdivides a quad into fourn new quads, depending on the
+ * position and on-screen size of the quad.
+ *
+ * @private
+ * @param {bigshot.WebGLTexturedQuadScene} scene the scene to add quads to
+ * @param {bigshot.Point3D} topLeft the top left corner of this quad
+ * @param {number} width the sides of the quad, expressed in multiples of u and v
+ * @param {int} divisions the current number of divisions done (increases by one for each
+ * split-in-four).
+ * @param {int} tx the tile column this face is in
+ * @param {int} ty the tile row this face is in
+ */
+ generateSubdivisionFace : function generateSubdivisionFace (scene, topLeft, width, divisions, tx, ty, transformed) {
+ if (!transformed) {
+ transformed = new Array (4);
+ transformed[0] = this.transformToScreen (topLeft);
+ var topRight = this.pt3dMultAdd (this.u, width, topLeft);
+ transformed[1] = this.transformToScreen (topRight);
+
+ var bottomLeft = this.pt3dMultAdd (this.v, width, topLeft);
+ transformed[3] = this.transformToScreen (bottomLeft);
+
+ var bottomRight = this.pt3dMultAdd (this.v, width, topRight);
+ transformed[2] = this.transformToScreen (bottomRight);
+ };
+
+ var numVisible = this.intersectWithView (transformed);
+
+ if (numVisible == this.VISIBLE_NONE) {
+ return;
+ }
+
+ var dmax = 0;
+ for (var i = 0; i < transformed.length; ++i) {
+ var next = (i + 1) % 4;
+ dmax = Math.max (this.screenDistance (transformed[i], transformed[next]), dmax);
+ }
+
+ // Convert the distance to physical pixels
+ dmax *= this.owner.browser.getDevicePixelScale ();
+
+ if (divisions < this.minDivisions
+ ||
+ (
+ (
+ dmax > this.owner.maxTextureMagnification * (this.tileSize - this.overlap)
+ ) && divisions < this.maxDivisions && divisions < this.maxTesselation
+ )
+ ) {
+ var center = this.pt3dMultAdd ({x: this.u.x + this.v.x, y: this.u.y + this.v.y, z: this.u.z + this.v.z }, width / 2, topLeft);
+ var midTop = this.pt3dMultAdd (this.u, width / 2, topLeft);
+ var midLeft = this.pt3dMultAdd (this.v, width / 2, topLeft);
+
+ var tCenter = this.transformToScreen (center);
+ var tMidLeft = this.transformToScreen (midLeft);
+ var tMidTop = this.transformToScreen (midTop);
+ var tMidRight = this.transformToScreen (this.pt3dMultAdd (this.u, width, midLeft));
+ var tMidBottom = this.transformToScreen (this.pt3dMultAdd (this.v, width, midTop));
+
+ this.generateSubdivisionFace (scene, topLeft, width / 2, divisions + 1, tx * 2, ty * 2, [transformed[0], tMidTop, tCenter, tMidLeft]);
+ this.generateSubdivisionFace (scene, midTop, width / 2, divisions + 1, tx * 2 + 1, ty * 2, [tMidTop, transformed[1], tMidRight, tCenter]);
+ this.generateSubdivisionFace (scene, midLeft, width / 2, divisions + 1, tx * 2, ty * 2 + 1, [tMidLeft, tCenter, tMidBottom, transformed[3]]);
+ this.generateSubdivisionFace (scene, center, width / 2, divisions + 1, tx * 2 + 1, ty * 2 + 1, [tCenter, tMidRight, transformed[2], tMidBottom]);
+ } else {
+ this.generateFace (scene, topLeft, width, tx, ty, divisions);
+ }
+ },
+
+ /**
+ * Tests if the face has had any updated texture
+ * notifications from the tile cache.
+ *
+ * @public
+ */
+ isUpdated : function () {
+ return this.updated;
+ },
+
+ /**
+ * Renders this face into a scene.
+ *
+ * @public
+ * @param {bigshot.WebGLTexturedQuadScene} scene the scene to render into
+ */
+ render : function (scene) {
+ this.updated = false;
+ this.viewportWidth = this.owner.renderer.getViewportWidth ();
+ this.viewportHeight = this.owner.renderer.getViewportHeight ();
+ this.generateSubdivisionFace (scene, this.topLeft, this.width, 0, 0, 0);
+ },
+
+ /**
+ * Performs post-render cleanup.
+ */
+ endRender : function () {
+ this.tileCache.purge ();
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class WebGL utility functions.
+ */
+bigshot.WebGLUtil = {
+ /**
+ * Flag indicating whether we want to wrap the WebGL context in a
+ * WebGLDebugUtils.makeDebugContext. Defaults to false.
+ *
+ * @type boolean
+ * @public
+ */
+ debug : false,
+
+ /**
+ * List of context identifiers WebGL may be accessed via.
+ *
+ * @type String[]
+ * @private
+ */
+ contextNames : ["webgl", "experimental-webgl"],
+
+ /**
+ * Utility function for creating a context given a canvas and
+ * a context identifier.
+ * @type WebGLRenderingContext
+ * @private
+ */
+ createContext0 : function (canvas, context) {
+ var gl = this.debug
+ ?
+ WebGLDebugUtils.makeDebugContext(canvas.getContext(context))
+ :
+ canvas.getContext (context);
+ return gl;
+ },
+
+ /**
+ * Creates a WebGL context for the given canvas, if possible.
+ *
+ * @public
+ * @type WebGLRenderingContext
+ * @param {HTMLCanvasElement} canvas the canvas
+ * @return The WebGL context
+ * @throws {Error} If WebGL isn't supported.
+ */
+ createContext : function (canvas) {
+ for (var i = 0; i < this.contextNames.length; ++i) {
+ try {
+ var gl = this.createContext0 (canvas, this.contextNames[i]);
+ if (gl) {
+ return gl;
+ }
+ } catch (e) {
+ }
+ }
+ throw new Error ("Could not initialize WebGL.");
+ },
+
+ /**
+ * Tests whether WebGL is supported.
+ *
+ * @type boolean
+ * @public
+ * @return true If WebGL is supported, false otherwise.
+ */
+ isWebGLSupported : function () {
+ var canvas = document.createElement ("canvas");
+ if (!canvas["width"]) {
+ // Not even canvas support
+ return false;
+ }
+
+ try {
+ this.createContext (canvas);
+ return true;
+ } catch (e) {
+ // No WebGL support
+ return false;
+ }
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new transformation stack, initialized to the identity transform.
+ *
+ * @class A 3D transformation stack.
+ */
+bigshot.TransformStack = function () {
+ /**
+ * The current transform matrix.
+ *
+ * @type Matrix
+ */
+ this.mvMatrix = null;
+
+ /**
+ * The object-to-world transform matrix stack.
+ *
+ * @type Matrix[]
+ */
+ this.mvMatrixStack = [];
+
+ this.reset ();
+}
+
+bigshot.TransformStack.prototype = {
+ /**
+ * Pushes the current world transform onto the stack
+ * and returns a new, identical one.
+ *
+ * @return the new world transform matrix
+ * @param {Matrix} [matrix] the new world transform.
+ * If omitted, the current is used
+ * @type Matrix
+ */
+ push : function (matrix) {
+ if (matrix) {
+ this.mvMatrixStack.push (matrix.dup());
+ this.mvMatrix = matrix.dup();
+ return mvMatrix;
+ } else {
+ this.mvMatrixStack.push (this.mvMatrix.dup());
+ return mvMatrix;
+ }
+ },
+
+ /**
+ * Pops the last-pushed world transform off the stack, thereby restoring it.
+ *
+ * @type Matrix
+ * @return the previously-pushed matrix
+ */
+ pop : function () {
+ if (this.mvMatrixStack.length == 0) {
+ throw new Error ("Invalid popMatrix!");
+ }
+ this.mvMatrix = this.mvMatrixStack.pop();
+ return mvMatrix;
+ },
+
+ /**
+ * Resets the world transform to the identity transform.
+ */
+ reset : function () {
+ this.mvMatrix = Matrix.I(4);
+ },
+
+ /**
+ * Multiplies the current world transform with a matrix.
+ *
+ * @param {Matrix} matrix the matrix to multiply with
+ */
+ multiply : function (matrix) {
+ this.mvMatrix = matrix.x (this.mvMatrix);
+ },
+
+ /**
+ * Adds a translation to the world transform matrix.
+ *
+ * @param {bigshot.Point3D} vector the translation vector
+ */
+ translate : function (vector) {
+ var m = Matrix.Translation($V([vector.x, vector.y, vector.z])).ensure4x4 ();
+ this.multiply (m);
+ },
+
+ /**
+ * Adds a rotation to the world transform matrix.
+ *
+ * @param {number} ang the angle in degrees to rotate
+ * @param {bigshot.Point3D} vector the rotation vector
+ */
+ rotate : function (ang, vector) {
+ var arad = ang * Math.PI / 180.0;
+ var m = Matrix.Rotation(arad, $V([vector.x, vector.y, vector.z])).ensure4x4 ();
+ this.multiply (m);
+ },
+
+ /**
+ * Adds a rotation around the x-axis to the world transform matrix.
+ *
+ * @param {number} ang the angle in degrees to rotate
+ */
+ rotateX : function (ang) {
+ this.rotate (ang, { x : 1, y : 0, z : 0 });
+ },
+
+ /**
+ * Adds a rotation around the y-axis to the world transform matrix.
+ *
+ * @param {number} ang the angle in degrees to rotate
+ */
+ rotateY : function (ang) {
+ this.rotate (ang, { x : 0, y : 1, z : 0 });
+ },
+
+ /**
+ * Adds a rotation around the z-axis to the world transform matrix.
+ *
+ * @param {number} ang the angle in degrees to rotate
+ */
+ rotateZ : function (ang) {
+ this.rotate (ang, { x : 0, y : 0, z : 1 });
+ },
+
+ /**
+ * Multiplies the current matrix with a
+ * perspective transformation matrix.
+ *
+ * @param {number} fovy vertical field of view
+ * @param {number} aspect viewport aspect ratio
+ * @param {number} znear near image plane
+ * @param {number} zfar far image plane
+ */
+ perspective : function (fovy, aspect, znear, zfar) {
+ var m = makePerspective (fovy, aspect, znear, zfar);
+ this.multiply (m);
+ },
+
+ matrix : function () {
+ return this.mvMatrix;
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new WebGL wrapper instance.
+ *
+ * @class WebGL wrapper for common {@link bigshot.VRPanorama} uses.
+ * @param {HTMLCanvasElement} canvas_ the canvas
+ * @see #onresize()
+ */
+bigshot.WebGL = function (canvas_) {
+ /**
+ * The html canvas element we'll be rendering in.
+ *
+ * @type HTMLCanvasElement
+ */
+ this.canvas = canvas_;
+
+ /**
+ * Our WebGL context.
+ *
+ * @type WebGLRenderingContext
+ */
+ this.gl = bigshot.WebGLUtil.createContext (this.canvas);
+
+ /**
+ * The current object-to-world transform matrix.
+ *
+ * @type bigshot.TransformStack
+ */
+ this.mvMatrix = new bigshot.TransformStack ();
+
+ /**
+ * The current perspective transform matrix.
+ *
+ * @type bigshot.TransformStack
+ */
+ this.pMatrix = new bigshot.TransformStack ();
+
+ /**
+ * The current shader program.
+ */
+ this.shaderProgram = null;
+
+ this.onresize ();
+}
+
+bigshot.WebGL.prototype = {
+ /**
+ * Must be called when the canvas element is resized.
+ *
+ * @public
+ */
+ onresize : function () {
+ this.gl.viewportWidth = this.canvas.width;
+ this.gl.viewportHeight = this.canvas.height;
+ },
+
+ /**
+ * Fragment shader. Taken from the "Learning WebGL" lessons:
+ * http://learningwebgl.com/blog/?p=571
+ */
+ fragmentShader :
+ "#ifdef GL_ES\n" +
+ " precision highp float;\n" +
+ "#endif\n" +
+ "\n" +
+ "varying vec2 vTextureCoord;\n" +
+ "\n" +
+ "uniform sampler2D uSampler;\n" +
+ "\n" +
+ "void main(void) {\n" +
+ " gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n" +
+ "}\n",
+
+ /**
+ * Vertex shader. Taken from the "Learning WebGL" lessons:
+ * http://learningwebgl.com/blog/?p=571
+ */
+ vertexShader :
+ "attribute vec3 aVertexPosition;\n" +
+ "attribute vec2 aTextureCoord;\n" +
+ "\n" +
+ "uniform mat4 uMVMatrix;\n" +
+ "uniform mat4 uPMatrix;\n" +
+ "\n" +
+ "varying vec2 vTextureCoord;\n" +
+ "\n" +
+ "void main(void) {\n" +
+ " gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n" +
+ " vTextureCoord = aTextureCoord;\n" +
+ "}",
+
+ /**
+ * Creates a new shader.
+ *
+ * @type WebGLShader
+ * @param {String} source the source code
+ * @param {int} type the shader type, one of WebGLRenderingContext.FRAGMENT_SHADER or
+ * WebGLRenderingContext.VERTEX_SHADER
+ */
+ createShader : function (source, type) {
+ var shader = this.gl.createShader (type);
+ this.gl.shaderSource (shader, source);
+ this.gl.compileShader (shader);
+
+ if (!this.gl.getShaderParameter (shader, this.gl.COMPILE_STATUS)) {
+ alert (this.gl.getShaderInfoLog (shader));
+ return null;
+ }
+
+ return shader;
+ },
+
+ /**
+ * Creates a new fragment shader.
+ *
+ * @type WebGLShader
+ * @param {String} source the source code
+ */
+ createFragmentShader : function (source) {
+ return this.createShader (source, this.gl.FRAGMENT_SHADER);
+ },
+
+ /**
+ * Creates a new vertex shader.
+ *
+ * @type WebGLShader
+ * @param {String} source the source code
+ */
+ createVertexShader : function (source) {
+ return this.createShader (source, this.gl.VERTEX_SHADER);
+ },
+
+ /**
+ * Initializes the shaders.
+ */
+ initShaders : function () {
+ this.shaderProgram = this.gl.createProgram ();
+ this.gl.attachShader (this.shaderProgram, this.createVertexShader (this.vertexShader));
+ this.gl.attachShader (this.shaderProgram, this.createFragmentShader (this.fragmentShader));
+ this.gl.linkProgram (this.shaderProgram);
+
+ if (!this.gl.getProgramParameter (this.shaderProgram, this.gl.LINK_STATUS)) {
+ throw new Error ("Could not initialise shaders");
+ return;
+ }
+
+ this.gl.useProgram (this.shaderProgram);
+
+ this.shaderProgram.vertexPositionAttribute = this.gl.getAttribLocation (this.shaderProgram, "aVertexPosition");
+ this.gl.enableVertexAttribArray (this.shaderProgram.vertexPositionAttribute);
+
+ this.shaderProgram.textureCoordAttribute = this.gl.getAttribLocation (this.shaderProgram, "aTextureCoord");
+ this.gl.enableVertexAttribArray (this.shaderProgram.textureCoordAttribute);
+
+ this.shaderProgram.pMatrixUniform = this.gl.getUniformLocation(this.shaderProgram, "uPMatrix");
+ this.shaderProgram.mvMatrixUniform = this.gl.getUniformLocation(this.shaderProgram, "uMVMatrix");
+ this.shaderProgram.samplerUniform = this.gl.getUniformLocation(this.shaderProgram, "uSampler");
+ },
+
+
+ /**
+ * Sets the matrix parameters ("uniforms", since the variables are declared as uniform) in the shaders.
+ */
+ setMatrixUniforms : function () {
+ this.gl.uniformMatrix4fv (this.shaderProgram.pMatrixUniform, false, new Float32Array(this.pMatrix.matrix().flatten()));
+ this.gl.uniformMatrix4fv (this.shaderProgram.mvMatrixUniform, false, new Float32Array(this.mvMatrix.matrix().flatten()));
+ },
+
+ /**
+ * Creates a texture from an image.
+ *
+ * @param {HTMLImageElement or HTMLCanvasElement} image the image
+ * @type WebGLTexture
+ * @return An initialized texture
+ */
+ createImageTextureFromImage : function (image, minFilter, magFilter) {
+ var texture = this.gl.createTexture();
+ this.handleImageTextureLoaded (this, texture, image, minFilter, magFilter);
+ return texture;
+ },
+
+ /**
+ * Creates a texture from a source url.
+ *
+ * @param {String} source the URL of the image
+ * @return WebGLTexture
+ */
+ createImageTextureFromSource : function (source, minFilter, magFilter) {
+ var image = new Image();
+ var texture = this.gl.createTexture();
+
+ var that = this;
+ image.onload = function () {
+ that.handleImageTextureLoaded (that, texture, image, minFilter, magFilter);
+ }
+
+ image.src = source;
+
+ return texture;
+ },
+
+ /**
+ * Uploads the image data to the texture memory. Called when the texture image
+ * has finished loading.
+ *
+ * @private
+ */
+ handleImageTextureLoaded : function (that, texture, image, minFilter, magFilter) {
+ that.gl.bindTexture (that.gl.TEXTURE_2D, texture);
+ that.gl.texImage2D (that.gl.TEXTURE_2D, 0, that.gl.RGBA, that.gl.RGBA, that.gl.UNSIGNED_BYTE, image);
+ that.gl.texParameteri (that.gl.TEXTURE_2D, that.gl.TEXTURE_MAG_FILTER, magFilter ? magFilter : that.gl.NEAREST);
+ that.gl.texParameteri (that.gl.TEXTURE_2D, that.gl.TEXTURE_MIN_FILTER, minFilter ? minFilter : that.gl.NEAREST);
+ that.gl.texParameteri (that.gl.TEXTURE_2D, that.gl.TEXTURE_WRAP_S, that.gl.CLAMP_TO_EDGE);
+ that.gl.texParameteri (that.gl.TEXTURE_2D, that.gl.TEXTURE_WRAP_T, that.gl.CLAMP_TO_EDGE);
+ if (minFilter == that.gl.NEAREST_MIPMAP_NEAREST
+ || minFilter == that.gl.LINEAR_MIPMAP_NEAREST
+ || minFilter == that.gl.NEAREST_MIPMAP_LINEAR
+ || minFilter == that.gl.LINEAR_MIPMAP_LINEAR) {
+ that.gl.generateMipmap(that.gl.TEXTURE_2D);
+ }
+
+ that.gl.bindTexture (that.gl.TEXTURE_2D, null);
+ },
+
+ deleteTexture : function (texture) {
+ this.gl.deleteTexture (texture);
+ },
+
+ dispose : function () {
+ delete this.canvas;
+ delete this.gl;
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract base for 3d rendering system.
+ */
+bigshot.VRRenderer = function () {
+}
+
+bigshot.VRRenderer.prototype = {
+ /**
+ * Creates a new {@link bigshot.VRTileCache}, appropriate for the rendering system.
+ *
+ * @param {function()} onloaded function that is called whenever a texture tile has been loaded
+ * @param {function()} onCacheInit function that is called when the texture cache is fully initialized
+ * @param {bigshot.VRPanoramaParameters} parameters the parameters for the panorama
+ */
+ createTileCache : function (onloaded, onCacheInit, parameters) {},
+
+ /**
+ * Creates a bigshot.TexturedQuadScene.
+ */
+ createTexturedQuadScene : function () {},
+
+ /**
+ * Creates a bigshot.TexturedQuad.
+ *
+ * @param {bigshot.Point3D} p the top-left corner of the quad
+ * @param {bigshot.Point3D} u a vector going along the top edge of the quad
+ * @param {bigshot.Point3D} v a vector going down the left edge of the quad
+ * @param {Object} texture a texture to use for the quad. The texture type may vary among different
+ * VRRenderer implementations. The VRTileCache that is created using the createTileCache method will
+ * supply the correct type.
+ */
+ createTexturedQuad : function (p, u, v, texture) {},
+
+ /**
+ * Returns the viewport width, in pixels.
+ *
+ * @type int
+ */
+ getViewportWidth : function () {},
+
+ /**
+ * Returns the viewport height, in pixels.
+ *
+ * @type int
+ */
+ getViewportHeight : function () {},
+
+ /**
+ * Transforms a vector to world coordinates.
+ *
+ * @param {bigshot.Point3D} v the view-space point to transform
+ */
+ transformToWorld : function (v) {},
+
+ /**
+ * Transforms a world vector to screen coordinates.
+ *
+ * @param {bigshot.Point3D} worldVector the world-space point to transform
+ */
+ transformWorldToScreen : function (worldVector) {},
+
+ /**
+ * Transforms a 3D vector to screen coordinates.
+ *
+ * @param {bigshot.Point3D} vector the vector to transform.
+ * If it is already in homogenous coordinates (4-element array)
+ * the transformation is faster. Otherwise it will be converted.
+ */
+ transformToScreen : function (vector) {},
+
+ /**
+ * Disposes the renderer and associated resources.
+ */
+ dispose : function () {},
+
+ /**
+ * Called to begin a render.
+ *
+ * @param {bigshot.Rotation} rotation the rotation of the viewer
+ * @param {number} fov the vertical field of view, in degrees
+ * @param {bigshot.Point3D} translation the position of the viewer in world space
+ * @param {bigshot.Rotation} rotationOffsets the rotation to apply to the VR cube
+ * before the viewer rotation is applied
+ */
+ beginRender : function (rotation, fov, translation, rotationOffsets) {},
+
+ /**
+ * Called to end a render.
+ */
+ endRender : function () {},
+
+ /**
+ * Called by client code to notify the renderer that the viewport has been resized.
+ */
+ onresize : function () {},
+
+ /**
+ * Resizes the viewport.
+ *
+ * @param {int} w the new width of the viewport, in pixels
+ * @param {int} h the new height of the viewport, in pixels
+ */
+ resize : function (w, h) {},
+
+ /**
+ * Gets the container element for the renderer. This is used
+ * when calling the requestAnimationFrame API.
+ */
+ getElement : function () {}
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract VR renderer base class.
+ */
+bigshot.AbstractVRRenderer = function () {
+}
+
+bigshot.AbstractVRRenderer.prototype = {
+ /**
+ * Transforms a vector to world coordinates.
+ *
+ * @param {bigshot.Point3D} vector the vector to transform
+ */
+ transformToWorld : function transformToWorld (vector) {
+ var world = this.mvMatrix.matrix ().xPoint3Dhom1 (vector);
+
+ return world;
+ },
+
+ /**
+ * Transforms a world vector to screen coordinates.
+ *
+ * @param {bigshot.Point3D} world the world-vector to transform
+ */
+ transformWorldToScreen : function transformWorldToScreen (world) {
+ if (world.z > 0) {
+ return null;
+ }
+
+ var screen = this.pMatrix.matrix ().xPoint3Dhom (world);
+ if (Math.abs (screen.w) < Sylvester.precision) {
+ return null;
+ }
+
+ var sx = screen.x;
+ var sy = screen.y;
+ var sz = screen.z;
+ var vw = this.getViewportWidth ();
+ var vh = this.getViewportHeight ();
+
+ var r = {
+ x: (vw / 2) * sx / sz + vw / 2,
+ y: - (vh / 2) * sy / sz + vh / 2
+ };
+ return r;
+ },
+
+ /**
+ * Transforms a vector to screen coordinates.
+ *
+ * @param {bigshot.Point3D} vector the vector to transform
+ * @return the transformed vector, or null if the vector is nearer than the near-z plane.
+ */
+ transformToScreen : function transformToScreen (vector) {
+ var sel = this.mvpMatrix.xPoint3Dhom (vector);
+
+ if (sel.z < 0) {
+ return null;
+ }
+
+ var sz = sel.w;
+
+ if (Math.abs (sel.w) < Sylvester.precision) {
+ return null;
+ }
+
+ var sx = sel.x;
+ var sy = sel.y;
+ var vw = this.getViewportWidth ();
+ var vh = this.getViewportHeight ();
+
+ var r = {
+ x: (vw / 2) * sx / sz + vw / 2,
+ y: - (vh / 2) * sy / sz + vh / 2
+ };
+
+ return r;
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class CSS 3D Transform-based renderer.
+ * @param {HTMLElement} _container the HTML container element for the render viewport
+ *
+ * @augments bigshot.VRRenderer
+ */
+bigshot.CSS3DVRRenderer = function (_container) {
+ this.container = _container;
+ this.canvasOrigin = document.createElement ("div");
+
+ this.canvasOrigin.style.WebkitTransformOrigin = "0px 0px 0px";
+ this.canvasOrigin.style.WebkitTransformStyle = "preserve-3d";
+ this.canvasOrigin.style.WebkitPerspective= "600px";
+
+ this.canvasOrigin.style.position = "relative";
+ this.canvasOrigin.style.left = "50%";
+ this.canvasOrigin.style.top = "50%";
+
+ this.container.appendChild (this.canvasOrigin);
+
+ this.viewport = document.createElement ("div");
+ this.viewport.style.WebkitTransformOrigin = "0px 0px 0px";
+ this.viewport.style.WebkitTransformStyle = "preserve-3d";
+ this.canvasOrigin.appendChild (this.viewport);
+
+ this.world = document.createElement ("div");
+ this.world.style.WebkitTransformOrigin = "0px 0px 0px";
+ this.world.style.WebkitTransformStyle = "preserve-3d";
+ this.viewport.appendChild (this.world);
+
+ this.browser.removeAllChildren (this.world);
+
+ this.view = null;
+
+ this.mvMatrix = new bigshot.TransformStack ();
+
+ this.yaw = 0;
+ this.pitch = 0;
+ this.fov = 0;
+ this.pMatrix = new bigshot.TransformStack ();
+
+ this.onresize = function () {
+ };
+
+ this.viewportSize = null;
+};
+
+bigshot.CSS3DVRRenderer.prototype = {
+ browser : new bigshot.Browser (),
+
+ dispose : function () {
+
+ },
+
+ createTileCache : function (onloaded, onCacheInit, parameters) {
+ return new bigshot.ImageVRTileCache (onloaded, onCacheInit, parameters);
+ },
+
+ createTexturedQuadScene : function () {
+ return new bigshot.CSS3DTexturedQuadScene (this.world, 128, this.view);
+ },
+
+ createTexturedQuad : function (p, u, v, texture) {
+ return new bigshot.CSS3DTexturedQuad (p, u, v, texture);
+ },
+
+ getElement : function () {
+ return this.container;
+ },
+
+ supportsUpdate : function () {
+ return false;
+ },
+
+ getViewportWidth : function () {
+ if (this.viewportSize) {
+ return this.viewportSize.w;
+ }
+ return this.browser.getElementSize (this.container).w;
+ },
+
+ getViewportHeight : function () {
+ if (this.viewportSize) {
+ return this.viewportSize.h;
+ }
+ return this.browser.getElementSize (this.container).h;
+ },
+
+ onresize : function () {
+ },
+
+ resize : function (w, h) {
+ if (this.container.style.width != "") {
+ this.container.style.width = w + "px";
+ }
+ if (this.container.style.height != "") {
+ this.container.style.height = h + "px";
+ }
+ },
+
+ beginRender : function (rotation, fov, translation, rotationOffsets) {
+ this.viewportSize = this.browser.getElementSize (this.container);
+
+ this.yaw = rotation.y;
+ this.pitch = rotation.p;
+ this.fov = fov;
+
+ var halfFovInRad = 0.5 * fov * Math.PI / 180;
+ var halfHeight = this.getViewportHeight () / 2;
+ var perspectiveDistance = halfHeight / Math.tan (halfFovInRad);
+
+ this.mvMatrix.reset ();
+
+ this.view = translation;
+ this.mvMatrix.translate (this.view);
+
+
+ this.mvMatrix.rotateZ (rotationOffsets.r);
+ this.mvMatrix.rotateX (rotationOffsets.p);
+ this.mvMatrix.rotateY (rotationOffsets.y);
+
+ this.mvMatrix.rotateY (this.yaw);
+ this.mvMatrix.rotateX (this.pitch);
+
+
+ this.pMatrix.reset ();
+ this.pMatrix.perspective (this.fov, this.getViewportWidth () / this.getViewportHeight (), 0.1, 100.0);
+
+ this.mvpMatrix = this.pMatrix.matrix ().multiply (this.mvMatrix.matrix ());
+
+ this.canvasOrigin.style.WebkitPerspective= perspectiveDistance + "px";
+
+ for (var i = this.world.children.length - 1; i >= 0; --i) {
+ this.world.children[i].inWorld = 1;
+ }
+
+ this.world.style.WebkitTransform =
+ "rotate3d(1,0,0," + (-rotation.p) + "deg) " +
+ "rotate3d(0,1,0," + rotation.y + "deg) " +
+ "rotate3d(0,1,0," + (rotationOffsets.y) + "deg) " +
+ "rotate3d(1,0,0," + (-rotationOffsets.p) + "deg) " +
+ "rotate3d(0,0,1," + (-rotationOffsets.r) + "deg) ";
+ this.world.style.WebkitTransformStyle = "preserve-3d";
+ this.world.style.WebKitBackfaceVisibility = "hidden";
+
+ this.viewport.style.WebkitTransform =
+ "translateZ(" + perspectiveDistance + "px)";
+ },
+
+ endRender : function () {
+ for (var i = this.world.children.length - 1; i >= 0; --i) {
+ var child = this.world.children[i];
+ if (!child.inWorld || child.inWorld != 2) {
+ delete child.inWorld;
+ this.world.removeChild (child);
+ }
+ }
+
+ this.viewportSize = null;
+ }
+};
+
+bigshot.Object.extend (bigshot.CSS3DVRRenderer, bigshot.AbstractVRRenderer);
+bigshot.Object.validate ("bigshot.CSS3DVRRenderer", bigshot.VRRenderer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a textured quad object.
+ *
+ * @class An abstraction for textured quads. Used in the
+ * {@link bigshot.CSS3DTexturedQuadScene}.
+ *
+ * @param {bigshot.Point3D} p the top-left corner of the quad
+ * @param {bigshot.Point3D} u vector pointing from p along the top edge of the quad
+ * @param {bigshot.Point3D} v vector pointing from p along the left edge of the quad
+ * @param {HTMLImageElement} the image to use.
+ */
+bigshot.CSS3DTexturedQuad = function (p, u, v, image) {
+ this.p = p;
+ this.u = u;
+ this.v = v;
+ this.image = image;
+}
+
+bigshot.CSS3DTexturedQuad.prototype = {
+ /**
+ * Computes the cross product of two vectors.
+ *
+ * @param {bigshot.Point3D} a the first vector
+ * @param {bigshot.Point3D} b the second vector
+ * @type bigshot.Point3D
+ * @return the cross product
+ */
+ crossProduct : function crossProduct (a, b) {
+ return {
+ x : a.y*b.z-a.z*b.y,
+ y : a.z*b.x-a.x*b.z,
+ z : a.x*b.y-a.y*b.x
+ };
+ },
+
+ /**
+ * Stringifies a vector as the x, y, and z components
+ * separated by commas.
+ *
+ * @param {bigshot.Point3D} u the vector
+ * @type String
+ * @return the stringified vector
+ */
+ vecToStr : function vecToStr (u) {
+ return (u.x) + "," + (u.y) + "," + (u.z);
+ },
+
+ /**
+ * Creates a CSS3D matrix3d transform from
+ * an origin point and two basis vectors
+ *
+ * @param {bigshot.Point3D} tl the top left corner
+ * @param {bigshot.Point3D} u the vector pointing along the top edge
+ * @param {bigshot.Point3D} y the vector pointing down the left edge
+ * @type String
+ * @return the matrix3d statement
+ */
+ quadTransform : function quadTransform (tl, u, v) {
+ var w = this.crossProduct (u, v);
+ var res =
+ "matrix3d(" +
+ this.vecToStr (u) + ",0," +
+ this.vecToStr (v) + ",0," +
+ this.vecToStr (w) + ",0," +
+ this.vecToStr (tl) + ",1)";
+ return res;
+ },
+
+ /**
+ * Computes the norm of a vector.
+ *
+ * @param {bigshot.Point3D} vec the vector
+ */
+ norm : function norm (vec) {
+ return Math.sqrt (vec.x * vec.x + vec.y * vec.y + vec.z * vec.z);
+ },
+
+ /**
+ * Renders the quad.
+ *
+ * @param {HTMLElement} world the world element
+ * @param {number} scale the scale factor to apply to world space to get CSS pixel distances
+ * @param {bigshot.Point3D} view the viewer position in world space
+ */
+ render : function render (world, scale, view) {
+ var s = scale / (this.image.width - 1);
+ var ps = scale * 1.0;
+ var p = this.p;
+ var u = this.u;
+ var v = this.v;
+
+ this.image.style.position = "absolute";
+ if (!this.image.inWorld || this.image.inWorld != 1) {
+ world.appendChild (this.image);
+ }
+ this.image.inWorld = 2;
+ this.image.style.WebkitTransformOrigin = "0px 0px 0px";
+ this.image.style.WebkitTransform =
+ this.quadTransform ({
+ x : (p.x + view.x) * ps,
+ y : (-p.y + view.y) * ps,
+ z : (p.z + view.z) * ps
+ }, {
+ x : u.x * s,
+ y : -u.y * s,
+ z : u.z * s
+ }, {
+ x : v.x * s,
+ y : -v.y * s,
+ z : v.z * s
+ });
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a textured quad scene.
+ *
+ * @param {HTMLElement} world element used as container for
+ * the world coordinate system.
+ * @param {number} scale the scaling factor to use to avoid
+ * numeric errors.
+ * @param {bigshot.Point3D} view the 3d-coordinates of the viewer
+ *
+ * @class A scene consisting of a number of quads, all with
+ * a unique texture. Used by the {@link bigshot.VRPanorama} to render the VR cube.
+ *
+ * @see bigshot.CSS3DTexturedQuad
+ */
+bigshot.CSS3DTexturedQuadScene = function (world, scale, view) {
+ this.quads = new Array ();
+ this.world = world;
+ this.scale = scale;
+ this.view = view;
+}
+
+bigshot.CSS3DTexturedQuadScene.prototype = {
+ /**
+ * Adds a new quad to the scene.
+ *
+ * @param {bigshot.TexturedQuad} quad the quad to add to the scene
+ */
+ addQuad : function (quad) {
+ this.quads.push (quad);
+ },
+
+ /**
+ * Renders all quads.
+ */
+ render : function () {
+ for (var i = 0; i < this.quads.length; ++i) {
+ this.quads[i].render (this.world, this.scale, this.view);
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract base for textured quad scenes.
+ */
+bigshot.TexturedQuadScene = function () {
+}
+
+bigshot.TexturedQuadScene.prototype = {
+ /**
+ * Adds a quad to the scene.
+ */
+ addQuad : function (quad) {},
+
+ /**
+ * Renders the scene.
+ */
+ render : function () {}
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class WebGL renderer.
+ */
+bigshot.WebGLVRRenderer = function (container) {
+ this.container = container;
+
+ this.canvas = document.createElement ("canvas");
+ this.canvas.width = 480;
+ this.canvas.height = 480;
+ this.canvas.style.position = "absolute";
+ this.container.appendChild (this.canvas);
+
+ this.webGl = new bigshot.WebGL (this.canvas);
+ this.webGl.initShaders ();
+ this.webGl.gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ this.webGl.gl.blendFunc (this.webGl.gl.ONE, this.webGl.gl.ZERO);
+ this.webGl.gl.enable (this.webGl.gl.BLEND);
+ this.webGl.gl.disable (this.webGl.gl.DEPTH_TEST);
+ this.webGl.gl.clearDepth (1.0);
+
+ var that = this;
+ this.buffers = new bigshot.TimedWeakReference (function () {
+ return that.setupBuffers ();
+ }, function (heldObject) {
+ that.disposeBuffers (heldObject);
+ }, 1000);
+}
+
+bigshot.WebGLVRRenderer.prototype = {
+ createTileCache : function (onloaded, onCacheInit, parameters) {
+ return new bigshot.TextureTileCache (onloaded, onCacheInit, parameters, this.webGl);
+ },
+
+ createTexturedQuadScene : function () {
+ return new bigshot.WebGLTexturedQuadScene (this.webGl, this.buffers);
+ },
+
+ setupBuffers : function () {
+ var vertexPositionBuffer = this.webGl.gl.createBuffer();
+
+ var textureCoordBuffer = this.webGl.gl.createBuffer();
+ this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER, textureCoordBuffer);
+ var textureCoords = [
+ // Front face
+ 0.0, 0.0,
+ 1.0, 0.0,
+ 1.0, 1.0,
+ 0.0, 1.0
+ ];
+ this.webGl.gl.bufferData (this.webGl.gl.ARRAY_BUFFER, new Float32Array (textureCoords), this.webGl.gl.STATIC_DRAW);
+
+ var vertexIndexBuffer = this.webGl.gl.createBuffer();
+ this.webGl.gl.bindBuffer(this.webGl.gl.ELEMENT_ARRAY_BUFFER, vertexIndexBuffer);
+ var vertexIndexes = [
+ 0, 2, 1,
+ 0, 3, 2
+ ];
+ this.webGl.gl.bufferData(this.webGl.gl.ELEMENT_ARRAY_BUFFER, new Uint16Array (vertexIndexes), this.webGl.gl.STATIC_DRAW);
+
+ this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER, textureCoordBuffer);
+ this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.textureCoordAttribute, 2, this.webGl.gl.FLOAT, false, 0, 0);
+
+ this.webGl.gl.bindBuffer(this.webGl.gl.ARRAY_BUFFER, vertexPositionBuffer);
+ this.webGl.gl.vertexAttribPointer(this.webGl.shaderProgram.vertexPositionAttribute, 3, this.webGl.gl.FLOAT, false, 0, 0);
+
+ return {
+ vertexPositionBuffer : vertexPositionBuffer,
+ textureCoordBuffer : textureCoordBuffer,
+ vertexIndexBuffer : vertexIndexBuffer
+ };
+ },
+
+ dispose : function () {
+ this.buffers.dispose ();
+ this.container.removeChild (this.canvas);
+ delete this.canvas;
+ this.webGl.dispose ();
+ delete this.webGl;
+ },
+
+ disposeBuffers : function (buffers) {
+ this.webGl.gl.deleteBuffer (buffers.vertexPositionBuffer);
+ this.webGl.gl.deleteBuffer (buffers.vertexIndexBuffer);
+ this.webGl.gl.deleteBuffer (buffers.textureCoordBuffer);
+ },
+
+ getElement : function () {
+ return this.canvas;
+ },
+
+ supportsUpdate : function () {
+ return false;
+ },
+
+ createTexturedQuad : function (p, u, v, texture) {
+ return new bigshot.WebGLTexturedQuad (p, u, v, texture);
+ },
+
+ getViewportWidth : function () {
+ return this.webGl.gl.viewportWidth;
+ },
+
+ getViewportHeight : function () {
+ return this.webGl.gl.viewportHeight;
+ },
+
+ beginRender : function (rotation, fov, translation, rotationOffsets) {
+ this.webGl.gl.viewport (0, 0, this.webGl.gl.viewportWidth, this.webGl.gl.viewportHeight);
+
+ this.webGl.pMatrix.reset ();
+ this.webGl.pMatrix.perspective (fov, this.webGl.gl.viewportWidth / this.webGl.gl.viewportHeight, 0.1, 100.0);
+
+ this.webGl.mvMatrix.reset ();
+ this.webGl.mvMatrix.translate (translation);
+ this.webGl.mvMatrix.rotateZ (rotationOffsets.r);
+ this.webGl.mvMatrix.rotateX (rotationOffsets.p);
+ this.webGl.mvMatrix.rotateY (rotationOffsets.y);
+ this.webGl.mvMatrix.rotateY (rotation.y);
+ this.webGl.mvMatrix.rotateX (rotation.p);
+
+ this.mvMatrix = this.webGl.mvMatrix;
+ this.pMatrix = this.webGl.pMatrix;
+ this.mvpMatrix = this.pMatrix.matrix ().multiply (this.mvMatrix.matrix ());
+ },
+
+ endRender : function () {
+
+ },
+
+ resize : function (w, h) {
+ this.canvas.width = w;
+ this.canvas.height = h;
+ if (this.container.style.width != "") {
+ this.container.style.width = w + "px";
+ }
+ if (this.container.style.height != "") {
+ this.container.style.height = h + "px";
+ }
+ },
+
+ onresize : function () {
+ this.webGl.onresize ();
+ }
+}
+
+bigshot.Object.extend (bigshot.WebGLVRRenderer, bigshot.AbstractVRRenderer);
+bigshot.Object.validate ("bigshot.WebGLVRRenderer", bigshot.VRRenderer);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @class Abstract base for textured quads.
+ */
+bigshot.TexturedQuad = function () {
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a textured quad object.
+ *
+ * @class An abstraction for textured quads. Used in the
+ * {@link bigshot.WebGLTexturedQuadScene}.
+ *
+ * @param {bigshot.Point3D} p the top-left corner of the quad
+ * @param {bigshot.Point3D} u vector pointing from p along the top edge of the quad
+ * @param {bigshot.Point3D} v vector pointing from p along the left edge of the quad
+ * @param {WebGLTexture} the texture to use.
+ */
+bigshot.WebGLTexturedQuad = function (p, u, v, texture) {
+ this.p = p;
+ this.u = u;
+ this.v = v;
+ this.texture = texture;
+}
+
+bigshot.WebGLTexturedQuad.prototype = {
+
+ /**
+ * Renders the quad using the given {@link bigshot.WebGL} instance.
+ * Currently creates, fills, draws with and then deletes three buffers -
+ * not very efficient, but works.
+ *
+ * @param {bigshot.WebGL} webGl the WebGL wrapper instance to use for rendering.
+ */
+ render : function (webGl, vertexPositionBuffer, textureCoordBuffer, vertexIndexBuffer) {
+ webGl.gl.bindBuffer(webGl.gl.ARRAY_BUFFER, vertexPositionBuffer);
+ var vertices = [
+ this.p.x, this.p.y, this.p.z,
+ this.p.x + this.u.x, this.p.y + this.u.y, this.p.z + this.u.z,
+ this.p.x + this.u.x + this.v.x, this.p.y + this.u.y + this.v.y, this.p.z + this.u.z + this.v.z,
+ this.p.x + this.v.x, this.p.y + this.v.y, this.p.z + this.v.z
+ ];
+ webGl.gl.bufferData(webGl.gl.ARRAY_BUFFER, new Float32Array (vertices), webGl.gl.STATIC_DRAW);
+
+ webGl.gl.activeTexture(webGl.gl.TEXTURE0);
+ webGl.gl.bindTexture(webGl.gl.TEXTURE_2D, this.texture);
+ webGl.gl.uniform1i(webGl.shaderProgram.samplerUniform, 0);
+
+ webGl.gl.bindBuffer(webGl.gl.ELEMENT_ARRAY_BUFFER, vertexIndexBuffer);
+ webGl.gl.drawElements(webGl.gl.TRIANGLES, 6, webGl.gl.UNSIGNED_SHORT, 0);
+
+ webGl.gl.bindTexture(webGl.gl.TEXTURE_2D, null);
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a textured quad scene.
+ *
+ * @param {bigshot.WebGL} webGl the webGl instance to use for rendering.
+ *
+ * @class A "scene" consisting of a number of quads, all with
+ * a unique texture. Used by the {@link bigshot.VRPanorama} to render the VR cube.
+ *
+ * @see bigshot.WebGLTexturedQuad
+ */
+bigshot.WebGLTexturedQuadScene = function (webGl, buffers) {
+ this.quads = new Array ();
+ this.webGl = webGl;
+ this.buffers = buffers;
+}
+
+bigshot.WebGLTexturedQuadScene.prototype = {
+ /**
+ * Adds a new quad to the scene.
+ */
+ addQuad : function (quad) {
+ this.quads.push (quad);
+ },
+
+ /**
+ * Renders all quads.
+ */
+ render : function () {
+ var b = this.buffers.get ();
+ var vertexPositionBuffer = b.vertexPositionBuffer;
+ var textureCoordBuffer = b.textureCoordBuffer;
+ var vertexIndexBuffer = b.vertexIndexBuffer;
+
+ this.webGl.setMatrixUniforms();
+
+ for (var i = 0; i < this.quads.length; ++i) {
+ this.quads[i].render (this.webGl, vertexPositionBuffer, textureCoordBuffer, vertexIndexBuffer);
+ }
+ }
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new VR panorama parameter object and populates it with default values for
+ * all values not explicitly given.
+ *
+ * @class VRPanoramaParameters parameter object.
+ * You need not set any fields that can be read from the image descriptor that
+ * MakeImagePyramid creates. See the {@link bigshot.VRPanorama}
+ * documentation for required parameters.
+ *
+ * <p>Usage:
+ *
+ * @example
+ * var bvr = new bigshot.VRPanorama (
+ * new bigshot.VRPanoramaParameters ({
+ * basePath : "/bigshot.php?file=myvr.bigshot",
+ * fileSystemType : "archive",
+ * container : document.getElementById ("bigshot_canvas")
+ * }));
+ * @param values named parameter map, see the fields below for parameter names and types.
+ * @see bigshot.VRPanorama
+ */
+bigshot.VRPanoramaParameters = function (values) {
+ /**
+ * Size of low resolution preview image along the longest image
+ * dimension. The preview is assumed to have the same aspect
+ * ratio as the full image (specified by width and height).
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ * @public
+ */
+ this.posterSize = 0;
+
+ /**
+ * Url for the image tile to show while the tile is loading and no
+ * low-resolution preview is available.
+ *
+ * @default <code>null</code>, which results in an all-black image
+ * @type String
+ * @public
+ */
+ this.emptyImage = null;
+
+ /**
+ * Suffix to append to the tile filenames. Typically <code>".jpg"</code> or
+ * <code>".png"</code>.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type String
+ */
+ this.suffix = null;
+
+ /**
+ * The width of the full image; in pixels.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ */
+ this.width = 0;
+
+ /**
+ * The height of the full image; in pixels.
+ *
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ * @type int
+ */
+ this.height = 0;
+
+ /**
+ * For {@link bigshot.VRPanorama}, the {@code div} to render into.
+ *
+ * @type HTMLDivElement
+ */
+ this.container = null;
+
+ /**
+ * The maximum number of times to split a cube face into four quads.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.maxTesselation = -1;
+
+ /**
+ * Size of one tile in pixels.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.tileSize = 0;
+
+ /**
+ * Tile overlap. Not implemented.
+ *
+ * @type int
+ * @default <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ */
+ this.overlap = 0;
+
+ /**
+ * Base path for the image. This is filesystem dependent; but for the two most common cases
+ * the following should be set
+ *
+ * <ul>
+ * <li><b>archive</b>= The basePath is <code>"&lt;path&gt;/bigshot.php?file=&lt;path-to-bigshot-archive-relative-to-bigshot.php&gt;"</code>;
+ * for example; <code>"/bigshot.php?file=images/bigshot-sample.bigshot"</code>.
+ * <li><b>folder</b>= The basePath is <code>"&lt;path-to-image-folder&gt;"</code>;
+ * for example; <code>"/images/bigshot-sample"</code>.
+ * </ul>
+ *
+ * @type String
+ */
+ this.basePath = null;
+
+ /**
+ * The file system type. Used to create a filesystem instance unless
+ * the fileSystem field is set. Possible values are <code>"archive"</code>,
+ * <code>"folder"</code> or <code>"dzi"</code>.
+ *
+ * @type String
+ * @default "folder"
+ */
+ this.fileSystemType = "folder";
+
+ /**
+ * A reference to a filesystem implementation. If set; it overrides the
+ * fileSystemType field.
+ *
+ * @default set depending on value of bigshot.VRPanoramaParameters#fileSystemType
+ * @type bigshot.FileSystem
+ */
+ this.fileSystem = null;
+
+ /**
+ * Object used to load data files.
+ *
+ * @default bigshot.DefaultDataLoader
+ * @type bigshot.DataLoader
+ */
+ this.dataLoader = new bigshot.DefaultDataLoader ();
+
+ /**
+ * The maximum magnification for the texture tiles making up the VR cube.
+ * Used for level-of-detail tesselation.
+ * A value of 1.0 means that textures will never be stretched (one texture pixel will
+ * always be at most one screen pixel), unless there is no more detailed texture available.
+ * A value of 2.0 means that textures may be stretched at most 2x (one texture pixel
+ * will always be at most 2x2 screen pixels)
+ * The bigger the value, the less texture data is required, but quality suffers.
+ *
+ * @type number
+ * @default 1.0
+ */
+ this.maxTextureMagnification = 1.0;
+
+ /**
+ * The WebGL texture filter to use for magnifying textures.
+ * Possible values are all values valid for <code>TEXTURE_MAG_FILTER</code>.
+ * <code>null</code> means <code>NEAREST</code>.
+ *
+ * @default null / NEAREST.
+ */
+ this.textureMagFilter = null;
+
+ /**
+ * The WebGL texture filter to use for supersampling (minifying) textures.
+ * Possible values are all values valid for <code>TEXTURE_MIN_FILTER</code>.
+ * <code>null</code> means <code>NEAREST</code>.
+ *
+ * @default null / NEAREST.
+ */
+ this.textureMinFilter = null;
+
+ /**
+ * Minimum vertical field of view in degrees.
+ *
+ * @default 2.0
+ * @type number
+ */
+ this.minFov = 2.0;
+
+ /**
+ * Maximum vertical field of view in degrees.
+ *
+ * @default 90.0
+ * @type number
+ */
+ this.maxFov = 90;
+
+ /**
+ * Minimum pitch in degrees.
+ *
+ * @default -90
+ * @type number
+ */
+ this.minPitch = -90;
+
+ /**
+ * Maximum pitch in degrees.
+ *
+ * @default 90.0
+ * @type number
+ */
+ this.maxPitch = 90;
+
+ /**
+ * Minimum yaw in degrees. The number is interpreted modulo 360.
+ * The default value, -360, is just to make sure that we won't accidentally
+ * trip it. If the number is set to something in the interval 0-360,
+ * the autoRotate function will pan back and forth.
+ *
+ * @default -360
+ * @type number
+ */
+ this.minYaw = -360;
+
+ /**
+ * Maximum yaw in degrees. The number is interpreted modulo 360.
+ * The default value, 720, is just to make sure that we won't accidentally
+ * trip it. If the number is set to something in the interval 0-360,
+ * the autoRotate function will pan back and forth.
+ *
+ * @default 720.0
+ * @type number
+ */
+ this.maxYaw = 720;
+
+ /**
+ * Transform offset for yaw.
+ * @default 0.0
+ * @type number
+ */
+ this.yawOffset = 0.0;
+
+ /**
+ * Transform offset for pitch.
+ * @default 0.0
+ * @type number
+ */
+ this.pitchOffset = 0.0;
+
+ /**
+ * Transform offset for roll.
+ * @default 0.0
+ * @type number
+ */
+ this.rollOffset = 0.0;
+
+ /**
+ * Function to call when all six cube faces have loaded the base texture level
+ * and can be rendered.
+ *
+ * @type function()
+ * @default null
+ */
+ this.onload = null;
+
+ /**
+ * The rendering back end to use.
+ * Values are "css" and "webgl".
+ *
+ * @type String
+ * @default null
+ */
+ this.renderer = null;
+
+ /**
+ * Controls whether the panorama can be "flung" by quickly dragging and releasing.
+ *
+ * @type boolean
+ * @default true
+ */
+ this.fling = true;
+
+ /**
+ * Controls the decay of the "flinging" animation. The fling animation decays
+ * as 2^(-flingScale * t) where t is the time in milliseconds since the animation started.
+ * For the animation to decay to half-speed in X seconds,
+ * flingScale should then be set to 1 / (X*1000).
+ *
+ * @type float
+ * @default 0.004
+ */
+ this.flingScale = 0.004;
+
+ if (values) {
+ for (var k in values) {
+ this[k] = values[k];
+ }
+ }
+
+ this.merge = function (values, overwrite) {
+ for (var k in values) {
+ if (overwrite || !this[k]) {
+ this[k] = values[k];
+ }
+ }
+ }
+ return this;
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new VR panorama in a canvas. <b>Requires WebGL or CSS3D support.</b>
+ * (Note: See {@link bigshot.VRPanorama#dispose} for important information.)
+ *
+ * <h3 id="creating-a-cubemap">Creating a Cube Map</h3>
+ *
+ * <p>The panorama consists of six image pyramids, one for each face of the VR cube.
+ * Due to restrictions in WebGL, each texture tile must have a power-of-two (POT) size -
+ * that is, 2, 4, ..., 128, 256, etc. Furthermore, due to the way the faces are tesselated
+ * the largest image must consist of POT x POT tiles. The final restriction is that the
+ * tiles must overlap for good seamless results.
+ *
+ * <p>The MakeImagePyramid has some sensible defaults built-in. If you just use the
+ * command line:
+ *
+ * <code><pre>
+ * java -jar bigshot.jar input.jpg temp/dzi \
+ * --preset dzi-cubemap \
+ * --format folders
+ * </pre></code>
+ *
+ * <p>You will get 2034 pixels per face, and a tile size of 256 pixels with 2 pixels
+ * overlap. If you don't like that, you can use the <code>overlap</code>, <code>face-size</code>
+ * and <code>tile-size</code> parameters. Let's take these one by one:
+ *
+ * <ul>
+ * <li><p><code>overlap</code>: Overlap defines how much tiles should overlap, just to avoid
+ * seams in the rendered results caused by finite numeric precision. The default is <b>2</b>, which
+ * I've found works great for me.</p></li>
+ * <li><p><code>tile-size</code>: First you need to decide what POT size the output should be.
+ * Then subtract the overlap value. For example, if you set overlap to 1, <code>tile-size</code>
+ * could be 127, 255, 511, or any 2<sup>n</sup>-1 value.</p></li>
+ * <li><p><code>face-size</code>: Finally, we decide on a size for the full cube face. This should be
+ * tile-size * 2<sup>n</sup>. Let's say we set n=3, which makes each face 8x8 tiles at the most zoomed-in
+ * level. For a tile-size of 255, then, face-size is 255*2<sup>3</sup> = 255*8 = <b>2040</b>.</p></li>
+ * </ul>
+ *
+ * <p>A command line for the hypothetical scenario above would be:
+ *
+ * <code><pre>
+ * java -jar bigshot.jar input.jpg temp/dzi \
+ * --preset dzi-cubemap \
+ * --overlap 1 \
+ * --tile-size 255 \
+ * --face-size 2040 \
+ * --format folders
+ * </pre></code>
+ *
+ * <p>If your tile size numbers don't add up, you'll get a warning like:
+ *
+ * <code><pre>
+ * WARNING: Resulting image tile size (tile-size + overlap) is not a power of two: 255
+ * </pre></code>
+ *
+ * <p>If your face size don't add up, you'll get another warning:
+ *
+ * <code><pre>
+ * WARNING: face-size is not an even multiple of tile-size: 2040 % 254 != 0
+ * </pre></code>
+ *
+ * <h3 id="integration-with-saladoplayer">Integration With SaladoPlayer</h3>
+ *
+ * <p><a href="http://panozona.com/wiki/">SaladoPlayer</a> is a cool
+ * Flash-based VR panorama viewer that can display Deep Zoom Images.
+ * It can be used as a fallback for Bigshot for browsers that don't
+ * support WebGL.
+ *
+ * <p>Since Bigshot can use a Deep Zoom Image (DZI) via a {@link bigshot.DeepZoomImageFileSystem}
+ * adapter, the common file format is DZI. There are two cases: The first is
+ * when the DZI is served up as a folder structure, the second when
+ * we pack the DZI into a Bigshot archive and serve it using bigshot.php.
+ *
+ * <h4>Serving DZI as Folders</h4>
+ *
+ * <p>This is an easy one. First, we generate the required DZIs:
+ *
+ * <code><pre>
+ * java -jar bigshot.jar input.jpg temp/dzi \
+ * --preset dzi-cubemap \
+ * --format folders
+ * </pre></code>
+ *
+ * <p>We'll assume that we have the six DZI folders in "temp/dzi", and that
+ * they have "face_" as a common prefix (which is what Bigshot's MakeImagePyramid
+ * outputs). So we have, for example, "temp/dzi/face_f.xml" and the tiles for face_f
+ * in "temp/dzi/face_f/". Set up Bigshot like this:
+ *
+ * <code><pre>
+ * bvr = new bigshot.VRPanorama (
+ * new bigshot.VRPanoramaParameters ({
+ * container : document.getElementById ("canvas"),
+ * basePath : "temp/dzi",
+ * fileSystemType : "dzi"
+ * }));
+ * </pre></code>
+ *
+ * <p>SaladoPlayer uses an XML config file, which in this case will
+ * look something like this:
+ *
+ * <code><pre>
+ * &lt;SaladoPlayer>
+ * &lt;global debug="false" firstPanorama="pano"/>
+ * &lt;panoramas>
+ * &lt;panorama id="pano" path="temp/dzi/face_f.xml"/>
+ * &lt;/panoramas>
+ * &lt;/SaladoPlayer>
+ * </pre></code>
+ *
+ * <h4>Serving DZI as Archive</h4>
+ *
+ * <p>This one is a bit more difficult. First we create a DZI as a bigshot archive:
+ *
+ * <code><pre>
+ * java -jar bigshot.jar input.jpg temp/dzi.bigshot \
+ * --preset dzi-cubemap \
+ * --format archive
+ * </pre></code>
+ *
+ * <p>We'll assume that we have our Bigshot archive at
+ * "temp/dzi.bigshot". For this we will use the "entry" parameter of bigshot.php
+ * to serve up the right files:
+ *
+ * <code><pre>
+ * bvr = new bigshot.VRPanorama (
+ * new bigshot.VRPanoramaParameters ({
+ * container : document.getElementById ("canvas"),
+ * basePath : "/bigshot.php?file=temp/dzi.bigshot&entry=",
+ * fileSystemType : "dzi"
+ * }));
+ * </pre></code>
+ *
+ * <p>SaladoPlayer uses an XML config file, which in this case will
+ * look something like this:
+ *
+ * <code><pre>
+ * &lt;SaladoPlayer>
+ * &lt;global debug="false" firstPanorama="pano"/>
+ * &lt;panoramas>
+ * &lt;panorama id="pano" path="/bigshot.php?file=dzi.bigshot&amp;amp;entry=face_f.xml"/>
+ * &lt;/panoramas>
+ * &lt;/SaladoPlayer>
+ * </pre></code>
+ *
+ * <h3>Usage example:</h3>
+ * @example
+ * var bvr = new bigshot.VRPanorama (
+ * new bigshot.VRPanoramaParameters ({
+ * basePath : "/bigshot.php?file=myvr.bigshot",
+ * fileSystemType : "archive",
+ * container : document.getElementById ("bigshot_canvas")
+ * }));
+ * @class A cube-map VR panorama.
+ * @extends bigshot.EventDispatcher
+ *
+ * @param {bigshot.VRPanoramaParameters} parameters the panorama parameters.
+ *
+ * @see bigshot.VRPanoramaParameters
+ */
+bigshot.VRPanorama = function (parameters) {
+ bigshot.EventDispatcher.call (this);
+
+ var that = this;
+
+ this.parameters = parameters;
+ this.maxTextureMagnification = parameters.maxTextureMagnification;
+ this.container = parameters.container;
+ this.browser = new bigshot.Browser ();
+ this.dragStart = null;
+ this.dragDistance = 0;
+ this.hotspots = [];
+ this.disposed = false;
+
+ this.transformOffsets = {
+ y : parameters.yawOffset,
+ p : parameters.pitchOffset,
+ r : parameters.rollOffset
+ };
+
+ /**
+ * Current camera state.
+ * @private
+ */
+ this.state = {
+ rotation : {
+ /**
+ * Pitch in degrees.
+ * @type float
+ * @private
+ */
+ p : 0.0,
+
+ /**
+ * Yaw in degrees.
+ * @type float
+ * @private
+ */
+ y : 0.0,
+
+ r : 0
+ },
+
+ /**
+ * Field of view (vertical) in degrees.
+ * @type float
+ * @private
+ */
+ fov : 45,
+
+ translation : {
+ /**
+ * Translation along X-axis.
+ * @private
+ * @type float
+ */
+ x : 0.0,
+
+ /**
+ * Translation along Y-axis.
+ * @private
+ * @type float
+ */
+ y : 0.0,
+
+ /**
+ * Translation along Z-axis.
+ * @private
+ * @type float
+ */
+ z : 0.0
+ }
+ };
+
+ /**
+ * Renderer wrapper.
+ * @private
+ * @type bigshot.VRRenderer
+ */
+ this.renderer = null;
+ if (this.parameters.renderer) {
+ if (this.parameters.renderer == "css") {
+ this.renderer = new bigshot.CSS3DVRRenderer (this.container);
+ } else if (this.parameters.renderer == "webgl") {
+ this.renderer = new bigshot.WebGLVRRenderer (this.container)
+ } else {
+ throw new Error ("Unknown renderer: " + this.parameters.renderer);
+ }
+ } else {
+ this.renderer =
+ bigshot.WebGLUtil.isWebGLSupported () ?
+ new bigshot.WebGLVRRenderer (this.container)
+ :
+ new bigshot.CSS3DVRRenderer (this.container);
+ }
+
+ /**
+ * List of render listeners to call at the start and end of each render.
+ *
+ * @private
+ */
+ this.renderListeners = new Array ();
+
+ this.renderables = new Array ();
+
+ /**
+ * Current value of the idle counter.
+ *
+ * @private
+ */
+ this.idleCounter = 0;
+
+ /**
+ * Maximum value of the idle counter before any idle events start,
+ * such as autorotation.
+ *
+ * @private
+ */
+ this.maxIdleCounter = -1;
+
+
+ /**
+ * Integer acting as a "permit". When the smoothRotate function
+ * is called, the current value is incremented and saved. If the number changes
+ * that particular call to smoothRotate stops. This way we avoid
+ * having multiple smoothRotate rotations going in parallel.
+ * @private
+ * @type int
+ */
+ this.smoothrotatePermit = 0;
+
+ /**
+ * Helper function to consume events.
+ * @private
+ */
+ var consumeEvent = function (event) {
+ if (event.preventDefault) {
+ event.preventDefault ();
+ }
+ return false;
+ };
+
+ /**
+ * Full screen handler.
+ *
+ * @private
+ */
+ this.fullScreenHandler = null;
+
+ this.renderAsapPermitTaken = false;
+
+ /**
+ * An element to use as reference when resizing the canvas element.
+ * If non-null, any onresize() calls will result in the canvas being
+ * resized to the size of this element.
+ *
+ * @private
+ */
+ this.sizeContainer = null;
+
+ /**
+ * The six cube faces.
+ *
+ * @type bigshot.VRFace[]
+ * @private
+ */
+ var facesInit = {
+ facesLeft : 6,
+ faceLoaded : function () {
+ this.facesLeft--;
+ if (this.facesLeft == 0) {
+ if (that.parameters.onload) {
+ that.parameters.onload ();
+ }
+ }
+ }
+ };
+ var onFaceLoad = function () {
+ facesInit.faceLoaded ()
+ };
+
+ this.vrFaces = new Array ();
+ this.vrFaces[0] = new bigshot.VRFace (this, "f", {x:-1, y:1, z:-1}, 2.0, {x:1, y:0, z:0}, {x:0, y:-1, z:0}, onFaceLoad);
+ this.vrFaces[1] = new bigshot.VRFace (this, "b", {x:1, y:1, z:1}, 2.0, {x:-1, y:0, z:0}, {x:0, y:-1, z:0}, onFaceLoad);
+ this.vrFaces[2] = new bigshot.VRFace (this, "l", {x:-1, y:1, z:1}, 2.0, {x:0, y:0, z:-1}, {x:0, y:-1, z:0}, onFaceLoad);
+ this.vrFaces[3] = new bigshot.VRFace (this, "r", {x:1, y:1, z:-1}, 2.0, {x:0, y:0, z:1}, {x:0, y:-1, z:0}, onFaceLoad);
+ this.vrFaces[4] = new bigshot.VRFace (this, "u", {x:-1, y:1, z:1}, 2.0, {x:1, y:0, z:0}, {x:0, y:0, z:-1}, onFaceLoad);
+ this.vrFaces[5] = new bigshot.VRFace (this, "d", {x:-1, y:-1, z:-1}, 2.0, {x:1, y:0, z:0}, {x:0, y:0, z:1}, onFaceLoad);
+
+ /**
+ * Helper function to translate touch events to mouse-like events.
+ * @private
+ */
+ var translateEvent = function (event) {
+ if (event.clientX) {
+ return event;
+ } else {
+ return {
+ clientX : event.changedTouches[0].clientX,
+ clientY : event.changedTouches[0].clientY
+ };
+ };
+ };
+
+ this.lastTouchStartAt = -1;
+
+ this.allListeners = {
+ "mousedown" : function (e) {
+ that.smoothRotate ();
+ that.resetIdle ();
+ that.dragMouseDown (e);
+ return consumeEvent (e);
+ },
+ "mouseup" : function (e) {
+ that.resetIdle ();
+ that.dragMouseUp (e);
+ return consumeEvent (e);
+ },
+ "mousemove" : function (e) {
+ that.resetIdle ();
+ that.dragMouseMove (e);
+ return consumeEvent (e);
+ },
+ "gesturestart" : function (e) {
+ that.gestureStart (e);
+ return consumeEvent (e);
+ },
+ "gesturechange" : function (e) {
+ that.gestureChange (e);
+ return consumeEvent (e);
+ },
+ "gestureend" : function (e) {
+ that.gestureEnd (e);
+ return consumeEvent (e);
+ },
+
+ "DOMMouseScroll" : function (e) {
+ that.resetIdle ();
+ that.mouseWheel (e);
+ return consumeEvent (e);
+ },
+ "mousewheel" : function (e) {
+ that.resetIdle ();
+ that.mouseWheel (e);
+ return consumeEvent (e);
+ },
+ "dblclick" : function (e) {
+ that.mouseDoubleClick (e);
+ return consumeEvent (e);
+ },
+
+ "touchstart" : function (e) {
+ that.smoothRotate ();
+ that.lastTouchStartAt = new Date ().getTime ();
+ that.resetIdle ();
+ that.dragMouseDown (translateEvent (e));
+ return consumeEvent (e);
+ },
+ "touchend" : function (e) {
+ that.resetIdle ();
+ var handled = that.dragMouseUp (translateEvent (e));
+ if (!handled && (that.lastTouchStartAt > new Date().getTime() - 350)) {
+ that.mouseDoubleClick (translateEvent (e));
+ }
+ that.lastTouchStartAt = -1;
+ return consumeEvent (e);
+ },
+ "touchmove" : function (e) {
+ if (that.dragDistance > 24) {
+ that.lastTouchStartAt = -1;
+ }
+ that.resetIdle ();
+ that.dragMouseMove (translateEvent (e));
+ return consumeEvent (e);
+ }
+ };
+ this.addEventListeners ();
+
+ /**
+ * Stub function to call onresize on this instance.
+ *
+ * @private
+ */
+ this.onresizeHandler = function (e) {
+ that.onresize ();
+ };
+
+ this.browser.registerListener (window, 'resize', this.onresizeHandler, false);
+ this.browser.registerListener (document.body, 'orientationchange', this.onresizeHandler, false);
+
+ this.setPitch (0.0);
+ this.setYaw (0.0);
+ this.setFov (45.0);
+}
+
+/*
+ * Statics
+ */
+
+/**
+ * When the mouse is pressed and dragged, the camera rotates
+ * proportionally to the length of the dragging.
+ *
+ * @constant
+ * @public
+ * @static
+ */
+bigshot.VRPanorama.DRAG_GRAB = "grab";
+
+/**
+ * When the mouse is pressed and dragged, the camera continuously
+ * rotates with a speed that is proportional to the length of the
+ * dragging.
+ *
+ * @constant
+ * @public
+ * @static
+ */
+bigshot.VRPanorama.DRAG_PAN = "pan";
+
+/**
+ * @name bigshot.VRPanorama.RenderState
+ * @class The state the renderer is in when a {@link bigshot.VRPanorama.RenderListener} is called.
+ *
+ * @see bigshot.VRPanorama.ONRENDER_BEGIN
+ * @see bigshot.VRPanorama.ONRENDER_END
+ */
+
+/**
+ * A RenderListener state parameter value used at the start of each render.
+ *
+ * @constant
+ * @public
+ * @static
+ * @type bigshot.VRPanorama.RenderState
+ */
+bigshot.VRPanorama.ONRENDER_BEGIN = 0;
+
+/**
+ * A RenderListener state parameter value used at the end of each render.
+ *
+ * @constant
+ * @public
+ * @static
+ * @type bigshot.VRPanorama.RenderState
+ */
+bigshot.VRPanorama.ONRENDER_END = 1;
+
+/**
+ * A RenderListener cause parameter indicating that a previously requested
+ * texture has loaded and a render is forced. The data parameter is not used.
+ *
+ * @constant
+ * @public
+ * @static
+ * @param {bigshot.VRPanorama.RenderCause}
+ */
+bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE = 0;
+
+/**
+ * @name bigshot.VRPanorama.RenderCause
+ * @class The reason why the {@link bigshot.VRPanorama} is being rendered.
+ * Due to the events outside of the panorama, the VR panorama may be forced to
+ * re-render itself. When this happens, the {@link bigshot.VRPanorama.RenderListener}s
+ * receive a constant indicating the cause of the rendering.
+ *
+ * @see bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE
+ */
+
+/**
+ * Specification for functions passed to {@link bigshot.VRPanorama#addRenderListener}.
+ *
+ * @name bigshot.VRPanorama.RenderListener
+ * @function
+ * @param {bigshot.VRPanorama.RenderState} state The state of the renderer. Can be {@link bigshot.VRPanorama.ONRENDER_BEGIN} or {@link bigshot.VRPanorama.ONRENDER_END}
+ * @param {bigshot.VRPanorama.RenderCause} [cause] The reason for rendering the scene. Can be undefined or {@link bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE}
+ * @param {Object} [data] An optional data object that is dependent on the cause. See the documentation
+ * for the different causes.
+ */
+
+/**
+ * Specification for functions passed to {@link bigshot.VRPanorama#addRenderable}.
+ *
+ * @name bigshot.VRPanorama.Renderable
+ * @function
+ * @param {bigshot.VRRenderer} renderer The renderer object to use.
+ * @param {bigshot.TexturedQuadScene} scene The scene to render into.
+ */
+
+/** */
+bigshot.VRPanorama.prototype = {
+ /**
+ * Adds a hotstpot.
+ *
+ * @param {bigshot.VRHotspot} hs the hotspot to add
+ */
+ addHotspot : function (hs) {
+ this.hotspots.push (hs);
+ },
+
+ /**
+ * Returns the {@link bigshot.VRPanoramaParameters} object used by this instance.
+ *
+ * @type bigshot.VRPanoramaParameters
+ */
+ getParameters : function () {
+ return this.parameters;
+ },
+
+ /**
+ * Sets the view translation.
+ *
+ * @param x translation of the viewer along the X axis
+ * @param y translation of the viewer along the Y axis
+ * @param z translation of the viewer along the Z axis
+ */
+ setTranslation : function (x, y, z) {
+ this.state.translation.x = x;
+ this.state.translation.y = y;
+ this.state.translation.z = z;
+ },
+
+ /**
+ * Returns the current view translation as an x-y-z triplet.
+ *
+ * @returns {number} x translation of the viewer along the X axis
+ * @returns {number} y translation of the viewer along the Y axis
+ * @returns {number} z translation of the viewer along the Z axis
+ */
+ getTranslation : function () {
+ return this.state.translation;
+ },
+
+ /**
+ * Sets the field of view.
+ *
+ * @param {number} fov the vertical field of view, in degrees
+ */
+ setFov : function (fov) {
+ fov = Math.min (this.parameters.maxFov, fov);
+ fov = Math.max (this.parameters.minFov, fov);
+ this.state.fov = fov;
+ },
+
+ /**
+ * Gets the field of view.
+ *
+ * @return {number} the vertical field of view, in degrees
+ */
+ getFov : function () {
+ return this.state.fov;
+ },
+
+ /**
+ * Returns the angle (yaw, pitch) for a given pixel coordinate.
+ *
+ * @param {number} x the x-coordinate of the pixel, measured in pixels
+ * from the left edge of the panorama.
+ * @param {number} y the y-coordinate of the pixel, measured in pixels
+ * from the top edge of the panorama.
+ * @return {number} .yaw the yaw angle of the pixel (0 &lt;= yaw &lt; 360)
+ * @return {number} .pitch the pitch angle of the pixel (-180 &lt;= pitch &lt;= 180)
+ *
+ * @example
+ * var container = ...; // an HTML element
+ * var pano = ...; // a bigshot.VRPanorama
+ * ...
+ * container.addEventListener ("click", function (e) {
+ * var clickX = e.clientX - container.offsetX;
+ * var clickY = e.clientY - container.offsetY;
+ * var polar = pano.screenToPolar (clickX, clickY);
+ * alert ("You clicked at: " +
+ * "Yaw: " + polar.yaw +
+ * " Pitch: " + polar.pitch);
+ * });
+ */
+ screenToPolar : function (x, y) {
+ var dray = this.screenToRayDelta (x, y);
+ var ray = $V([dray.x, dray.y, dray.z, 1.0]);
+
+ ray = Matrix.RotationX (this.getPitch () * Math.PI / 180.0).ensure4x4 ().x (ray);
+ ray = Matrix.RotationY (-this.getYaw () * Math.PI / 180.0).ensure4x4 ().x (ray);
+
+ var dx = ray.e(1);
+ var dy = ray.e(2);
+ var dz = ray.e(3);
+
+ var dxz = Math.sqrt (dx * dx + dz * dz);
+
+ var dyaw = Math.atan2 (dx, -dz) * 180 / Math.PI;
+ var dpitch = Math.atan2 (dy, dxz) * 180 / Math.PI;
+
+ var res = {};
+ res.yaw = (dyaw + 360) % 360.0;
+ res.pitch = dpitch;
+
+ return res;
+ },
+
+ /**
+ * Restricts the pitch value to be between the minPitch and maxPitch parameters.
+ *
+ * @param {number} p the pitch value
+ * @returns the constrained pitch value.
+ */
+ snapPitch : function (p) {
+ p = Math.min (this.parameters.maxPitch, p);
+ p = Math.max (this.parameters.minPitch, p);
+ return p;
+ },
+
+ /**
+ * Sets the current camera pitch.
+ *
+ * @param {number} p the pitch, in degrees
+ */
+ setPitch : function (p) {
+ this.state.rotation.p = this.snapPitch (p);
+ },
+
+ /**
+ * Subtraction mod 360, sort of...
+ *
+ * @private
+ * @returns the angular distance with smallest magnitude to add to p0 to get to p1 % 360
+ */
+ circleDistance : function (p0, p1) {
+ if (p1 > p0) {
+ // p1 is somewhere clockwise to p0
+ var d1 = (p1 - p0); // move clockwise
+ var d2 = ((p1 - 360) - p0); // move counterclockwise, first -p0 to get to 0, then p1 - 360.
+ return Math.abs (d1) < Math.abs (d2) ? d1 : d2;
+ } else {
+ // p1 is somewhere counterclockwise to p0
+ var d1 = (p1 - p0); // move counterclockwise
+ var d2 = (360 - p0) + p1; // move clockwise, first (360-p= to get to 0, then another p1 degrees
+ return Math.abs (d1) < Math.abs (d2) ? d1 : d2;
+ }
+ },
+
+ /**
+ * Subtraction mod 360, sort of...
+ *
+ * @private
+ */
+ circleSnapTo : function (p, p1, p2) {
+ var d1 = this.circleDistance (p, p1);
+ var d2 = this.circleDistance (p, p2);
+ return Math.abs (d1) < Math.abs (d2) ? p1 : p2;
+ },
+
+ /**
+ * Constrains a yaw value to the required minimum and maximum values.
+ *
+ * @private
+ */
+ snapYaw : function (y) {
+ y %= 360;
+ if (y < 0) {
+ y += 360;
+ }
+ if (this.parameters.minYaw < this.parameters.maxYaw) {
+ if (y > this.parameters.maxYaw || y < this.parameters.minYaw) {
+ y = circleSnapTo (y, this.parameters.minYaw, this.parameters.maxYaw);
+ }
+ } else {
+ // The only time when minYaw > maxYaw is when the interval
+ // contains the 0 angle.
+ if (y > this.parameters.minYaw) {
+ // ok, we're somewhere between minYaw and 0.0
+ } else if (y > this.parameters.maxYaw) {
+ // we're somewhere between maxYaw and minYaw
+ // (but on the wrong side).
+ // figure out the nearest point and snap to it
+ y = circleSnapTo (y, this.parameters.minYaw, this.parameters.maxYaw);
+ } else {
+ // ok, we're somewhere between 0.0 and maxYaw
+ }
+ }
+ return y;
+ },
+
+ /**
+ * Sets the current camera yaw. The yaw is normalized between
+ * 0 <= y < 360.
+ *
+ * @param {number} y the yaw, in degrees
+ */
+ setYaw : function (y) {
+ this.state.rotation.y = this.snapYaw (y);
+ },
+
+ /**
+ * Gets the current camera yaw.
+ *
+ * @return {number} the yaw, in degrees
+ */
+ getYaw : function () {
+ return this.state.rotation.y;
+ },
+
+ /**
+ * Gets the current camera pitch.
+ *
+ * @return {number} the pitch, in degrees
+ */
+ getPitch : function () {
+ return this.state.rotation.p;
+ },
+
+ /**
+ * Unregisters event handlers and other page-level hooks. The client need not call this
+ * method unless bigshot images are created and removed from the page
+ * dynamically. In that case, this method must be called when the client wishes to
+ * free the resources allocated by the image. Otherwise the browser will garbage-collect
+ * all resources automatically.
+ * @public
+ */
+ dispose : function () {
+ this.disposed = true;
+ this.browser.unregisterListener (window, "resize", this.onresizeHandler, false);
+ this.browser.unregisterListener (document.body, "orientationchange", this.onresizeHandler, false);
+ this.removeEventListeners ();
+
+ for (var i = 0; i < this.vrFaces.length; ++i) {
+ this.vrFaces[i].dispose ();
+ }
+ this.renderer.dispose ();
+ },
+
+ /**
+ * Creates and initializes a {@link bigshot.VREvent} object.
+ * The {@link bigshot.VREvent#ray}, {@link bigshot.VREvent#yaw},
+ * {@link bigshot.VREvent#pitch}, {@link bigshot.Event#target} and
+ * {@link bigshot.Event#currentTarget} fields are set.
+ *
+ * @param {Object} data the data object for the event
+ * @param {number} data.clientX the client x-coordinate of the event
+ * @param {number} data.clientY the client y-coordinate of the event
+ * @returns the new event object
+ * @type bigshot.VREvent
+ */
+ createVREventData : function (data) {
+ var elementPos = this.browser.getElementPosition (this.container);
+ data.localX = data.clientX - elementPos.x;
+ data.localY = data.clientY - elementPos.y;
+
+ data.ray = this.screenToRay (data.localX, data.localY);
+
+ var polar = this.screenToPolar (data.localX, data.localY);
+ data.yaw = polar.yaw;
+ data.pitch = polar.pitch;
+ data.target = this;
+ data.currentTarget = this;
+
+ return new bigshot.VREvent (data);
+ },
+
+
+ /**
+ * Sets up transformation matrices etc. Calls all render listeners with a state parameter
+ * of {@link bigshot.VRPanorama.ONRENDER_BEGIN}.
+ *
+ * @private
+ *
+ * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ */
+ beginRender : function (cause, data) {
+ this.onrender (bigshot.VRPanorama.ONRENDER_BEGIN, cause, data);
+ this.renderer.beginRender (this.state.rotation, this.state.fov, this.state.translation, this.transformOffsets);
+ },
+
+
+ /**
+ * Add a function that will be called at various times during the render.
+ *
+ * @param {bigshot.VRPanorama.RenderListener} listener the listener function
+ */
+ addRenderListener : function (listener) {
+ var rl = new Array ();
+ rl = rl.concat (this.renderListeners);
+ rl.push (listener);
+ this.renderListeners = rl;
+ },
+
+ /**
+ * Removes a function that will be called at various times during the render.
+ *
+ * @param {bigshot.VRPanorama.RenderListener} listener the listener function
+ */
+ removeRenderListener : function (listener) {
+ var rl = new Array ();
+ rl = rl.concat (this.renderListeners);
+ for (var i = 0; i < rl.length; ++i) {
+ if (rl[i] === listener) {
+ rl.splice (i, 1);
+ break;
+ }
+ }
+ this.renderListeners = rl;
+ },
+
+ /**
+ * Called at the start and end of every render.
+ *
+ * @event
+ * @private
+ * @type function()
+ * @param {bigshot.VRPanorama.RenderState} state the current render state
+ */
+ onrender : function (state, cause, data) {
+ var rl = this.renderListeners;
+ for (var i = 0; i < rl.length; ++i) {
+ rl[i](state, cause, data);
+ }
+ },
+
+ /**
+ * Performs per-render cleanup. Calls all render listeners with a state parameter
+ * of {@link bigshot.VRPanorama.ONRENDER_END}.
+ *
+ * @private
+ *
+ * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ */
+ endRender : function (cause, data) {
+ for (var f in this.vrFaces) {
+ this.vrFaces[f].endRender ();
+ }
+ this.renderer.endRender ();
+ this.onrender (bigshot.VRPanorama.ONRENDER_END, cause, data);
+ },
+
+ /**
+ * Add a function that will be called to render any additional quads.
+ *
+ * @param {bigshot.VRPanorama.Renderable} renderable The renderable, a function responsible for
+ * rendering additional scene elements.
+ */
+ addRenderable : function (renderable) {
+ var rl = new Array ();
+ rl.concat (this.renderables);
+ rl.push (renderable);
+ this.renderables = rl;
+ },
+
+ /**
+ * Removes a function that will be called to render any additional quads.
+ *
+ * @param {bigshot.VRPanorama.Renderable} renderable The renderable added using
+ * {@link bigshot.VRPanorama#addRenderable}.
+ */
+ removeRenderable : function (renderable) {
+ var rl = new Array ();
+ rl.concat (this.renderables);
+ for (var i = 0; i < rl.length; ++i) {
+ if (rl[i] == listener) {
+ rl.splice (i, 1);
+ break;
+ }
+ }
+ this.renderables = rl;
+ },
+
+ /**
+ * Renders the VR cube.
+ *
+ * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ */
+ render : function (cause, data) {
+ if (!this.disposed) {
+ this.beginRender (cause, data);
+
+ var scene = this.renderer.createTexturedQuadScene ();
+
+ for (var f in this.vrFaces) {
+ this.vrFaces[f].render (scene);
+ }
+
+ for (var i = 0; i < this.renderables.length; ++i) {
+ this.renderables[i](this.renderer, scene);
+ }
+
+ scene.render ();
+
+ for (var i = 0; i < this.hotspots.length; ++i) {
+ this.hotspots[i].layout ();
+ }
+
+ this.endRender (cause, data);
+ }
+ },
+
+ /**
+ * Render updated faces. Called as tiles are loaded from the server.
+ *
+ * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+ */
+ renderUpdated : function (cause, data) {
+ if (!this.disposed && this.renderer.supportsUpdate ()) {
+ this.beginRender (cause, data);
+
+ var scene = this.renderer.createTexturedQuadScene ();
+
+ for (var f in this.vrFaces) {
+ if (this.vrFaces[f].isUpdated ()) {
+ this.vrFaces[f].render (scene);
+ }
+ }
+
+ scene.render ();
+
+ for (var i = 0; i < this.hotspots.length; ++i) {
+ this.hotspots[i].layout ();
+ }
+
+ this.endRender (cause, data);
+ } else {
+ this.render (cause, data);
+ }
+ },
+
+ /**
+ * The current drag mode.
+ *
+ * @private
+ */
+ dragMode : bigshot.VRPanorama.DRAG_GRAB,
+
+ /**
+ * Sets the mouse dragging mode.
+ *
+ * @param mode one of {@link bigshot.VRPanorama.DRAG_PAN} or {@link bigshot.VRPanorama.DRAG_GRAB}.
+ */
+ setDragMode : function (mode) {
+ this.dragMode = mode;
+ },
+
+ addEventListeners : function () {
+ for (var k in this.allListeners) {
+ this.browser.registerListener (this.container, k, this.allListeners[k], false);
+ }
+ },
+
+ removeEventListeners : function () {
+ for (var k in this.allListeners) {
+ this.browser.unregisterListener (this.container, k, this.allListeners[k], false);
+ }
+ },
+
+ dragMouseDown : function (e) {
+ this.dragStart = {
+ clientX : e.clientX,
+ clientY : e.clientY
+ };
+ this.dragLast = {
+ clientX : e.clientX,
+ clientY : e.clientY,
+ dx : 0,
+ dy : 0,
+ dt : 1000000,
+ time : new Date ().getTime ()
+ };
+ this.dragDistance = 0;
+ },
+
+ dragMouseUp : function (e) {
+ // In case we got a mouse up with out a previous mouse down,
+ // for example, double-click on title bar to maximize the
+ // window
+ if (this.dragStart == null || this.dragLast == null) {
+ this.dragStart = null;
+ this.dragLast = null;
+ return;
+ }
+
+ this.dragStart = null;
+ var dx = this.dragLast.dx;
+ var dy = this.dragLast.dy;
+ var ds = Math.sqrt (dx * dx + dy * dy);
+ var dt = this.dragLast.dt;
+ var dtb = new Date ().getTime () - this.dragLast.time;
+ this.dragLast = null;
+
+ var v = dt > 0 ? (ds / dt) : 0;
+ if (v > 0.05 && dtb < 250 && dt > 20 && this.parameters.fling) {
+ var scale = this.state.fov / this.renderer.getViewportHeight ();
+
+ var t0 = new Date ().getTime ();
+
+ var flingScale = this.parameters.flingScale;
+
+ dx /= dt;
+ dy /= dt;
+
+ this.smoothRotate (function (dat) {
+ var dt = new Date ().getTime () - t0;
+ var fact = Math.pow (2, -dt * flingScale);
+ var d = (dx * dat * scale) * fact;
+ return fact > 0.01 ? d : null;
+ }, function (dat) {
+ var dt = new Date ().getTime () - t0;
+ var fact = Math.pow (2, -dt * flingScale);
+ var d = (dy * dat * scale) * fact;
+ return fact > 0.01 ? d : null;
+ }, function () {
+ return null;
+ });
+ return true;
+ } else {
+ this.smoothRotate ();
+ return false;
+ }
+ },
+
+ dragMouseMove : function (e) {
+ if (this.dragStart != null && this.currentGesture == null) {
+ if (this.dragMode == bigshot.VRPanorama.DRAG_GRAB) {
+ this.smoothRotate ();
+ var scale = this.state.fov / this.renderer.getViewportHeight ();
+ var dx = e.clientX - this.dragStart.clientX;
+ var dy = e.clientY - this.dragStart.clientY;
+ this.dragDistance += dx + dy;
+ this.setYaw (this.getYaw () - dx * scale);
+ this.setPitch (this.getPitch () - dy * scale);
+ this.renderAsap ();
+ this.dragStart = e;
+ var dt = new Date ().getTime () - this.dragLast.time;
+ if (dt > 20) {
+ this.dragLast = {
+ dx : this.dragLast.clientX - e.clientX,
+ dy : this.dragLast.clientY - e.clientY,
+ dt : dt,
+ clientX : e.clientX,
+ clientY : e.clientY,
+ time : new Date ().getTime ()
+ };
+ }
+ } else {
+ var scale = 0.1 * this.state.fov / this.renderer.getViewportHeight ();
+ var dx = e.clientX - this.dragStart.clientX;
+ var dy = e.clientY - this.dragStart.clientY;
+ this.dragDistance = dx + dy;
+ this.smoothRotate (
+ function () {
+ return dx * scale;
+ },
+ function () {
+ return dy * scale;
+ });
+ }
+ }
+ },
+
+ onMouseDoubleClick : function (e, x, y) {
+ var eventData = this.createVREventData ({
+ type : "dblclick",
+ clientX : e.clientX,
+ clientY : e.clientY
+ });
+ this.fireEvent ("dblclick", eventData);
+ if (!eventData.defaultPrevented) {
+ this.smoothRotateToXY (x, y);
+ }
+ },
+
+ mouseDoubleClick : function (e) {
+ var pos = this.browser.getElementPosition (this.container);
+ this.onMouseDoubleClick (e, e.clientX - pos.x, e.clientY - pos.y);
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ gestureStart : function (event) {
+ this.currentGesture = {
+ startFov : this.getFov (),
+ scale : event.scale
+ };
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ gestureEnd : function (event) {
+ this.currentGesture = null;
+ },
+
+ /**
+ * Begins a potential drag event.
+ *
+ * @private
+ */
+ gestureChange : function (event) {
+ if (this.currentGesture) {
+ var newFov = this.currentGesture.startFov / event.scale;
+ this.setFov (newFov);
+ this.renderAsap ();
+ }
+ },
+
+ /**
+ * Sets the maximum texture magnification.
+ *
+ * @param {number} v the maximum texture magnification
+ * @see bigshot.VRPanoramaParameters#maxTextureMagnification
+ */
+ setMaxTextureMagnification : function (v) {
+ this.maxTextureMagnification = v;
+ },
+
+ /**
+ * Gets the current maximum texture magnification.
+ *
+ * @type number
+ * @see bigshot.VRPanoramaParameters#maxTextureMagnification
+ */
+ getMaxTextureMagnification : function () {
+ return this.maxTextureMagnification;
+ },
+
+ /**
+ * Computes the minimum field of view where the resulting image will not
+ * have to stretch the textures more than given by the
+ * {@link bigshot.VRPanoramaParameters#maxTextureMagnification} parameter.
+ *
+ * @type number
+ * @return the minimum FOV, below which it is necessary to stretch the
+ * vr cube texture more than the given {@link bigshot.VRPanoramaParameters#maxTextureMagnification}
+ */
+ getMinFovFromViewportAndImage : function () {
+ var halfHeight = this.renderer.getViewportHeight () / 2;
+
+ var minFaceHeight = this.vrFaces[0].parameters.height;
+ for (var i in this.vrFaces) {
+ minFaceHeight = Math.min (minFaceHeight, this.vrFaces[i].parameters.height);
+ }
+
+ var edgeSizeY = this.maxTextureMagnification * minFaceHeight / 2;
+
+ var wy = halfHeight / edgeSizeY;
+
+ var mz = Math.atan (wy) * 180 / Math.PI;
+
+ return mz * 2;
+ },
+
+ /**
+ * Transforms screen coordinates to a world-coordinate ray.
+ * @private
+ */
+ screenToRay : function (x, y) {
+ var dray = this.screenToRayDelta (x, y);
+ var ray = this.renderer.transformToWorld (dray);
+ ray = Matrix.RotationY (-this.transformOffsets.y * Math.PI / 180.0).ensure4x4 ().xPoint3Dhom1 (ray);
+ ray = Matrix.RotationX (-this.transformOffsets.p * Math.PI / 180.0).ensure4x4 ().xPoint3Dhom1 (ray);
+ ray = Matrix.RotationZ (-this.transformOffsets.r * Math.PI / 180.0).ensure4x4 ().xPoint3Dhom1 (ray);
+ return ray;
+ },
+
+ /**
+ * @private
+ */
+ screenToRayDelta : function (x, y) {
+ var halfHeight = this.renderer.getViewportHeight () / 2;
+ var halfWidth = this.renderer.getViewportWidth () / 2;
+ var x = (x - halfWidth);
+ var y = (y - halfHeight);
+
+ var edgeSizeY = Math.tan ((this.state.fov / 2) * Math.PI / 180);
+ var edgeSizeX = edgeSizeY * this.renderer.getViewportWidth () / this.renderer.getViewportHeight ();
+
+ var wx = x * edgeSizeX / halfWidth;
+ var wy = y * edgeSizeY / halfHeight;
+ var wz = -1.0;
+
+ return {
+ x : wx,
+ y : wy,
+ z : wz
+ };
+ },
+
+ /**
+ * Smoothly rotates the panorama so that the
+ * point given by x and y, in pixels relative to the top left corner
+ * of the panorama, ends up in the center of the viewport.
+ *
+ * @param {int} x the x-coordinate, in pixels from the left edge
+ * @param {int} y the y-coordinate, in pixels from the top edge
+ */
+ smoothRotateToXY : function (x, y) {
+ var polar = this.screenToPolar (x, y);
+
+ this.smoothRotateTo (this.snapYaw (polar.yaw), this.snapPitch (polar.pitch), this.getFov (), this.state.fov / 200);
+ },
+
+ /**
+ * Gives the step to take to slowly approach the
+ * target value.
+ *
+ * @example
+ * current = current + this.ease (current, target, 1.0);
+ * @private
+ */
+ ease : function (current, target, speed, snapFrom) {
+ var easingFrom = speed * 40;
+ if (!snapFrom) {
+ snapFrom = speed / 5;
+ }
+ var ignoreFrom = speed / 1000;
+
+ var distance = current - target;
+ if (distance > easingFrom) {
+ distance = -speed;
+ } else if (distance < -easingFrom) {
+ distance = speed;
+ } else if (Math.abs (distance) < snapFrom) {
+ distance = -distance;
+ } else if (Math.abs (distance) < ignoreFrom) {
+ distance = 0;
+ } else {
+ distance = - (speed * distance) / (easingFrom);
+ }
+ return distance;
+ },
+
+ /**
+ * Resets the "idle" clock.
+ * @private
+ */
+ resetIdle : function () {
+ this.idleCounter = 0;
+ },
+
+ /**
+ * Idle clock.
+ * @private
+ */
+ idleTick : function () {
+ if (this.maxIdleCounter < 0) {
+ return;
+ }
+ ++this.idleCounter;
+ if (this.idleCounter == this.maxIdleCounter) {
+ this.autoRotate ();
+ }
+ var that = this;
+ setTimeout (function () {
+ that.idleTick ();
+ }, 1000);
+ },
+
+ /**
+ * Sets the panorama to auto-rotate after a certain time has
+ * elapsed with no user interaction. Default is disabled.
+ *
+ * @param {int} delay the delay in seconds. Set to < 0 to disable
+ * auto-rotation when idle
+ */
+ autoRotateWhenIdle : function (delay) {
+ this.maxIdleCounter = delay;
+ this.idleCounter = 0;
+ if (delay < 0) {
+ return;
+ } else if (this.maxIdleCounter > 0) {
+ var that = this;
+ setTimeout (function () {
+ that.idleTick ();
+ }, 1000);
+ }
+ },
+
+ /**
+ * Starts auto-rotation of the camera. If the yaw is constrained,
+ * will pan back and forth between the yaw endpoints. Call
+ * {@link #smoothRotate}() to stop the rotation.
+ */
+ autoRotate : function () {
+ var that = this;
+ var scale = this.state.fov / 400;
+
+ var speed = scale;
+ var dy = speed;
+ this.smoothRotate (
+ function () {
+ var nextPos = that.getYaw () + dy;
+ if (that.parameters.minYaw < that.parameters.maxYaw) {
+ if (nextPos > that.parameters.maxYaw || nextPos < that.parameters.minYaw) {
+ dy = -dy;
+ }
+ } else {
+ // The only time when minYaw > maxYaw is when the interval
+ // contains the 0 angle.
+ if (nextPos > that.parameters.minYaw) {
+ // ok, we're somewhere between minYaw and 0.0
+ } else if (nextPos > that.parameters.maxYaw) {
+ dy = -dy;
+ } else {
+ // ok, we're somewhere between 0.0 and maxYaw
+ }
+ }
+ return dy;
+ }, function () {
+ return that.ease (that.getPitch (), 0.0, speed);
+ }, function () {
+ return that.ease (that.getFov (), 45.0, 0.1);
+ });
+ },
+
+ /**
+ * Smoothly rotates the panorama to the given state.
+ *
+ * @param {number} yaw the target yaw
+ * @param {number} pitch the target pitch
+ * @param {number} fov the target vertical field of view
+ * @param {number} the speed to rotate with
+ */
+ smoothRotateTo : function (yaw, pitch, fov, speed) {
+ var that = this;
+ this.smoothRotate (
+ function () {
+ var distance = that.circleDistance (yaw, that.getYaw ());
+ var d = -that.ease (0, distance, speed);
+ return Math.abs (d) > 0.01 ? d : null;
+ }, function () {
+ var d = that.ease (that.getPitch (), pitch, speed);
+ return Math.abs (d) > 0.01 ? d : null;
+ }, function () {
+ var d = that.ease (that.getFov (), fov, speed);
+ return Math.abs (d) > 0.01 ? d : null;
+ }
+ );
+ },
+
+
+ /**
+ * Smoothly rotates the camera. If all of the dp, dy and df functions are null, stops
+ * any smooth rotation.
+ *
+ * @param {function()} [dy] function giving the yaw increment for the next frame
+ * or null if no further yaw movement is required
+ * @param {function()} [dp] function giving the pitch increment for the next frame
+ * or null if no further pitch movement is required
+ * @param {function()} [df] function giving the field of view (degrees) increment
+ * for the next frame or null if no further fov adjustment is required
+ */
+ smoothRotate : function (dy, dp, df) {
+ ++this.smoothrotatePermit;
+ var savedPermit = this.smoothrotatePermit;
+ if (!dp && !dy && !df) {
+ return;
+ }
+
+ var that = this;
+ var fs = {
+ dy : dy,
+ dp : dp,
+ df : df,
+ t : new Date ().getTime ()
+ };
+ var stepper = function () {
+ if (that.smoothrotatePermit == savedPermit) {
+ var now = new Date ().getTime ();
+ var dat = now - fs.t;
+ fs.t = now;
+
+ var anyFunc = false;
+ if (fs.dy) {
+ var d = fs.dy(dat);
+ if (d != null) {
+ anyFunc = true;
+ that.setYaw (that.getYaw () + d);
+ } else {
+ fs.dy = null;
+ }
+ }
+
+ if (fs.dp) {
+ var d = fs.dp(dat);
+ if (d != null) {
+ anyFunc = true;
+ that.setPitch (that.getPitch () + d);
+ } else {
+ fs.dp = null;
+ }
+ }
+
+ if (fs.df) {
+ var d = fs.df(dat);
+ if (d != null) {
+ anyFunc = true;
+ that.setFov (that.getFov () + d);
+ } else {
+ fs.df = null;
+ }
+ }
+ that.render ();
+ if (anyFunc) {
+ that.browser.requestAnimationFrame (stepper, that.renderer.getElement ());
+ }
+ }
+ };
+ stepper ();
+ },
+
+ /**
+ * Translates mouse wheel events.
+ * @private
+ */
+ mouseWheel : function (event){
+ var delta = 0;
+ if (!event) /* For IE. */
+ event = window.event;
+ if (event.wheelDelta) { /* IE/Opera. */
+ delta = event.wheelDelta / 120;
+ /*
+ * In Opera 9, delta differs in sign as compared to IE.
+ */
+ if (window.opera)
+ delta = -delta;
+ } else if (event.detail) { /* Mozilla case. */
+ /*
+ * In Mozilla, sign of delta is different than in IE.
+ * Also, delta is multiple of 3.
+ */
+ delta = -event.detail;
+ }
+
+ /*
+ * If delta is nonzero, handle it.
+ * Basically, delta is now positive if wheel was scrolled up,
+ * and negative, if wheel was scrolled down.
+ */
+ if (delta) {
+ this.mouseWheelHandler (delta);
+ }
+
+ /*
+ * Prevent default actions caused by mouse wheel.
+ * That might be ugly, but we handle scrolls somehow
+ * anyway, so don't bother here..
+ */
+ if (event.preventDefault) {
+ event.preventDefault ();
+ }
+ event.returnValue = false;
+ },
+
+ /**
+ * Utility function to interpret mouse wheel events.
+ * @private
+ */
+ mouseWheelHandler : function (delta) {
+ var that = this;
+ var target = null;
+ if (delta > 0) {
+ if (this.getFov () > this.parameters.minFov) {
+ target = this.getFov () * 0.9;
+ }
+ }
+ if (delta < 0) {
+ if (this.getFov () < this.parameters.maxFov) {
+ target = this.getFov () / 0.9;
+ }
+ }
+ if (target != null) {
+ this.smoothRotate (null, null, function () {
+ var df = (target - that.getFov ()) / 1.5;
+ return Math.abs (df) > 0.01 ? df : null;
+ });
+ }
+ },
+
+ /**
+ * Maximizes the image to cover the browser viewport.
+ * The container div is removed from its parent node upon entering
+ * full screen mode. When leaving full screen mode, the container
+ * is appended to its old parent node. To avoid rearranging the
+ * nodes, wrap the container in an extra div.
+ *
+ * <p>For unknown reasons (probably security), browsers will
+ * not let you open a window that covers the entire screen.
+ * Even when specifying "fullscreen=yes", all you get is a window
+ * that has a title bar and only covers the desktop (not any task
+ * bars or the like). For now, this is the best that I can do,
+ * but should the situation change I'll update this to be
+ * full-screen<i>-ier</i>.
+ *
+ * @param {function()} [onClose] function that is called when the user
+ * exits full-screen mode
+ * @public
+ */
+ fullScreen : function (onClose) {
+ if (this.fullScreenHandler) {
+ return;
+ }
+
+ var message = document.createElement ("div");
+ message.style.position = "absolute";
+ message.style.fontSize = "16pt";
+ message.style.top = "128px";
+ message.style.width = "100%";
+ message.style.color = "white";
+ message.style.padding = "16px";
+ message.style.zIndex = "9999";
+ message.style.textAlign = "center";
+ message.style.opacity = "0.75";
+ message.innerHTML = "<span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.</span>";
+
+ var that = this;
+
+ this.fullScreenHandler = new bigshot.FullScreen (this.container);
+ this.fullScreenHandler.restoreSize = this.sizeContainer == null;
+
+ this.fullScreenHandler.addOnResize (function () {
+ that.onresize ();
+ });
+
+ this.fullScreenHandler.addOnClose (function () {
+ if (message.parentNode) {
+ try {
+ div.removeChild (message);
+ } catch (x) {
+ }
+ }
+ that.fullScreenHandler = null;
+ });
+
+ if (onClose) {
+ this.fullScreenHandler.addOnClose (function () {
+ onClose ();
+ });
+ }
+
+ this.removeEventListeners ();
+ this.fullScreenHandler.open ();
+ this.addEventListeners ();
+ // Safari compatibility - must update after entering fullscreen.
+ // 1s should be enough so we enter FS, but not enough for the
+ // user to wonder if something is wrong.
+ var r = function () {
+ that.render ();
+ };
+ setTimeout (r, 1000);
+ setTimeout (r, 2000);
+ setTimeout (r, 3000);
+
+ if (this.fullScreenHandler.getRootElement ()) {
+ this.fullScreenHandler.getRootElement ().appendChild (message);
+
+ setTimeout (function () {
+ var opacity = 0.75;
+ var iter = function () {
+ opacity -= 0.02;
+ if (message.parentNode) {
+ if (opacity <= 0) {
+ message.style.display = "none";
+ try {
+ div.removeChild (message);
+ } catch (x) {}
+ } else {
+ message.style.opacity = opacity;
+ setTimeout (iter, 20);
+ }
+ }
+ };
+ setTimeout (iter, 20);
+ }, 3500);
+ }
+
+ return function () {
+ that.removeEventListeners ();
+ that.fullScreenHandler.close ();
+ that.addEventListeners ();
+ };
+ },
+
+ /**
+ * Right-sizes the canvas container.
+ * @private
+ */
+ onresize : function () {
+ if (this.fullScreenHandler == null || !this.fullScreenHandler.isFullScreen) {
+ if (this.sizeContainer) {
+ var s = this.browser.getElementSize (this.sizeContainer);
+ this.renderer.resize (s.w, s.h);
+ }
+ } else {
+ this.container.style.width = window.innerWidth + "px";
+ this.container.style.height = window.innerHeight + "px";
+ var s = this.browser.getElementSize (this.container);
+ this.renderer.resize (s.w, s.h);
+ }
+ this.renderer.onresize ();
+ this.renderAsap ();
+ },
+
+ /**
+ * Posts a render() call via a timeout or the requestAnimationFrame API.
+ * Use when the render call must be done as soon as possible, but
+ * can't be done in the current call context.
+ */
+ renderAsap : function () {
+ if (!this.renderAsapPermitTaken && !this.disposed) {
+ this.renderAsapPermitTaken = true;
+ var that = this;
+ this.browser.requestAnimationFrame (function () {
+ that.renderAsapPermitTaken = false;
+ that.render ();
+ }, this.renderer.getElement ());
+ }
+ },
+
+
+ /**
+ * Automatically resizes the canvas element to the size of the
+ * given element on resize.
+ *
+ * @param {HTMLElement} sizeContainer the element to use. Set to <code>null</code>
+ * to disable.
+ */
+ autoResizeContainer : function (sizeContainer) {
+ this.sizeContainer = sizeContainer;
+ }
+}
+
+/**
+ * Fired when the user double-clicks on the panorama.
+ *
+ * @name bigshot.VRPanorama#dblclick
+ * @event
+ * @param {bigshot.VREvent} event the event object
+ */
+
+bigshot.Object.extend (bigshot.VRPanorama, bigshot.EventDispatcher);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Abstract base class for panorama hotspots.
+ *
+ * @class Abstract base class for panorama hotspots.
+ *
+ * A Hotspot is simply an HTML element that is moved / hidden etc.
+ * to overlay a given position in the panorama.
+ *
+ * @param {bigshot.VRPanorama} panorama the panorama to attach this hotspot to
+ */
+bigshot.VRHotspot = function (panorama) {
+ this.panorama = panorama;
+
+ /**
+ * The method to use for dealing with hotspots that extend outside the
+ * viewport. Note that {@link #CLIP_ADJUST} et al are functions, not constants.
+ * To set the value, you must call the function to get a clipping strategy:
+ *
+ * @example
+ * var hotspot = ...;
+ * // note the function call below ---------------v
+ * hotspot.clippingStrategy = hotspot.CLIP_ADJUST ();
+ *
+ * @see bigshot.VRHotspot#CLIP_ADJUST
+ * @see bigshot.VRHotspot#CLIP_CENTER
+ * @see bigshot.VRHotspot#CLIP_FRACTION
+ * @see bigshot.VRHotspot#CLIP_ZOOM
+ * @see bigshot.VRHotspot#CLIP_FADE
+ * @see bigshot.VRHotspot#clip
+ * @type function(clipData)
+ * @default bigshot.VRHotspot#CLIP_ADJUST
+ */
+ this.clippingStrategy = bigshot.VRHotspot.CLIP_ADJUST (panorama);
+
+}
+
+/**
+ * Hides the hotspot if less than <code>frac</code> of its area is visible.
+ *
+ * @param {number} frac the fraction (0.0 - 1.0) of the hotspot that must be visible for
+ * it to be shown.
+ * @type function(clipData)
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_FRACTION = function (panorama, frac) {
+ return function (clipData) {
+ var r = {
+ x0 : Math.max (clipData.x, 0),
+ y0 : Math.max (clipData.y, 0),
+ x1 : Math.min (clipData.x + clipData.w, panorama.renderer.getViewportWidth ()),
+ y1 : Math.min (clipData.y + clipData.h, panorama.renderer.getViewportHeight ())
+ };
+ var full = clipData.w * clipData.h;
+ var visibleWidth = (r.x1 - r.x0);
+ var visibleHeight = (r.y1 - r.y0);
+ if (visibleWidth > 0 && visibleHeight > 0) {
+ var visible = visibleWidth * visibleHeight;
+
+ return (visible / full) >= frac;
+ } else {
+ return false;
+ }
+ }
+};
+
+/**
+ * Hides the hotspot if its center is outside the viewport.
+ *
+ * @type function(clipData)
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_CENTER = function (panorama) {
+ return function (clipData) {
+ var c = {
+ x : clipData.x + clipData.w / 2,
+ y : clipData.y + clipData.h / 2
+ };
+ return c.x >= 0 && c.x < panorama.renderer.getViewportWidth () &&
+ c.y >= 0 && c.y < panorama.renderer.getViewportHeight ();
+ }
+}
+
+/**
+ * Resizes the hotspot to fit in the viewport. Hides the hotspot if
+ * it is completely outside the viewport.
+ *
+ * @type function(clipData)
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_ADJUST = function (panorama) {
+ return function (clipData) {
+ if (clipData.x < 0) {
+ clipData.w -= -clipData.x;
+ clipData.x = 0;
+ }
+ if (clipData.y < 0) {
+ clipData.h -= -clipData.y;
+ clipData.y = 0;
+ }
+ if (clipData.x + clipData.w > panorama.renderer.getViewportWidth ()) {
+ clipData.w = panorama.renderer.getViewportWidth () - clipData.x - 1;
+ }
+ if (clipData.y + clipData.h > panorama.renderer.getViewportHeight ()) {
+ clipData.h = panorama.renderer.getViewportHeight () - clipData.y - 1;
+ }
+
+ return clipData.w > 0 && clipData.h > 0;
+ }
+}
+
+/**
+ * Shrinks the hotspot as it approaches the viewport edges.
+ *
+ * @param s The full size of the hotspot.
+ * @param s.w The full width of the hotspot, in pixels.
+ * @param s.h The full height of the hotspot, in pixels.
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_ZOOM = function (panorama, s, maxDistanceInViewportHeights) {
+ return function (clipData) {
+ if (clipData.x >= 0 && clipData.y >= 0 && (clipData.x + s.w) < panorama.renderer.getViewportWidth ()
+ && (clipData.y + s.h) < panorama.renderer.getViewportHeight ()) {
+ clipData.w = s.w;
+ clipData.h = s.h;
+ return true;
+ }
+
+ var distance = 0;
+ if (clipData.x < 0) {
+ distance = Math.max (-clipData.x, distance);
+ }
+ if (clipData.y < 0) {
+ distance = Math.max (-clipData.y, distance);
+ }
+ if (clipData.x + s.w > panorama.renderer.getViewportWidth ()) {
+ distance = Math.max (clipData.x + s.w - panorama.renderer.getViewportWidth (), distance);
+ }
+ if (clipData.y + s.h > panorama.renderer.getViewportHeight ()) {
+ distance = Math.max (clipData.y + s.h - panorama.renderer.getViewportHeight (), distance);
+ }
+
+ distance /= panorama.renderer.getViewportHeight ();
+ if (distance > maxDistanceInViewportHeights) {
+ return false;
+ }
+
+ var scale = 1 / (1 + distance);
+
+ clipData.w = s.w * scale;
+ clipData.h = s.w * scale;
+ if (clipData.x < 0) {
+ clipData.x = 0;
+ }
+ if (clipData.y < 0) {
+ clipData.y = 0;
+ }
+ if (clipData.x + clipData.w > panorama.renderer.getViewportWidth ()) {
+ clipData.x = panorama.renderer.getViewportWidth () - clipData.w;
+ }
+ if (clipData.y + clipData.h > panorama.renderer.getViewportHeight ()) {
+ clipData.y = panorama.renderer.getViewportHeight () - clipData.h;
+ }
+
+ return true;
+ }
+}
+
+/**
+ * Progressively fades the hotspot as it gets closer to the viewport edges.
+ *
+ * @param {number} borderSizeInPixels the distance from the edge, in pixels,
+ * where the hotspot is completely opaque.
+ * @see bigshot.VRHotspot#clip
+ * @see bigshot.VRHotspot#clippingStrategy
+ */
+bigshot.VRHotspot.CLIP_FADE = function (panorama, borderSizeInPixels) {
+ return function (clipData) {
+ var distance = Math.min (
+ clipData.x,
+ clipData.y,
+ panorama.renderer.getViewportWidth () - (clipData.x + clipData.w),
+ panorama.renderer.getViewportHeight () - (clipData.y + clipData.h));
+
+ if (distance <= 0) {
+ return false;
+ } else if (distance <= borderSizeInPixels) {
+ clipData.opacity = (distance / borderSizeInPixels);
+ return true;
+ } else {
+ clipData.opacity = 1.0;
+ return true;
+ }
+ }
+}
+
+bigshot.VRHotspot.prototype = {
+
+ /**
+ * Layout and resize the hotspot. Called by the panorama.
+ */
+ layout : function () {},
+
+ /**
+ * Helper function to rotate a point around an axis.
+ *
+ * @param {number} ang the angle
+ * @param {bigshot.Point3D} vector the vector to rotate around
+ * @param {Vector} point the point
+ * @type Vector
+ * @private
+ */
+ rotate : function (ang, vector, point) {
+ var arad = ang * Math.PI / 180.0;
+ var m = Matrix.Rotation(arad, $V([vector.x, vector.y, vector.z])).ensure4x4 ();
+ return m.xPoint3Dhom1 (point);
+ },
+
+ /**
+ * Converts the polar coordinates to world coordinates.
+ * The distance is assumed to be 1.0.
+ *
+ * @param yaw the yaw, in degrees
+ * @param pitch the pitch, in degrees
+ * @type bigshot.Point3D
+ */
+ toVector : function (yaw, pitch) {
+ var point = { x : 0, y : 0, z : -1 };
+ point = this.rotate (-pitch, { x : 1, y : 0, z : 0 }, point);
+ point = this.rotate (-yaw, { x : 0, y : 1, z : 0 }, point);
+ return point;
+ },
+
+ /**
+ * Converts the world-coordinate point p to screen coordinates.
+ *
+ * @param {bigshot.Point3D} p the world-coordinate point
+ * @type point
+ */
+ toScreen : function (p) {
+ var res = this.panorama.renderer.transformToScreen (p)
+ return res;
+ },
+
+ /**
+ * Clips the hotspot against the viewport. Both parameters
+ * are in/out. Clipping is done by adjusting the values of the
+ * parameters.
+ *
+ * @param clipData Information about the hotspot.
+ * @param {number} clipData.x the x-coordinate of the top-left corner of the hotspot, in pixels.
+ * @param {number} clipData.y the y-coordinate of the top-left corner of the hotspot, in pixels.
+ * @param {number} clipData.w the width of the hotspot, in pixels.
+ * @param {number} clipData.h the height of the hotspot, in pixels.
+ * @param {number} [clipData.opacity] the opacity of the hotspot, ranging from 0.0 (transparent)
+ * to 1.0 (opaque). If set, the opacity of the hotspot element is adjusted.
+ * @type boolean
+ * @return true if the hotspot is visible, false otherwise
+ */
+ clip : function (clipData) {
+ return this.clippingStrategy (clipData);
+ }
+}
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new point-hotspot and attaches it to a VR panorama.
+ *
+ * @class A VR panorama point-hotspot.
+ *
+ * A Hotspot is simply an HTML element that is moved / hidden etc.
+ * to overlay a given position in the panorama. The element is moved
+ * by setting its <code>style.top</code> and <code>style.left</code>
+ * values.
+ *
+ * @augments bigshot.VRHotspot
+ * @param {bigshot.VRPanorama} panorama the panorama to attach this hotspot to
+ * @param {number} yaw the yaw coordinate of the hotspot
+ * @param {number} pitch the pitch coordinate of the hotspot
+ * @param {HTMLElement} element the HTML element
+ * @param {number} offsetX the offset to add to the screen coordinate corresponding
+ * to the hotspot's polar coordinates. Use this to center the hotspot horizontally.
+ * @param {number} offsetY the offset to add to the screen coordinate corresponding
+ * to the hotspot's polar coordinates. Use this to center the hotspot vertically.
+ */
+bigshot.VRPointHotspot = function (panorama, yaw, pitch, element, offsetX, offsetY) {
+ bigshot.VRHotspot.call (this, panorama);
+ this.element = element;
+ this.offsetX = offsetX;
+ this.offsetY = offsetY;
+ this.point = this.toVector (yaw, pitch);
+}
+
+bigshot.VRPointHotspot.prototype = {
+ layout : function () {
+ var p = this.toScreen (this.point);
+
+ var visible = false;
+ if (p != null) {
+ var s = this.panorama.browser.getElementSize (this.element);
+ p.w = s.w;
+ p.h = s.h;
+
+ p.x += this.offsetX;
+ p.y += this.offsetY;
+
+ if (this.clip (p)) {
+ this.element.style.top = (p.y) + "px";
+ this.element.style.left = (p.x) + "px";
+ this.element.style.width = (p.w) + "px";
+ this.element.style.height = (p.h) + "px";
+ if (p.opacity) {
+ this.element.style.opacity = p.opacity;
+ }
+ this.element.style.visibility = "inherit";
+ visible = true;
+ }
+ }
+
+ if (!visible) {
+ this.element.style.visibility = "hidden";
+ }
+ }
+}
+
+bigshot.Object.extend (bigshot.VRPointHotspot, bigshot.VRHotspot);
+bigshot.Object.validate ("bigshot.VRPointHotspot", bigshot.VRHotspot);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new rectangular hotspot and attaches it to a VR panorama.
+ *
+ * @class A rectangular VR panorama hotspot.
+ *
+ * A rectangular hotspot is simply an HTML element that is moved / resized / hidden etc.
+ * to overlay a given rectangle in the panorama. The element is moved
+ * by setting its <code>style.top</code> and <code>style.left</code>
+ * values, and resized by setting its <code>style.width</code> and <code>style.height</code>
+ * values.
+ *
+ * @augments bigshot.VRHotspot
+ * @param {bigshot.VRPanorama} panorama the panorama to attach this hotspot to
+ * @param {number} yaw0 the yaw coordinate of the top-left corner of the hotspot
+ * @param {number} pitch0 the pitch coordinate of the top-left corner of the hotspot
+ * @param {number} yaw1 the yaw coordinate of the bottom-right corner of the hotspot
+ * @param {number} pitch1 the pitch coordinate of the bottom-right corner of the hotspot
+ * @param {HTMLElement} element the HTML element
+ */
+bigshot.VRRectangleHotspot = function (panorama, yaw0, pitch0, yaw1, pitch1, element) {
+ bigshot.VRHotspot.call (this, panorama);
+
+ this.element = element;
+ this.point0 = this.toVector (yaw0, pitch0);
+ this.point1 = this.toVector (yaw1, pitch1);
+}
+
+bigshot.VRRectangleHotspot.prototype = {
+ layout : function () {
+ var p = this.toScreen (this.point0);
+ var p1 = this.toScreen (this.point1);
+
+ var visible = false;
+ if (p != null && p1 != null) {
+ var cd = {
+ x : p.x,
+ y : p.y,
+ opacity : 1.0,
+ w : p1.x - p.x,
+ h : p1.y - p.y
+ };
+
+ if (this.clip (cd)) {
+ this.element.style.top = (cd.y) + "px";
+ this.element.style.left = (cd.x) + "px";
+ this.element.style.width = (cd.w) + "px";
+ this.element.style.height = (cd.h) + "px";
+ this.element.style.visibility = "inherit";
+ visible = true;
+ }
+ }
+
+ if (!visible) {
+ this.element.style.visibility = "hidden";
+ }
+ }
+}
+
+bigshot.Object.extend (bigshot.VRRectangleHotspot, bigshot.VRHotspot);
+bigshot.Object.validate ("bigshot.VRRectangleHotspot", bigshot.VRHotspot);
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new parameter block.
+ *
+ * @class Parameters for the adaptive LOD monitor.
+ */
+bigshot.AdaptiveLODMonitorParameters = function (values) {
+
+ /**
+ * The VR panorama to adjust.
+ *
+ * @type bigshot.VRPanorama
+ */
+ this.vrPanorama = null;
+
+ /**
+ * The target framerate in frames per second.
+ * The monitor will try to achieve an average frame render time
+ * of <i>1 / targetFps</i> seconds.
+ *
+ * @default 30
+ * @type float
+ */
+ this.targetFps = 30;
+
+ /**
+ * The tolerance for the rendering time. The monitor will adjust the
+ * level of detail if the average frame render time rises above
+ * <i>target frame render time * (1.0 + tolerance)</i> or falls below
+ * <i>target frame render time / (1.0 + tolerance)</i>.
+ *
+ * @default 0.3
+ * @type float
+ */
+ this.tolerance = 0.3;
+
+ /**
+ * The rate at which the level of detail is adjusted.
+ * For detail increase, the detail is multiplied with (1.0 + rate),
+ * for decrease divided.
+ *
+ * @default 0.1
+ * @type float
+ */
+ this.rate = 0.1;
+
+ /**
+ * Minimum texture magnification.
+ *
+ * @default 1.5
+ * @type float
+ */
+ this.minMag = 1.5;
+
+ /**
+ * Maximum texture magnification.
+ *
+ * @default 16
+ * @type float
+ */
+ this.maxMag = 16;
+
+ /**
+ * Texture magnification for HQ render passes.
+ *
+ * @default 1.5
+ * @type float
+ */
+ this.hqRenderMag = 1.5;
+
+ /**
+ * Delay in milliseconds before executing
+ * a HQ render pass.
+ *
+ * @default 2000
+ * @type int
+ */
+ this.hqRenderDelay = 2000;
+
+ /**
+ * Interval in milliseconds for the
+ * HQ render pass timer.
+ *
+ * @default 1000
+ * @type int
+ */
+ this.hqRenderInterval = 1000;
+
+ if (values) {
+ for (var k in values) {
+ this[k] = values[k];
+ }
+ }
+
+ this.merge = function (values, overwrite) {
+ for (var k in values) {
+ if (overwrite || !this[k]) {
+ this[k] = values[k];
+ }
+ }
+ }
+ return this;
+};
+/*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Creates a new adaptive level-of-detail monitor.
+ *
+ * @class An adaptive LOD monitor that adjusts the level of detail of a VR panorama
+ * to achieve a desired frame rate. To connect it to a VR panorama, use the
+ * {@link bigshot.AdaptiveLODMonitor#getListener} method to get a render listener
+ * that can be passed to {@link bigshot.VRPanorama#addRenderListener}.
+ *
+ * <p>The monitor maintains two render modes - a high quality one with a fixed
+ * level of detail, and a low(er) quality one with variable level of detail.
+ * If the panorama is idle for more than a set interval, a high-quality render is
+ * performed.
+ *
+ * @param {bigshot.AdaptiveLODMonitorParameters} parameters parameters for the LOD monitor.
+ *
+ * @see bigshot.AdaptiveLODMonitorParameters for a list of parameters
+ *
+ * @example
+ * var bvr = new bigshot.VRPanorama ( ... );
+ * var lodMonitor = new bigshot.AdaptiveLODMonitor (
+ * new bigshot.AdaptiveLODMonitorParameters ({
+ * vrPanorama : bvr,
+ * targetFps : 30,
+ * tolerance : 0.3,
+ * rate : 0.1,
+ * minMag : 1.5,
+ * maxMag : 16
+ * }));
+ * bvr.addRenderListener (lodMonitor.getListener ());
+ */
+bigshot.AdaptiveLODMonitor = function (parameters) {
+ this.setParameters (parameters);
+
+ /**
+ * The current adaptive detail level.
+ * @type float
+ * @private
+ */
+ this.currentAdaptiveMagnification = parameters.vrPanorama.getMaxTextureMagnification ();
+
+ /**
+ * The number of frames that have been rendered.
+ * @type int
+ * @private
+ */
+ this.frames = 0;
+
+ /**
+ * The total number of times we have sampled the render time.
+ * @type int
+ * @private
+ */
+ this.samples = 0;
+
+ /**
+ * The sum of sample times from all samples of render time in milliseconds.
+ * @type int
+ * @private
+ */
+ this.renderTimeTotal = 0;
+
+ /**
+ * The sum of sample times from the recent sample pass in milliseconds.
+ * @type int
+ * @private
+ */
+ this.renderTimeLast = 0;
+
+ /**
+ * The number of samples currently done in the recent sample pass.
+ * @type int
+ * @private
+ */
+ this.samplesLast = 0;
+
+ /**
+ * The start time, in milliseconds, of the last sample.
+ * @type int
+ * @private
+ */
+ this.startTime = 0;
+
+ /**
+ * The time, in milliseconds, when the panorama was last rendered.
+ * @type int
+ * @private
+ */
+ this.lastRender = 0;
+
+ this.hqRender = false;
+ this.hqMode = false;
+ this.hqRenderWaiting = false;
+
+ /**
+ * Flag to enable / disable the monitor.
+ * @type boolean
+ * @private
+ */
+ this.enabled = true;
+
+ var that = this;
+ this.listenerFunction = function (state, cause, data) {
+ that.listener (state, cause, data);
+ };
+};
+
+bigshot.AdaptiveLODMonitor.prototype = {
+ averageRenderTime : function () {
+ if (this.samples > 0) {
+ return this.renderTimeTotal / this.samples;
+ } else {
+ return -1;
+ }
+ },
+
+ /**
+ * @param {bigshot.AdaptiveLODMonitorParameters} parameters
+ */
+ setParameters : function (parameters) {
+ this.parameters = parameters;
+ this.targetTime = 1000 / this.parameters.targetFps;
+
+ this.lowerTime = this.targetTime / (1.0 + this.parameters.tolerance);
+ this.upperTime = this.targetTime * (1.0 + this.parameters.tolerance);
+ },
+
+ setEnabled : function (enabled) {
+ this.enabled = enabled;
+ },
+
+ averageRenderTimeLast : function () {
+ if (this.samples > 0) {
+ return this.renderTimeLast / this.samplesLast;
+ } else {
+ return -1;
+ }
+ },
+
+ getListener : function () {
+ return this.listenerFunction;
+ },
+
+ increaseDetail : function () {
+ this.currentAdaptiveMagnification = Math.max (this.parameters.minMag, this.currentAdaptiveMagnification / (1.0 + this.parameters.rate));
+ },
+
+ decreaseDetail : function () {
+ this.currentAdaptiveMagnification = Math.min (this.parameters.maxMag, this.currentAdaptiveMagnification * (1.0 + this.parameters.rate));
+ },
+
+ sample : function () {
+ var deltat = new Date ().getTime () - this.startTime;
+ this.samples++;
+ this.renderTimeTotal += deltat;
+
+ this.samplesLast++;
+ this.renderTimeLast += deltat;
+
+ if (this.samplesLast > 4) {
+ var averageLast = this.renderTimeLast / this.samplesLast;
+
+ if (averageLast < this.lowerTime) {
+ this.increaseDetail ();
+ } else if (averageLast > this.upperTime) {
+ this.decreaseDetail ();
+ }
+
+ this.samplesLast = 0;
+ this.renderTimeLast = 0;
+ }
+ },
+
+ hqRenderTick : function () {
+ if (this.lastRender < new Date ().getTime () - this.parameters.hqRenderDelay) {
+ this.hqRender = true;
+ this.hqMode = true;
+ if (this.enabled) {
+ this.parameters.vrPanorama.setMaxTextureMagnification (this.parameters.hqRenderMag);
+ this.parameters.vrPanorama.render ();
+ }
+
+ this.hqRender = false;
+ this.hqRenderWaiting = false;
+ } else {
+ var that = this;
+ setTimeout (function () {
+ that.hqRenderTick ();
+ }, this.parameters.hqRenderInterval);
+ }
+ },
+
+ listener : function (state, cause, data) {
+ if (!this.enabled) {
+ return;
+ }
+
+ if (this.hqRender) {
+ return;
+ }
+
+ if (this.hqMode && cause == bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE) {
+ this.parameters.vrPanorama.setMaxTextureMagnification (this.parameters.minMag);
+ return;
+ } else {
+ this.hqMode = false;
+ }
+
+ this.parameters.vrPanorama.setMaxTextureMagnification (this.currentAdaptiveMagnification);
+
+ this.frames++;
+ if ((this.frames < 20 || this.frames % 5 == 0) && state == bigshot.VRPanorama.ONRENDER_BEGIN) {
+ this.startTime = new Date ().getTime ();
+ this.lastRender = this.startTime;
+ var that = this;
+ setTimeout (function () {
+ that.sample ();
+ }, 1);
+ if (!this.hqRenderWaiting) {
+ this.hqRenderWaiting = true;
+ setTimeout (function () {
+ that.hqRenderTick ();
+ }, this.parameters.hqRenderInterval);
+ }
+ }
+ }
+};
+}
diff --git a/js/vendor/bigshot/bigshot.jar b/js/vendor/bigshot/bigshot.jar
new file mode 100644
index 00000000..47d32ace
--- /dev/null
+++ b/js/vendor/bigshot/bigshot.jar
Binary files differ
diff --git a/js/vendor/bigshot/bigshot.js b/js/vendor/bigshot/bigshot.js
index 64d50173..eee39bbe 100644
--- a/js/vendor/bigshot/bigshot.js
+++ b/js/vendor/bigshot/bigshot.js
@@ -1054,7 +1054,7 @@ bigshot.FullScreen = function (container) {
};
this.requestFullScreen = findFunc (container, ["requestFullScreen", "mozRequestFullScreen", "webkitRequestFullscreen"]);
- this.cancelFullScreen = findFunc (document, ["cancelFullScreen", "mozCancelFullScreen", "webkitCancelFullScreen"]);
+ this.cancelFullScreen = findFunc (document, ["cancelFullScreen", "mozCancelFullScreen", "webkitCancelFullscreen"]);
this.restoreSize = this.requestFullScreen != null;
}
diff --git a/js/vendor/bigshot/bigshot.php b/js/vendor/bigshot/bigshot.php
new file mode 100644
index 00000000..6a8f396b
--- /dev/null
+++ b/js/vendor/bigshot/bigshot.php
@@ -0,0 +1,99 @@
+<?php
+ /*
+ * Copyright 2010 - 2012 Leo Sutic <leo.sutic@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ /**
+ * This script serves up parts of a .bigshot image pyramid archive.
+ * It is controlled with five parameters:
+ *
+ * file : the path to the .bigshot file, relative to the script
+ *
+ * Either
+ * start : offset in bytes from the start of the file
+ * length : number of bytes to read
+ * or
+ * entry : the name of the entry in the bigshot archive.
+ *
+ * Using the "entry" parameter requires two extra file accesses server side.
+ * It is recommended that a client parses the file header and index and then
+ * uses the start/length combo to read the data from the archive. The purpose
+ * of the "entry" parameters is to make it possible to use, for example,
+ * SaladoPlayer, to show VR panoramas archived in a Bigshot archive.
+ *
+ * type : MIME-type for the Content-Type header being returned.
+ *
+ * To avoid path traversal attacks, the script will only read from
+ * files ending in ".bigshot", and will remove any ".." and "." path
+ * components from the file name. It will also remove any initial slashes.
+ */
+
+ $filename = $_GET["file"];
+ $start = (int) $_GET["start"];
+ $length = (int) $_GET["length"];
+ $type = $_GET["type"];
+ $entry = $_GET["entry"];
+
+ // Clean the path, make sure it is relative to the script
+ // and doesn't allow any traversals upward in the directory
+ // hierarchy
+ $pathComponents = explode ("/", $filename);
+ $filename = "";
+ foreach ($pathComponents as $i => $value) {
+ if ($value != ".." && $value != ".") {
+ if (strlen ($filename) > 0) {
+ $filename = $filename . "/";
+ }
+ $filename = $filename . $value;
+ }
+ }
+
+ // Make sure we're serving up a bigshot file.
+ if (substr ($filename, -8) != ".bigshot") {
+ trigger_error ($filename . " is not a bigshot file.", E_USER_ERROR);
+ }
+
+ // If the user specified an entry, load the index and find it.
+ // This overwrites the start & length parameters.
+ if ($entry) {
+ $header = file_get_contents ($filename, false, NULL, 8, 16);
+ $indexSize = intval (trim ($header), 16);
+ $index = file_get_contents ($filename, false, NULL, 24, $indexSize);
+ $indexEntries = explode (":", $index);
+ foreach ($indexEntries as $i => $value) {
+ if ($value == $entry) {
+ $start = ((int) $indexEntries[$i + 1]) + 24 + $indexSize;
+ $length = (int) $indexEntries[$i + 2];
+ break;
+ }
+ }
+ }
+
+ if ($start < 0) {
+ trigger_error ("start is negative: " . $start, E_USER_ERROR);
+ }
+
+ if ($length < 0) {
+ trigger_error ("length is negative: " . $length, E_USER_ERROR);
+ }
+
+ if (!file_exists ($filename)) {
+ trigger_error ($filename . " not found.", E_USER_ERROR);
+ }
+
+ header ("Content-Type: " . $type);
+
+ echo file_get_contents ($filename, false, NULL, $start, $length);
+?> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/java/allclasses-frame.html b/js/vendor/bigshot/doc/java/allclasses-frame.html
new file mode 100644
index 00000000..d5bbd51f
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/allclasses-frame.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>All Classes (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+<body>
+<h1 class="bar">All Classes</h1>
+<div class="indexContainer">
+<ul>
+<li><a href="bigshot/AbstractCubicTransform.html" title="class in bigshot" target="classFrame">AbstractCubicTransform</a></li>
+<li><a href="bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot" target="classFrame">AbstractCubicTransform.TransformedFace</a></li>
+<li><a href="bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot" target="classFrame">AbstractSphericalCubicTransform</a></li>
+<li><a href="bigshot/mp/ChildCallable.html" title="class in bigshot.mp" target="classFrame">ChildCallable</a></li>
+<li><a href="bigshot/CylindricalToCubic.html" title="class in bigshot" target="classFrame">CylindricalToCubic</a></li>
+<li><a href="bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp" target="classFrame">DefaultWorkSetFactory</a></li>
+<li><a href="bigshot/EquirectangularToCubic.html" title="class in bigshot" target="classFrame">EquirectangularToCubic</a></li>
+<li><a href="bigshot/FastTrigInverse.html" title="class in bigshot" target="classFrame">FastTrigInverse</a></li>
+<li><a href="bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot" target="classFrame">FastTrigInverse.FastAcos</a></li>
+<li><a href="bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot" target="classFrame">FastTrigInverse.FastAtan</a></li>
+<li><a href="bigshot/Image.html" title="class in bigshot" target="classFrame">Image</a></li>
+<li><a href="bigshot/ImageInsert.html" title="class in bigshot" target="classFrame">ImageInsert</a></li>
+<li><a href="bigshot/ImagePyramidParameters.html" title="class in bigshot" target="classFrame">ImagePyramidParameters</a></li>
+<li><a href="bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.DescriptorFormat</a></li>
+<li><a href="bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.FolderLayout</a></li>
+<li><a href="bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.Format</a></li>
+<li><a href="bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.ImageFormat</a></li>
+<li><a href="bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.LevelNumbering</a></li>
+<li><a href="bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.Preset</a></li>
+<li><a href="bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.Transform</a></li>
+<li><a href="bigshot/MakeImagePyramid.html" title="class in bigshot" target="classFrame">MakeImagePyramid</a></li>
+<li><a href="bigshot/MathUtil.html" title="class in bigshot" target="classFrame">MathUtil</a></li>
+<li><a href="bigshot/mp/ParallelFor.html" title="interface in bigshot.mp" target="classFrame"><i>ParallelFor</i></a></li>
+<li><a href="bigshot/Point2D.html" title="class in bigshot" target="classFrame">Point2D</a></li>
+<li><a href="bigshot/Point3D.html" title="class in bigshot" target="classFrame">Point3D</a></li>
+<li><a href="bigshot/Point3DTransform.html" title="class in bigshot" target="classFrame">Point3DTransform</a></li>
+<li><a href="bigshot/mp/WorkSet.html" title="class in bigshot.mp" target="classFrame">WorkSet</a></li>
+<li><a href="bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp" target="classFrame"><i>WorkSetFactory</i></a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/allclasses-noframe.html b/js/vendor/bigshot/doc/java/allclasses-noframe.html
new file mode 100644
index 00000000..8d192e50
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/allclasses-noframe.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>All Classes (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+<body>
+<h1 class="bar">All Classes</h1>
+<div class="indexContainer">
+<ul>
+<li><a href="bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></li>
+<li><a href="bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></li>
+<li><a href="bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></li>
+<li><a href="bigshot/mp/ChildCallable.html" title="class in bigshot.mp">ChildCallable</a></li>
+<li><a href="bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></li>
+<li><a href="bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp">DefaultWorkSetFactory</a></li>
+<li><a href="bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></li>
+<li><a href="bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></li>
+<li><a href="bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot">FastTrigInverse.FastAcos</a></li>
+<li><a href="bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot">FastTrigInverse.FastAtan</a></li>
+<li><a href="bigshot/Image.html" title="class in bigshot">Image</a></li>
+<li><a href="bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></li>
+<li><a href="bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></li>
+<li><a href="bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></li>
+<li><a href="bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></li>
+<li><a href="bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></li>
+<li><a href="bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></li>
+<li><a href="bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></li>
+<li><a href="bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></li>
+<li><a href="bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></li>
+<li><a href="bigshot/MakeImagePyramid.html" title="class in bigshot">MakeImagePyramid</a></li>
+<li><a href="bigshot/MathUtil.html" title="class in bigshot">MathUtil</a></li>
+<li><a href="bigshot/mp/ParallelFor.html" title="interface in bigshot.mp"><i>ParallelFor</i></a></li>
+<li><a href="bigshot/Point2D.html" title="class in bigshot">Point2D</a></li>
+<li><a href="bigshot/Point3D.html" title="class in bigshot">Point3D</a></li>
+<li><a href="bigshot/Point3DTransform.html" title="class in bigshot">Point3DTransform</a></li>
+<li><a href="bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a></li>
+<li><a href="bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp"><i>WorkSetFactory</i></a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/AbstractCubicTransform.TransformedFace.html b/js/vendor/bigshot/doc/java/bigshot/AbstractCubicTransform.TransformedFace.html
new file mode 100644
index 00000000..d77e1cb7
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/AbstractCubicTransform.TransformedFace.html
@@ -0,0 +1,346 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>AbstractCubicTransform.TransformedFace (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="AbstractCubicTransform.TransformedFace (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/AbstractCubicTransform.TransformedFace.html" target="_top">Frames</a></li>
+<li><a href="AbstractCubicTransform.TransformedFace.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class AbstractCubicTransform.TransformedFace" class="title">Class AbstractCubicTransform.TransformedFace</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.AbstractCubicTransform.TransformedFace</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&lt;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a> extends <a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&gt;</dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <span class="strong">AbstractCubicTransform.TransformedFace</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&gt;</pre>
+<div class="block">A delayed-evaluated Image.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/AbstractCubicTransform.TransformedFace.html#AbstractCubicTransform.TransformedFace(bigshot.AbstractCubicTransform, java.lang.String, double, double)">AbstractCubicTransform.TransformedFace</a></strong>(<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&nbsp;xform,
+ <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+ double&nbsp;y,
+ double&nbsp;p)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.TransformedFace.html#cancel(boolean)">cancel</a></strong>(boolean&nbsp;mayInterruptIfRunning)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.TransformedFace.html#get()">get</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.TransformedFace.html#get(long, java.util.concurrent.TimeUnit)">get</a></strong>(long&nbsp;timeout,
+ <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.TransformedFace.html#isCancelled()">isCancelled</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.TransformedFace.html#isDone()">isDone</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="AbstractCubicTransform.TransformedFace(bigshot.AbstractCubicTransform, java.lang.String, double, double)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>AbstractCubicTransform.TransformedFace</h4>
+<pre>public&nbsp;AbstractCubicTransform.TransformedFace(<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&nbsp;xform,
+ <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+ double&nbsp;y,
+ double&nbsp;p)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="cancel(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>cancel</h4>
+<pre>public&nbsp;boolean&nbsp;cancel(boolean&nbsp;mayInterruptIfRunning)</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</a></code>&nbsp;in interface&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="isCancelled()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isCancelled</h4>
+<pre>public&nbsp;boolean&nbsp;isCancelled()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</a></code>&nbsp;in interface&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="isDone()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isDone</h4>
+<pre>public&nbsp;boolean&nbsp;isDone()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</a></code>&nbsp;in interface&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="get()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>get</h4>
+<pre>public&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;get()
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</a></code>&nbsp;in interface&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&gt;</code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></code></dd></dl>
+</li>
+</ul>
+<a name="get(long, java.util.concurrent.TimeUnit)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>get</h4>
+<pre>public&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;get(long&nbsp;timeout,
+ <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</a></code>&nbsp;in interface&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/AbstractCubicTransform.TransformedFace.html" target="_top">Frames</a></li>
+<li><a href="AbstractCubicTransform.TransformedFace.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/AbstractCubicTransform.html b/js/vendor/bigshot/doc/java/bigshot/AbstractCubicTransform.html
new file mode 100644
index 00000000..4ee450f5
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/AbstractCubicTransform.html
@@ -0,0 +1,1089 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>AbstractCubicTransform (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="AbstractCubicTransform (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Class</li>
+<li><a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/AbstractCubicTransform.html" target="_top">Frames</a></li>
+<li><a href="AbstractCubicTransform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class AbstractCubicTransform" class="title">Class AbstractCubicTransform&lt;Derived extends AbstractCubicTransform&gt;</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.AbstractCubicTransform&lt;Derived&gt;</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl><dt><span class="strong">Type Parameters:</span></dt><dd><code>Derived</code> - for subclasses, the most derived class name. Used to implement the
+ method chaining for builder methods.</dd></dl>
+<dl>
+<dt>Direct Known Subclasses:</dt>
+<dd><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public abstract class <span class="strong">AbstractCubicTransform&lt;Derived extends AbstractCubicTransform&gt;</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">Transforms an image map to a set of rectilinear images. Used to create a cube map
+ for <a href="../../js/symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></strong></code>
+<div class="block">A delayed-evaluated Image.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#bottomCap">bottomCap</a></strong></code>
+<div class="block">Set to true to attempt to fill in any missing bottom-section.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#height">height</a></strong></code>
+<div class="block">Width in pixels of the output image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#horizontalWrap">horizontalWrap</a></strong></code>
+<div class="block">True iff the image map wraps horizontally.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#input">input</a></strong></code>
+<div class="block">The input image map.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#inputHfov">inputHfov</a></strong></code>
+<div class="block">Horizontal field of view of the image map, in radians.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#inputHorizon">inputHorizon</a></strong></code>
+<div class="block">The pixel row that is at the horizon.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#inputVfov">inputVfov</a></strong></code>
+<div class="block">Vertical field of view of the image map, in radians.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#jitter">jitter</a></strong></code>
+<div class="block">Amount of jitter in the oversampling.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#op">op</a></strong></code>
+<div class="block">Pitch offset of the bubble in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#or">or</a></strong></code>
+<div class="block">Roll offset of the bubble in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#oversampling">oversampling</a></strong></code>
+<div class="block">The amount of oversampling done.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#oy">oy</a></strong></code>
+<div class="block">Yaw offset of the bubble in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#pitch">pitch</a></strong></code>
+<div class="block">Pitch of the center point of the output image, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#roll">roll</a></strong></code>
+<div class="block">Roll of the output image, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#topCap">topCap</a></strong></code>
+<div class="block">Set to true to attempt to fill in any missing top-section.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#vfov">vfov</a></strong></code>
+<div class="block">Vertical field of view of the output image, in radians.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#width">width</a></strong></code>
+<div class="block">Width in pixels of the output image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#yaw">yaw</a></strong></code>
+<div class="block">Yaw of the center point of the output image, in degrees.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/AbstractCubicTransform.html#AbstractCubicTransform()">AbstractCubicTransform</a></strong>()</code>
+<div class="block">Creates a new transform instance.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#bottomCap(boolean)">bottomCap</a></strong>(boolean&nbsp;bottomCap)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#fromHuginPto(java.io.File)">fromHuginPto</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;ptoFile)</code>
+<div class="block">Loads projection parameters from a Hugin <code>.pto</code> file.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>abstract <a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">fromHuginPtoParameters</a></strong>(int&nbsp;w,
+ int&nbsp;h,
+ double&nbsp;v,
+ int&nbsp;cropLeft,
+ int&nbsp;cropRight,
+ int&nbsp;cropTop,
+ int&nbsp;cropBottom)</code>
+<div class="block">Sets the required projection parameters from the Hugin <code>.pto</code> parameters.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#horizontalWrap(boolean)">horizontalWrap</a></strong>(boolean&nbsp;horizontalWrap)</code>
+<div class="block">Sets whether the input image wraps around horizontally.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#input()">input</a></strong>()</code>
+<div class="block">Gets the current input panorama image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#input(java.io.File)">input</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;input)</code>
+<div class="block">Loads the image map from a file.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#input(bigshot.Image)">input</a></strong>(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;input)</code>
+<div class="block">Sets the image map.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#inputHfov()">inputHfov</a></strong>()</code>
+<div class="block">Return the input horizontal field of view, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#inputHfov(double)">inputHfov</a></strong>(double&nbsp;inputHfov)</code>
+<div class="block">Sets the horizontal field of view of the input image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#inputHorizon(int)">inputHorizon</a></strong>(int&nbsp;inputHorizon)</code>
+<div class="block">Sets y-coordinate of the horizon for the input image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#inputVfov()">inputVfov</a></strong>()</code>
+<div class="block">Return the input vertical field of view, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#inputVfov(double)">inputVfov</a></strong>(double&nbsp;inputVfov)</code>
+<div class="block">Sets the vertical field of view of the input image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#insert(bigshot.Image)">insert</a></strong>(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;image)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>abstract void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">insert</a></strong>(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;image,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;topLeft,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;u,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;v)</code>
+<div class="block">Inserts an image into a panorama.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#jitter(double)">jitter</a></strong>(double&nbsp;jitter)</code>
+<div class="block">Adds a random jitter to the sampling.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#offset(double, double, double)">offset</a></strong>(double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or)</code>
+<div class="block">Sets the initial transform offsets (used to level a bubble).</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#oversampling(int)">oversampling</a></strong>(int&nbsp;oversampling)</code>
+<div class="block">If greater than one, oversamples each output pixel using a
+ grid of <code>oversampling * oversampling</code> samples.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#readImage(java.io.File)">readImage</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName)</code>
+<div class="block">Convenience function to load an image from a file.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#size(int, int)">size</a></strong>(int&nbsp;width,
+ int&nbsp;height)</code>
+<div class="block">Sets the output image size in pixels.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#topCap(boolean)">topCap</a></strong>(boolean&nbsp;topCap)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>abstract <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#transform()">transform</a></strong>()</code>
+<div class="block">Performs the transformation.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&gt;&gt;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#transformToFaces()">transformToFaces</a></strong>()</code>
+<div class="block">Transforms an image map to six VR cube faces.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>[]</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#transformToFaces(bigshot.AbstractCubicTransform, java.io.File, int, double, double, double)">transformToFaces</a></strong>(<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&nbsp;xform,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;outputBase,
+ int&nbsp;outputSize,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or)</code>
+<div class="block">Executes a transformation six times to produce six VR cube faces.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#vfov(double)">vfov</a></strong>(double&nbsp;vfov)</code>
+<div class="block">Sets the vertical field of view.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractCubicTransform.html#view(double, double, double)">view</a></strong>(double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)</code>
+<div class="block">Sets the view direction.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="input">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>input</h4>
+<pre>protected&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a> input</pre>
+<div class="block">The input image map.</div>
+</li>
+</ul>
+<a name="vfov">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>vfov</h4>
+<pre>protected&nbsp;double vfov</pre>
+<div class="block">Vertical field of view of the output image, in radians.</div>
+</li>
+</ul>
+<a name="inputVfov">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputVfov</h4>
+<pre>protected&nbsp;double inputVfov</pre>
+<div class="block">Vertical field of view of the image map, in radians.</div>
+</li>
+</ul>
+<a name="inputHfov">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHfov</h4>
+<pre>protected&nbsp;double inputHfov</pre>
+<div class="block">Horizontal field of view of the image map, in radians.</div>
+</li>
+</ul>
+<a name="horizontalWrap">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>horizontalWrap</h4>
+<pre>protected&nbsp;boolean horizontalWrap</pre>
+<div class="block">True iff the image map wraps horizontally. Should only be true if <a href="../bigshot/AbstractCubicTransform.html#inputHfov"><code>inputHfov</code></a>
+ is <code>Math.PI * 2</code>.</div>
+</li>
+</ul>
+<a name="inputHorizon">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHorizon</h4>
+<pre>protected&nbsp;int inputHorizon</pre>
+<div class="block">The pixel row that is at the horizon.</div>
+</li>
+</ul>
+<a name="oy">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>oy</h4>
+<pre>protected&nbsp;double oy</pre>
+<div class="block">Yaw offset of the bubble in degrees. Used to level the bubble before rotating it
+ and producing the rectilinear image in the direction given by <a href="../bigshot/AbstractCubicTransform.html#yaw"><code>yaw</code></a>, <a href="../bigshot/AbstractCubicTransform.html#pitch"><code>pitch</code></a>
+ and <a href="../bigshot/AbstractCubicTransform.html#roll"><code>roll</code></a>.</div>
+</li>
+</ul>
+<a name="op">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>op</h4>
+<pre>protected&nbsp;double op</pre>
+<div class="block">Pitch offset of the bubble in degrees. Used to level the bubble before rotating it
+ and producing the rectilinear image in the direction given by <a href="../bigshot/AbstractCubicTransform.html#yaw"><code>yaw</code></a>, <a href="../bigshot/AbstractCubicTransform.html#pitch"><code>pitch</code></a>
+ and <a href="../bigshot/AbstractCubicTransform.html#roll"><code>roll</code></a>.</div>
+</li>
+</ul>
+<a name="or">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>or</h4>
+<pre>protected&nbsp;double or</pre>
+<div class="block">Roll offset of the bubble in degrees. Used to level the bubble before rotating it
+ and producing the rectilinear image in the direction given by <a href="../bigshot/AbstractCubicTransform.html#yaw"><code>yaw</code></a>, <a href="../bigshot/AbstractCubicTransform.html#pitch"><code>pitch</code></a>
+ and <a href="../bigshot/AbstractCubicTransform.html#roll"><code>roll</code></a>.</div>
+</li>
+</ul>
+<a name="yaw">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yaw</h4>
+<pre>protected&nbsp;double yaw</pre>
+<div class="block">Yaw of the center point of the output image, in degrees.</div>
+</li>
+</ul>
+<a name="pitch">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pitch</h4>
+<pre>protected&nbsp;double pitch</pre>
+<div class="block">Pitch of the center point of the output image, in degrees.</div>
+</li>
+</ul>
+<a name="roll">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>roll</h4>
+<pre>protected&nbsp;double roll</pre>
+<div class="block">Roll of the output image, in degrees.</div>
+</li>
+</ul>
+<a name="width">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>width</h4>
+<pre>protected&nbsp;int width</pre>
+<div class="block">Width in pixels of the output image.</div>
+</li>
+</ul>
+<a name="height">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>height</h4>
+<pre>protected&nbsp;int height</pre>
+<div class="block">Width in pixels of the output image.</div>
+</li>
+</ul>
+<a name="oversampling">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>oversampling</h4>
+<pre>protected&nbsp;int oversampling</pre>
+<div class="block">The amount of oversampling done. 1 means no oversampling.</div>
+</li>
+</ul>
+<a name="jitter">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>jitter</h4>
+<pre>protected&nbsp;double jitter</pre>
+<div class="block">Amount of jitter in the oversampling. Defaults to 0.</div>
+</li>
+</ul>
+<a name="bottomCap">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>bottomCap</h4>
+<pre>protected&nbsp;boolean bottomCap</pre>
+<div class="block">Set to true to attempt to fill in any missing bottom-section.</div>
+</li>
+</ul>
+<a name="topCap">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>topCap</h4>
+<pre>protected&nbsp;boolean topCap</pre>
+<div class="block">Set to true to attempt to fill in any missing top-section.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="AbstractCubicTransform()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>AbstractCubicTransform</h4>
+<pre>public&nbsp;AbstractCubicTransform()</pre>
+<div class="block">Creates a new transform instance.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="input(bigshot.Image)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>input</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;input(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;input)</pre>
+<div class="block">Sets the image map. Once set, the <a href="../bigshot/AbstractCubicTransform.html#transform()"><code>transform()</code></a>
+ method can be called several times with other parameters being adjusted
+ between calls.</div>
+</li>
+</ul>
+<a name="input(java.io.File)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>input</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;input(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;input)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Loads the image map from a file. Once set, the <a href="../bigshot/AbstractCubicTransform.html#transform()"><code>transform()</code></a>
+ method can be called several times with other parameters being adjusted
+ between calls.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="input()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>input</h4>
+<pre>public&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;input()</pre>
+<div class="block">Gets the current input panorama image.</div>
+</li>
+</ul>
+<a name="fromHuginPto(java.io.File)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fromHuginPto</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;fromHuginPto(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;ptoFile)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Loads projection parameters from a Hugin <code>.pto</code> file.
+ Subclasses should override the <a href="../bigshot/AbstractCubicTransform.html#fromHuginPtoParameters(int, int, double, int, int, int, int)"><code>fromHuginPtoParameters(int, int, double, int, int, int, int)</code></a> method
+ to actually set the projection parameters.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>ptoFile</code> - the Hugin <code>.pto</code> file to read transformation parameters from</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="fromHuginPtoParameters(int, int, double, int, int, int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fromHuginPtoParameters</h4>
+<pre>public abstract&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;fromHuginPtoParameters(int&nbsp;w,
+ int&nbsp;h,
+ double&nbsp;v,
+ int&nbsp;cropLeft,
+ int&nbsp;cropRight,
+ int&nbsp;cropTop,
+ int&nbsp;cropBottom)</pre>
+<div class="block">Sets the required projection parameters from the Hugin <code>.pto</code> parameters.
+ The Hugin pto describes an image that is <code>w</code> pixels wide and <code>h</code> pixels tall.
+ It has a horizontal field of view of <code>v</code> degrees. From that image, a sub-rectangle
+ with top-left coordinates (<code>cropLeft</code>, <code>cropTop</code>) and bottom-right coordinates
+ (<code>cropRight</code>, <code>cropBottom</code>) has been rendered and is the actual input image
+ to the projection.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>w</code> - the width of the map image, in pixels</dd><dd><code>h</code> - the height of the map image, in pixels</dd><dd><code>v</code> - the horizontal field of view, in degrees</dd><dd><code>cropLeft</code> - the first used column of the image</dd><dd><code>cropRight</code> - one past the rightmost used column of the image</dd><dd><code>cropTop</code> - the first used row in the image</dd><dd><code>cropBottom</code> - one past the bottom-most used row of the image</dd></dl>
+</li>
+</ul>
+<a name="vfov(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>vfov</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;vfov(double&nbsp;vfov)</pre>
+<div class="block">Sets the vertical field of view.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>vfov</code> - the field of view in degrees</dd></dl>
+</li>
+</ul>
+<a name="topCap(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>topCap</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;topCap(boolean&nbsp;topCap)</pre>
+</li>
+</ul>
+<a name="bottomCap(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>bottomCap</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;bottomCap(boolean&nbsp;bottomCap)</pre>
+</li>
+</ul>
+<a name="inputHorizon(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHorizon</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;inputHorizon(int&nbsp;inputHorizon)</pre>
+<div class="block">Sets y-coordinate of the horizon for the input image.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>inputHorizon</code> - y-coordinate of the horizon</dd></dl>
+</li>
+</ul>
+<a name="inputVfov(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputVfov</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;inputVfov(double&nbsp;inputVfov)</pre>
+<div class="block">Sets the vertical field of view of the input image.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>inputVfov</code> - the field of view in degrees</dd></dl>
+</li>
+</ul>
+<a name="inputVfov()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputVfov</h4>
+<pre>public&nbsp;double&nbsp;inputVfov()</pre>
+<div class="block">Return the input vertical field of view, in degrees.
+ The result may suffer from rounding errors, as it is stored
+ as radians internally.</div>
+</li>
+</ul>
+<a name="inputHfov(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHfov</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;inputHfov(double&nbsp;inputHfov)</pre>
+<div class="block">Sets the horizontal field of view of the input image.
+ Also sets the horizontalWrap flag if the input
+ FOV is 360.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>inputHfov</code> - the field of view in degrees</dd></dl>
+</li>
+</ul>
+<a name="inputHfov()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHfov</h4>
+<pre>public&nbsp;double&nbsp;inputHfov()</pre>
+<div class="block">Return the input horizontal field of view, in degrees.
+ The result may suffer from rounding errors, as it is stored
+ as radians internally.</div>
+</li>
+</ul>
+<a name="horizontalWrap(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>horizontalWrap</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;horizontalWrap(boolean&nbsp;horizontalWrap)</pre>
+<div class="block">Sets whether the input image wraps around horizontally.
+ This is automatically set to true of the horizontal field of view
+ is set to 360.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>horizontalWrap</code> - if set to true, indicates that the input image wraps around horizontally</dd></dl>
+</li>
+</ul>
+<a name="offset(double, double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>offset</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;offset(double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or)</pre>
+<div class="block">Sets the initial transform offsets (used to level a bubble).</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>oy</code> - the yaw angle in degrees</dd><dd><code>op</code> - the pitch angle in degrees</dd><dd><code>or</code> - the roll angle in degrees</dd></dl>
+</li>
+</ul>
+<a name="view(double, double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>view</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;view(double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)</pre>
+<div class="block">Sets the view direction.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>yaw</code> - the yaw angle in degrees</dd><dd><code>pitch</code> - the pitch angle in degrees</dd><dd><code>roll</code> - the roll angle in degrees</dd></dl>
+</li>
+</ul>
+<a name="size(int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>size</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;size(int&nbsp;width,
+ int&nbsp;height)</pre>
+<div class="block">Sets the output image size in pixels.</div>
+</li>
+</ul>
+<a name="oversampling(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>oversampling</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;oversampling(int&nbsp;oversampling)</pre>
+<div class="block">If greater than one, oversamples each output pixel using a
+ grid of <code>oversampling * oversampling</code> samples.
+ Use together with <a href="../bigshot/AbstractCubicTransform.html#jitter(double)"><code>jitter(double)</code></a> to avoid moire
+ and aliasing.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>oversampling</code> - the amount of oversampling along each axis
+ of the output image. Must be <code>&gt;= 1</code>.</dd></dl>
+</li>
+</ul>
+<a name="jitter(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>jitter</h4>
+<pre>public&nbsp;<a href="../bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a>&nbsp;jitter(double&nbsp;jitter)</pre>
+<div class="block">Adds a random jitter to the sampling.
+ Use together with <a href="../bigshot/AbstractCubicTransform.html#oversampling(int)"><code>oversampling(int)</code></a> to avoid moire
+ and aliasing.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>jitter</code> - the jitter, in units of one output pixel</dd></dl>
+</li>
+</ul>
+<a name="insert(bigshot.Image)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>insert</h4>
+<pre>public&nbsp;void&nbsp;insert(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;image)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>insert</h4>
+<pre>public abstract&nbsp;void&nbsp;insert(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;image,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;topLeft,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;u,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;v)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Inserts an image into a panorama. The panorama is mapped onto the unit sphere.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>image</code> - the image to insert</dd><dd><code>topLeft</code> - the top-left corner of the image</dd><dd><code>u</code> - vector going from the top left to the top right corner of the image</dd><dd><code>v</code> - vector going from the top left to the bottom left corner of the image</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="transform()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transform</h4>
+<pre>public abstract&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;transform()
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Performs the transformation.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="transformToFaces()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transformToFaces</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&gt;&gt;&nbsp;transformToFaces()
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Transforms an image map to six VR cube faces. This method modifies the view (yaw, pitch and roll) values for
+ this transform.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>a list of delayed-evaluation images</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="readImage(java.io.File)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>readImage</h4>
+<pre>public static&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;readImage(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Convenience function to load an image from a file.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>imageName</code> - the image to load</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the image</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="transformToFaces(bigshot.AbstractCubicTransform, java.io.File, int, double, double, double)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>transformToFaces</h4>
+<pre>public static&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>[]&nbsp;transformToFaces(<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&nbsp;xform,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;outputBase,
+ int&nbsp;outputSize,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Executes a transformation six times to produce six VR cube faces.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>xform</code> - the transform to use. Its input must be set.</dd><dd><code>outputBase</code> - the base directory to output the cube faces to</dd><dd><code>outputSize</code> - the size (width and height), in pixels, of each face</dd><dd><code>oy</code> - the initial yaw offset</dd><dd><code>op</code> - the initial pitch offset</dd><dd><code>or</code> - the initial roll offset</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the resulting faces as PNG files in the outputBase directory. They are named "face_f.png", "face_r.png", "face_b.png", "face_l.png",
+ "face_u.png" and "face_d.png", for "Front", "Right", "Back", "Left", "Up" and "Down" respectively.</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Class</li>
+<li><a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/AbstractCubicTransform.html" target="_top">Frames</a></li>
+<li><a href="AbstractCubicTransform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/AbstractSphericalCubicTransform.html b/js/vendor/bigshot/doc/java/bigshot/AbstractSphericalCubicTransform.html
new file mode 100644
index 00000000..f7ba004e
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/AbstractSphericalCubicTransform.html
@@ -0,0 +1,412 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>AbstractSphericalCubicTransform (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="AbstractSphericalCubicTransform (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/CylindricalToCubic.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/AbstractSphericalCubicTransform.html" target="_top">Frames</a></li>
+<li><a href="AbstractSphericalCubicTransform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.AbstractCubicTransform">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.AbstractCubicTransform">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class AbstractSphericalCubicTransform" class="title">Class AbstractSphericalCubicTransform&lt;Derived extends <a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&gt;</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">bigshot.AbstractCubicTransform</a>&lt;Derived&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.AbstractSphericalCubicTransform&lt;Derived&gt;</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl><dt><span class="strong">Type Parameters:</span></dt><dd><code>Derived</code> - for subclasses, the most derived class name. Used to implement the
+ method chaining for builder methods.</dd></dl>
+<dl>
+<dt>Direct Known Subclasses:</dt>
+<dd><a href="../bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a>, <a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public abstract class <span class="strong">AbstractSphericalCubicTransform&lt;Derived extends <a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&gt;</span>
+extends <a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&lt;Derived&gt;</pre>
+<div class="block">Base class for transforms where the transformation to image map space can be expressed in
+ terms of the two angles theta and phi of the sight ray. Subclasses should override
+ <a href="../bigshot/AbstractSphericalCubicTransform.html#transformPoint(double, double, bigshot.Point2D)"><code>transformPoint(double, double, bigshot.Point2D)</code></a>.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested_classes_inherited_from_class_bigshot.AbstractCubicTransform">
+<!-- -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields_inherited_from_class_bigshot.AbstractCubicTransform">
+<!-- -->
+</a>
+<h3>Fields inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractCubicTransform.html#bottomCap">bottomCap</a>, <a href="../bigshot/AbstractCubicTransform.html#height">height</a>, <a href="../bigshot/AbstractCubicTransform.html#horizontalWrap">horizontalWrap</a>, <a href="../bigshot/AbstractCubicTransform.html#input">input</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHfov">inputHfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHorizon">inputHorizon</a>, <a href="../bigshot/AbstractCubicTransform.html#inputVfov">inputVfov</a>, <a href="../bigshot/AbstractCubicTransform.html#jitter">jitter</a>, <a href="../bigshot/AbstractCubicTransform.html#op">op</a>, <a href="../bigshot/AbstractCubicTransform.html#or">or</a>, <a href="../bigshot/AbstractCubicTransform.html#oversampling">oversampling</a>, <a href="../bigshot/AbstractCubicTransform.html#oy">oy</a>, <a href="../bigshot/AbstractCubicTransform.html#pitch">pitch</a>, <a href="../bigshot/AbstractCubicTransform.html#roll">roll</a>, <a href="../bigshot/AbstractCubicTransform.html#topCap">topCap</a>, <a href="../bigshot/AbstractCubicTransform.html#vfov">vfov</a>, <a href="../bigshot/AbstractCubicTransform.html#width">width</a>, <a href="../bigshot/AbstractCubicTransform.html#yaw">yaw</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/AbstractSphericalCubicTransform.html#AbstractSphericalCubicTransform()">AbstractSphericalCubicTransform</a></strong>()</code>
+<div class="block">Creates a new transform instance.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractSphericalCubicTransform.html#arcSample(int, double, double, int[])">arcSample</a></strong>(int&nbsp;y,
+ double&nbsp;arcWidth,
+ double&nbsp;inX,
+ int[]&nbsp;sampleBuffer)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractSphericalCubicTransform.html#insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">insert</a></strong>(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;image,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;topLeft,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;u,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;v)</code>
+<div class="block">Inserts an image into a panorama.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected abstract void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractSphericalCubicTransform.html#invTransformPoint(int, int, bigshot.Point2D)">invTransformPoint</a></strong>(int&nbsp;x,
+ int&nbsp;y,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</code>
+<div class="block">Transforms an image map coordinate to a ray in 3d-space.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractSphericalCubicTransform.html#transform()">transform</a></strong>()</code>
+<div class="block">Performs the transformation.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected abstract void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/AbstractSphericalCubicTransform.html#transformPoint(double, double, bigshot.Point2D)">transformPoint</a></strong>(double&nbsp;theta,
+ double&nbsp;phi,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</code>
+<div class="block">Transforms a ray in 3d-space, given by <code>theta</code> and <code>phi</code> to
+ image map coordinates.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_bigshot.AbstractCubicTransform">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractCubicTransform.html#bottomCap(boolean)">bottomCap</a>, <a href="../bigshot/AbstractCubicTransform.html#fromHuginPto(java.io.File)">fromHuginPto</a>, <a href="../bigshot/AbstractCubicTransform.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">fromHuginPtoParameters</a>, <a href="../bigshot/AbstractCubicTransform.html#horizontalWrap(boolean)">horizontalWrap</a>, <a href="../bigshot/AbstractCubicTransform.html#input()">input</a>, <a href="../bigshot/AbstractCubicTransform.html#input(java.io.File)">input</a>, <a href="../bigshot/AbstractCubicTransform.html#input(bigshot.Image)">input</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHfov()">inputHfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHfov(double)">inputHfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHorizon(int)">inputHorizon</a>, <a href="../bigshot/AbstractCubicTransform.html#inputVfov()">inputVfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputVfov(double)">inputVfov</a>, <a href="../bigshot/AbstractCubicTransform.html#insert(bigshot.Image)">insert</a>, <a href="../bigshot/AbstractCubicTransform.html#jitter(double)">jitter</a>, <a href="../bigshot/AbstractCubicTransform.html#offset(double, double, double)">offset</a>, <a href="../bigshot/AbstractCubicTransform.html#oversampling(int)">oversampling</a>, <a href="../bigshot/AbstractCubicTransform.html#readImage(java.io.File)">readImage</a>, <a href="../bigshot/AbstractCubicTransform.html#size(int, int)">size</a>, <a href="../bigshot/AbstractCubicTransform.html#topCap(boolean)">topCap</a>, <a href="../bigshot/AbstractCubicTransform.html#transformToFaces()">transformToFaces</a>, <a href="../bigshot/AbstractCubicTransform.html#transformToFaces(bigshot.AbstractCubicTransform, java.io.File, int, double, double, double)">transformToFaces</a>, <a href="../bigshot/AbstractCubicTransform.html#vfov(double)">vfov</a>, <a href="../bigshot/AbstractCubicTransform.html#view(double, double, double)">view</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="AbstractSphericalCubicTransform()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>AbstractSphericalCubicTransform</h4>
+<pre>public&nbsp;AbstractSphericalCubicTransform()</pre>
+<div class="block">Creates a new transform instance.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="transform()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transform</h4>
+<pre>public&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;transform()
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Performs the transformation.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../bigshot/AbstractCubicTransform.html#transform()">transform</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&lt;<a href="../bigshot/AbstractSphericalCubicTransform.html" title="type parameter in AbstractSphericalCubicTransform">Derived</a> extends <a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&gt;</code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="arcSample(int, double, double, int[])">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>arcSample</h4>
+<pre>protected&nbsp;void&nbsp;arcSample(int&nbsp;y,
+ double&nbsp;arcWidth,
+ double&nbsp;inX,
+ int[]&nbsp;sampleBuffer)</pre>
+</li>
+</ul>
+<a name="insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>insert</h4>
+<pre>public&nbsp;void&nbsp;insert(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;image,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;topLeft,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;u,
+ <a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;v)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../bigshot/AbstractCubicTransform.html#insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">AbstractCubicTransform</a></code></strong></div>
+<div class="block">Inserts an image into a panorama. The panorama is mapped onto the unit sphere.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../bigshot/AbstractCubicTransform.html#insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">insert</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&lt;<a href="../bigshot/AbstractSphericalCubicTransform.html" title="type parameter in AbstractSphericalCubicTransform">Derived</a> extends <a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>image</code> - the image to insert</dd><dd><code>topLeft</code> - the top-left corner of the image</dd><dd><code>u</code> - vector going from the top left to the top right corner of the image</dd><dd><code>v</code> - vector going from the top left to the bottom left corner of the image</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="transformPoint(double, double, bigshot.Point2D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transformPoint</h4>
+<pre>protected abstract&nbsp;void&nbsp;transformPoint(double&nbsp;theta,
+ double&nbsp;phi,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</pre>
+<div class="block">Transforms a ray in 3d-space, given by <code>theta</code> and <code>phi</code> to
+ image map coordinates.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>theta</code> - the yaw angle of the ray, in radians. Increases clockwise.</dd><dd><code>phi</code> - the pitch angle of the ray, in radians. Increases downwards.</dd><dd><code>output</code> - the result of the transformation. Gives the image map coordinates
+ in pixels</dd></dl>
+</li>
+</ul>
+<a name="invTransformPoint(int, int, bigshot.Point2D)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>invTransformPoint</h4>
+<pre>protected abstract&nbsp;void&nbsp;invTransformPoint(int&nbsp;x,
+ int&nbsp;y,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</pre>
+<div class="block">Transforms an image map coordinate to a ray in 3d-space.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate in the image map.</dd><dd><code>y</code> - the y-coordinate in the image map.</dd><dd><code>output</code> - the result of the transformation. Gives the ray angle in radians
+ as x = theta, y = phi</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/CylindricalToCubic.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/AbstractSphericalCubicTransform.html" target="_top">Frames</a></li>
+<li><a href="AbstractSphericalCubicTransform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.AbstractCubicTransform">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.AbstractCubicTransform">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/CylindricalToCubic.html b/js/vendor/bigshot/doc/java/bigshot/CylindricalToCubic.html
new file mode 100644
index 00000000..6ae703ef
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/CylindricalToCubic.html
@@ -0,0 +1,487 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>CylindricalToCubic (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="CylindricalToCubic (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/CylindricalToCubic.html" target="_top">Frames</a></li>
+<li><a href="CylindricalToCubic.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.AbstractCubicTransform">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.AbstractCubicTransform">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class CylindricalToCubic" class="title">Class CylindricalToCubic</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">bigshot.AbstractCubicTransform</a>&lt;Derived&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">bigshot.AbstractSphericalCubicTransform</a>&lt;<a href="../bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.CylindricalToCubic</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="strong">CylindricalToCubic</span>
+extends <a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a>&lt;<a href="../bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a>&gt;</pre>
+<div class="block">Transforms an cylindrical image map to rectilinear images. Used to create a cube map
+ for <a href="../../js/symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested_classes_inherited_from_class_bigshot.AbstractCubicTransform">
+<!-- -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields_inherited_from_class_bigshot.AbstractCubicTransform">
+<!-- -->
+</a>
+<h3>Fields inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractCubicTransform.html#bottomCap">bottomCap</a>, <a href="../bigshot/AbstractCubicTransform.html#height">height</a>, <a href="../bigshot/AbstractCubicTransform.html#horizontalWrap">horizontalWrap</a>, <a href="../bigshot/AbstractCubicTransform.html#input">input</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHfov">inputHfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHorizon">inputHorizon</a>, <a href="../bigshot/AbstractCubicTransform.html#inputVfov">inputVfov</a>, <a href="../bigshot/AbstractCubicTransform.html#jitter">jitter</a>, <a href="../bigshot/AbstractCubicTransform.html#op">op</a>, <a href="../bigshot/AbstractCubicTransform.html#or">or</a>, <a href="../bigshot/AbstractCubicTransform.html#oversampling">oversampling</a>, <a href="../bigshot/AbstractCubicTransform.html#oy">oy</a>, <a href="../bigshot/AbstractCubicTransform.html#pitch">pitch</a>, <a href="../bigshot/AbstractCubicTransform.html#roll">roll</a>, <a href="../bigshot/AbstractCubicTransform.html#topCap">topCap</a>, <a href="../bigshot/AbstractCubicTransform.html#vfov">vfov</a>, <a href="../bigshot/AbstractCubicTransform.html#width">width</a>, <a href="../bigshot/AbstractCubicTransform.html#yaw">yaw</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/CylindricalToCubic.html#CylindricalToCubic()">CylindricalToCubic</a></strong>()</code>
+<div class="block">Creates a new transform instance.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/CylindricalToCubic.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">fromHuginPtoParameters</a></strong>(int&nbsp;w,
+ int&nbsp;h,
+ double&nbsp;v,
+ int&nbsp;cropLeft,
+ int&nbsp;cropRight,
+ int&nbsp;cropTop,
+ int&nbsp;cropBottom)</code>
+<div class="block">Sets the required projection parameters from the Hugin <code>.pto</code> parameters.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/CylindricalToCubic.html#invTransformPoint(int, int, bigshot.Point2D)">invTransformPoint</a></strong>(int&nbsp;x,
+ int&nbsp;y,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</code>
+<div class="block">Transforms an image map coordinate to a ray in 3d-space.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/CylindricalToCubic.html#readImage(java.io.File)">readImage</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName)</code>
+<div class="block">Convenience function to load an image from a file.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/CylindricalToCubic.html#transformPoint(double, double, bigshot.Point2D)">transformPoint</a></strong>(double&nbsp;theta,
+ double&nbsp;phi,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</code>
+<div class="block">Transforms a ray in 3d-space, given by <code>theta</code> and <code>phi</code> to
+ image map coordinates.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/CylindricalToCubic.html#transformToFace(java.io.File, java.io.File, int, double, double, double, double, double, double, double)">transformToFace</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;output,
+ int&nbsp;outputSize,
+ double&nbsp;vfov,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or,
+ double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)</code>
+<div class="block">Transforms an cylindrical map to a rectilinear image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/CylindricalToCubic.html#transformToFace(bigshot.Image, int, double, double, double, double, double, double, double)">transformToFace</a></strong>(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;in,
+ int&nbsp;outputSize,
+ double&nbsp;vfov,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or,
+ double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)</code>
+<div class="block">Transforms a cylindrical map to a rectilinear image.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_bigshot.AbstractSphericalCubicTransform">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractSphericalCubicTransform.html#arcSample(int, double, double, int[])">arcSample</a>, <a href="../bigshot/AbstractSphericalCubicTransform.html#insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">insert</a>, <a href="../bigshot/AbstractSphericalCubicTransform.html#transform()">transform</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_bigshot.AbstractCubicTransform">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractCubicTransform.html#bottomCap(boolean)">bottomCap</a>, <a href="../bigshot/AbstractCubicTransform.html#fromHuginPto(java.io.File)">fromHuginPto</a>, <a href="../bigshot/AbstractCubicTransform.html#horizontalWrap(boolean)">horizontalWrap</a>, <a href="../bigshot/AbstractCubicTransform.html#input()">input</a>, <a href="../bigshot/AbstractCubicTransform.html#input(java.io.File)">input</a>, <a href="../bigshot/AbstractCubicTransform.html#input(bigshot.Image)">input</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHfov()">inputHfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHfov(double)">inputHfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHorizon(int)">inputHorizon</a>, <a href="../bigshot/AbstractCubicTransform.html#inputVfov()">inputVfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputVfov(double)">inputVfov</a>, <a href="../bigshot/AbstractCubicTransform.html#insert(bigshot.Image)">insert</a>, <a href="../bigshot/AbstractCubicTransform.html#jitter(double)">jitter</a>, <a href="../bigshot/AbstractCubicTransform.html#offset(double, double, double)">offset</a>, <a href="../bigshot/AbstractCubicTransform.html#oversampling(int)">oversampling</a>, <a href="../bigshot/AbstractCubicTransform.html#size(int, int)">size</a>, <a href="../bigshot/AbstractCubicTransform.html#topCap(boolean)">topCap</a>, <a href="../bigshot/AbstractCubicTransform.html#transformToFaces()">transformToFaces</a>, <a href="../bigshot/AbstractCubicTransform.html#transformToFaces(bigshot.AbstractCubicTransform, java.io.File, int, double, double, double)">transformToFaces</a>, <a href="../bigshot/AbstractCubicTransform.html#vfov(double)">vfov</a>, <a href="../bigshot/AbstractCubicTransform.html#view(double, double, double)">view</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="CylindricalToCubic()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CylindricalToCubic</h4>
+<pre>public&nbsp;CylindricalToCubic()</pre>
+<div class="block">Creates a new transform instance.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="fromHuginPtoParameters(int, int, double, int, int, int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fromHuginPtoParameters</h4>
+<pre>public&nbsp;<a href="../bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a>&nbsp;fromHuginPtoParameters(int&nbsp;w,
+ int&nbsp;h,
+ double&nbsp;v,
+ int&nbsp;cropLeft,
+ int&nbsp;cropRight,
+ int&nbsp;cropTop,
+ int&nbsp;cropBottom)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../bigshot/AbstractCubicTransform.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">AbstractCubicTransform</a></code></strong></div>
+<div class="block">Sets the required projection parameters from the Hugin <code>.pto</code> parameters.
+ The Hugin pto describes an image that is <code>w</code> pixels wide and <code>h</code> pixels tall.
+ It has a horizontal field of view of <code>v</code> degrees. From that image, a sub-rectangle
+ with top-left coordinates (<code>cropLeft</code>, <code>cropTop</code>) and bottom-right coordinates
+ (<code>cropRight</code>, <code>cropBottom</code>) has been rendered and is the actual input image
+ to the projection.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../bigshot/AbstractCubicTransform.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">fromHuginPtoParameters</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&lt;<a href="../bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>w</code> - the width of the map image, in pixels</dd><dd><code>h</code> - the height of the map image, in pixels</dd><dd><code>v</code> - the horizontal field of view, in degrees</dd><dd><code>cropLeft</code> - the first used column of the image</dd><dd><code>cropRight</code> - one past the rightmost used column of the image</dd><dd><code>cropTop</code> - the first used row in the image</dd><dd><code>cropBottom</code> - one past the bottom-most used row of the image</dd></dl>
+</li>
+</ul>
+<a name="invTransformPoint(int, int, bigshot.Point2D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>invTransformPoint</h4>
+<pre>protected&nbsp;void&nbsp;invTransformPoint(int&nbsp;x,
+ int&nbsp;y,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../bigshot/AbstractSphericalCubicTransform.html#invTransformPoint(int, int, bigshot.Point2D)">AbstractSphericalCubicTransform</a></code></strong></div>
+<div class="block">Transforms an image map coordinate to a ray in 3d-space.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../bigshot/AbstractSphericalCubicTransform.html#invTransformPoint(int, int, bigshot.Point2D)">invTransformPoint</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a>&lt;<a href="../bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate in the image map.</dd><dd><code>y</code> - the y-coordinate in the image map.</dd><dd><code>output</code> - the result of the transformation. Gives the ray angle in radians
+ as x = theta, y = phi</dd></dl>
+</li>
+</ul>
+<a name="transformPoint(double, double, bigshot.Point2D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transformPoint</h4>
+<pre>protected&nbsp;void&nbsp;transformPoint(double&nbsp;theta,
+ double&nbsp;phi,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../bigshot/AbstractSphericalCubicTransform.html#transformPoint(double, double, bigshot.Point2D)">AbstractSphericalCubicTransform</a></code></strong></div>
+<div class="block">Transforms a ray in 3d-space, given by <code>theta</code> and <code>phi</code> to
+ image map coordinates.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../bigshot/AbstractSphericalCubicTransform.html#transformPoint(double, double, bigshot.Point2D)">transformPoint</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a>&lt;<a href="../bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>theta</code> - the yaw angle of the ray, in radians. Increases clockwise.</dd><dd><code>phi</code> - the pitch angle of the ray, in radians. Increases downwards.</dd><dd><code>output</code> - the result of the transformation. Gives the image map coordinates
+ in pixels</dd></dl>
+</li>
+</ul>
+<a name="readImage(java.io.File)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>readImage</h4>
+<pre>public static&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;readImage(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Convenience function to load an image from a file.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>imageName</code> - the image to load</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the image</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="transformToFace(bigshot.Image, int, double, double, double, double, double, double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transformToFace</h4>
+<pre>public static&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;transformToFace(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;in,
+ int&nbsp;outputSize,
+ double&nbsp;vfov,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or,
+ double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Transforms a cylindrical map to a rectilinear image.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>in</code> - the equirectangular image map</dd><dd><code>outputSize</code> - the size (width and height), in pixels, of each face</dd><dd><code>vfov</code> - the vertical field of view, in degrees</dd><dd><code>oy</code> - the initial yaw offset, in degrees</dd><dd><code>op</code> - the initial pitch offset, in degrees</dd><dd><code>or</code> - the initial roll offset, in degrees</dd><dd><code>yaw</code> - the yaw angle of the viewer, in degrees</dd><dd><code>pitch</code> - the pitch angle of the viewer, in degrees</dd><dd><code>roll</code> - the roll angle of the viewer, in degrees</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="transformToFace(java.io.File, java.io.File, int, double, double, double, double, double, double, double)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>transformToFace</h4>
+<pre>public static&nbsp;void&nbsp;transformToFace(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;output,
+ int&nbsp;outputSize,
+ double&nbsp;vfov,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or,
+ double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Transforms an cylindrical map to a rectilinear image.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>imageName</code> - the equirectangular image map</dd><dd><code>output</code> - the output file name</dd><dd><code>outputSize</code> - the size (width and height), in pixels, of each face</dd><dd><code>vfov</code> - the vertical field of view, in degrees</dd><dd><code>oy</code> - the initial yaw offset, in degrees</dd><dd><code>op</code> - the initial pitch offset, in degrees</dd><dd><code>or</code> - the initial roll offset, in degrees</dd><dd><code>yaw</code> - the yaw angle of the viewer, in degrees</dd><dd><code>pitch</code> - the pitch angle of the viewer, in degrees</dd><dd><code>roll</code> - the roll angle of the viewer, in degrees</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/CylindricalToCubic.html" target="_top">Frames</a></li>
+<li><a href="CylindricalToCubic.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.AbstractCubicTransform">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.AbstractCubicTransform">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/EquirectangularToCubic.html b/js/vendor/bigshot/doc/java/bigshot/EquirectangularToCubic.html
new file mode 100644
index 00000000..c0406e29
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/EquirectangularToCubic.html
@@ -0,0 +1,510 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>EquirectangularToCubic (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="EquirectangularToCubic (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/CylindricalToCubic.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/FastTrigInverse.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/EquirectangularToCubic.html" target="_top">Frames</a></li>
+<li><a href="EquirectangularToCubic.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.AbstractCubicTransform">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.AbstractCubicTransform">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class EquirectangularToCubic" class="title">Class EquirectangularToCubic</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">bigshot.AbstractCubicTransform</a>&lt;Derived&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">bigshot.AbstractSphericalCubicTransform</a>&lt;<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.EquirectangularToCubic</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="strong">EquirectangularToCubic</span>
+extends <a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a>&lt;<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a>&gt;</pre>
+<div class="block">Transforms an equirectangular image map to rectilinear images. Used to create a cube map
+ for <a href="../../js/symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested_classes_inherited_from_class_bigshot.AbstractCubicTransform">
+<!-- -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields_inherited_from_class_bigshot.AbstractCubicTransform">
+<!-- -->
+</a>
+<h3>Fields inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractCubicTransform.html#bottomCap">bottomCap</a>, <a href="../bigshot/AbstractCubicTransform.html#height">height</a>, <a href="../bigshot/AbstractCubicTransform.html#horizontalWrap">horizontalWrap</a>, <a href="../bigshot/AbstractCubicTransform.html#input">input</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHfov">inputHfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHorizon">inputHorizon</a>, <a href="../bigshot/AbstractCubicTransform.html#inputVfov">inputVfov</a>, <a href="../bigshot/AbstractCubicTransform.html#jitter">jitter</a>, <a href="../bigshot/AbstractCubicTransform.html#op">op</a>, <a href="../bigshot/AbstractCubicTransform.html#or">or</a>, <a href="../bigshot/AbstractCubicTransform.html#oversampling">oversampling</a>, <a href="../bigshot/AbstractCubicTransform.html#oy">oy</a>, <a href="../bigshot/AbstractCubicTransform.html#pitch">pitch</a>, <a href="../bigshot/AbstractCubicTransform.html#roll">roll</a>, <a href="../bigshot/AbstractCubicTransform.html#topCap">topCap</a>, <a href="../bigshot/AbstractCubicTransform.html#vfov">vfov</a>, <a href="../bigshot/AbstractCubicTransform.html#width">width</a>, <a href="../bigshot/AbstractCubicTransform.html#yaw">yaw</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/EquirectangularToCubic.html#EquirectangularToCubic()">EquirectangularToCubic</a></strong>()</code>
+<div class="block">Creates a new transform instance.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/EquirectangularToCubic.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">fromHuginPtoParameters</a></strong>(int&nbsp;w,
+ int&nbsp;h,
+ double&nbsp;v,
+ int&nbsp;cropLeft,
+ int&nbsp;cropRight,
+ int&nbsp;cropTop,
+ int&nbsp;cropBottom)</code>
+<div class="block">Sets the required projection parameters from the Hugin <code>.pto</code> parameters.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/EquirectangularToCubic.html#input(bigshot.Image)">input</a></strong>(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;input)</code>
+<div class="block">Sets the image map.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/EquirectangularToCubic.html#invTransformPoint(int, int, bigshot.Point2D)">invTransformPoint</a></strong>(int&nbsp;x,
+ int&nbsp;y,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</code>
+<div class="block">Transforms an image map coordinate to a ray in 3d-space.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/EquirectangularToCubic.html#readImage(java.io.File)">readImage</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName)</code>
+<div class="block">Convenience function to load an image from a file.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/EquirectangularToCubic.html#transformPoint(double, double, bigshot.Point2D)">transformPoint</a></strong>(double&nbsp;theta,
+ double&nbsp;phi,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</code>
+<div class="block">Transforms a ray in 3d-space, given by <code>theta</code> and <code>phi</code> to
+ image map coordinates.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/EquirectangularToCubic.html#transformToFace(java.io.File, java.io.File, int, double, double, double, double, double, double, double)">transformToFace</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;output,
+ int&nbsp;outputSize,
+ double&nbsp;vfov,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or,
+ double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)</code>
+<div class="block">Transforms an equirectangular map to a rectilinear image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/EquirectangularToCubic.html#transformToFace(bigshot.Image, int, double, double, double, double, double, double, double)">transformToFace</a></strong>(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;in,
+ int&nbsp;outputSize,
+ double&nbsp;vfov,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or,
+ double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)</code>
+<div class="block">Transforms an equirectangular map to a rectilinear image.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_bigshot.AbstractSphericalCubicTransform">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractSphericalCubicTransform.html#arcSample(int, double, double, int[])">arcSample</a>, <a href="../bigshot/AbstractSphericalCubicTransform.html#insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">insert</a>, <a href="../bigshot/AbstractSphericalCubicTransform.html#transform()">transform</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_bigshot.AbstractCubicTransform">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></h3>
+<code><a href="../bigshot/AbstractCubicTransform.html#bottomCap(boolean)">bottomCap</a>, <a href="../bigshot/AbstractCubicTransform.html#fromHuginPto(java.io.File)">fromHuginPto</a>, <a href="../bigshot/AbstractCubicTransform.html#horizontalWrap(boolean)">horizontalWrap</a>, <a href="../bigshot/AbstractCubicTransform.html#input()">input</a>, <a href="../bigshot/AbstractCubicTransform.html#input(java.io.File)">input</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHfov()">inputHfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHfov(double)">inputHfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputHorizon(int)">inputHorizon</a>, <a href="../bigshot/AbstractCubicTransform.html#inputVfov()">inputVfov</a>, <a href="../bigshot/AbstractCubicTransform.html#inputVfov(double)">inputVfov</a>, <a href="../bigshot/AbstractCubicTransform.html#insert(bigshot.Image)">insert</a>, <a href="../bigshot/AbstractCubicTransform.html#jitter(double)">jitter</a>, <a href="../bigshot/AbstractCubicTransform.html#offset(double, double, double)">offset</a>, <a href="../bigshot/AbstractCubicTransform.html#oversampling(int)">oversampling</a>, <a href="../bigshot/AbstractCubicTransform.html#size(int, int)">size</a>, <a href="../bigshot/AbstractCubicTransform.html#topCap(boolean)">topCap</a>, <a href="../bigshot/AbstractCubicTransform.html#transformToFaces()">transformToFaces</a>, <a href="../bigshot/AbstractCubicTransform.html#transformToFaces(bigshot.AbstractCubicTransform, java.io.File, int, double, double, double)">transformToFaces</a>, <a href="../bigshot/AbstractCubicTransform.html#vfov(double)">vfov</a>, <a href="../bigshot/AbstractCubicTransform.html#view(double, double, double)">view</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="EquirectangularToCubic()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>EquirectangularToCubic</h4>
+<pre>public&nbsp;EquirectangularToCubic()</pre>
+<div class="block">Creates a new transform instance.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="input(bigshot.Image)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>input</h4>
+<pre>public&nbsp;<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a>&nbsp;input(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;input)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../bigshot/AbstractCubicTransform.html#input(bigshot.Image)">AbstractCubicTransform</a></code></strong></div>
+<div class="block">Sets the image map. Once set, the <a href="../bigshot/AbstractCubicTransform.html#transform()"><code>AbstractCubicTransform.transform()</code></a>
+ method can be called several times with other parameters being adjusted
+ between calls.</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../bigshot/AbstractCubicTransform.html#input(bigshot.Image)">input</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&lt;<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="fromHuginPtoParameters(int, int, double, int, int, int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fromHuginPtoParameters</h4>
+<pre>public&nbsp;<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a>&nbsp;fromHuginPtoParameters(int&nbsp;w,
+ int&nbsp;h,
+ double&nbsp;v,
+ int&nbsp;cropLeft,
+ int&nbsp;cropRight,
+ int&nbsp;cropTop,
+ int&nbsp;cropBottom)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../bigshot/AbstractCubicTransform.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">AbstractCubicTransform</a></code></strong></div>
+<div class="block">Sets the required projection parameters from the Hugin <code>.pto</code> parameters.
+ The Hugin pto describes an image that is <code>w</code> pixels wide and <code>h</code> pixels tall.
+ It has a horizontal field of view of <code>v</code> degrees. From that image, a sub-rectangle
+ with top-left coordinates (<code>cropLeft</code>, <code>cropTop</code>) and bottom-right coordinates
+ (<code>cropRight</code>, <code>cropBottom</code>) has been rendered and is the actual input image
+ to the projection.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../bigshot/AbstractCubicTransform.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">fromHuginPtoParameters</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&lt;<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>w</code> - the width of the map image, in pixels</dd><dd><code>h</code> - the height of the map image, in pixels</dd><dd><code>v</code> - the horizontal field of view, in degrees</dd><dd><code>cropLeft</code> - the first used column of the image</dd><dd><code>cropRight</code> - one past the rightmost used column of the image</dd><dd><code>cropTop</code> - the first used row in the image</dd><dd><code>cropBottom</code> - one past the bottom-most used row of the image</dd></dl>
+</li>
+</ul>
+<a name="invTransformPoint(int, int, bigshot.Point2D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>invTransformPoint</h4>
+<pre>protected&nbsp;void&nbsp;invTransformPoint(int&nbsp;x,
+ int&nbsp;y,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../bigshot/AbstractSphericalCubicTransform.html#invTransformPoint(int, int, bigshot.Point2D)">AbstractSphericalCubicTransform</a></code></strong></div>
+<div class="block">Transforms an image map coordinate to a ray in 3d-space.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../bigshot/AbstractSphericalCubicTransform.html#invTransformPoint(int, int, bigshot.Point2D)">invTransformPoint</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a>&lt;<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate in the image map.</dd><dd><code>y</code> - the y-coordinate in the image map.</dd><dd><code>output</code> - the result of the transformation. Gives the ray angle in radians
+ as x = theta, y = phi</dd></dl>
+</li>
+</ul>
+<a name="transformPoint(double, double, bigshot.Point2D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transformPoint</h4>
+<pre>protected&nbsp;void&nbsp;transformPoint(double&nbsp;theta,
+ double&nbsp;phi,
+ <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a>&nbsp;output)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../bigshot/AbstractSphericalCubicTransform.html#transformPoint(double, double, bigshot.Point2D)">AbstractSphericalCubicTransform</a></code></strong></div>
+<div class="block">Transforms a ray in 3d-space, given by <code>theta</code> and <code>phi</code> to
+ image map coordinates.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../bigshot/AbstractSphericalCubicTransform.html#transformPoint(double, double, bigshot.Point2D)">transformPoint</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a>&lt;<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>theta</code> - the yaw angle of the ray, in radians. Increases clockwise.</dd><dd><code>phi</code> - the pitch angle of the ray, in radians. Increases downwards.</dd><dd><code>output</code> - the result of the transformation. Gives the image map coordinates
+ in pixels</dd></dl>
+</li>
+</ul>
+<a name="readImage(java.io.File)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>readImage</h4>
+<pre>public static&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;readImage(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Convenience function to load an image from a file.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>imageName</code> - the image to load</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the image</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="transformToFace(bigshot.Image, int, double, double, double, double, double, double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transformToFace</h4>
+<pre>public static&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;transformToFace(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;in,
+ int&nbsp;outputSize,
+ double&nbsp;vfov,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or,
+ double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Transforms an equirectangular map to a rectilinear image.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>in</code> - the equirectangular image map</dd><dd><code>outputSize</code> - the size (width and height), in pixels, of each face</dd><dd><code>vfov</code> - the vertical field of view, in degrees</dd><dd><code>oy</code> - the initial yaw offset, in degrees</dd><dd><code>op</code> - the initial pitch offset, in degrees</dd><dd><code>or</code> - the initial roll offset, in degrees</dd><dd><code>yaw</code> - the yaw angle of the viewer, in degrees</dd><dd><code>pitch</code> - the pitch angle of the viewer, in degrees</dd><dd><code>roll</code> - the roll angle of the viewer, in degrees</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="transformToFace(java.io.File, java.io.File, int, double, double, double, double, double, double, double)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>transformToFace</h4>
+<pre>public static&nbsp;void&nbsp;transformToFace(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageName,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;output,
+ int&nbsp;outputSize,
+ double&nbsp;vfov,
+ double&nbsp;oy,
+ double&nbsp;op,
+ double&nbsp;or,
+ double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Transforms an equirectangular map to a rectilinear image.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>imageName</code> - the equirectangular image map</dd><dd><code>output</code> - the output file name</dd><dd><code>outputSize</code> - the size (width and height), in pixels, of each face</dd><dd><code>vfov</code> - the vertical field of view, in degrees</dd><dd><code>oy</code> - the initial yaw offset, in degrees</dd><dd><code>op</code> - the initial pitch offset, in degrees</dd><dd><code>or</code> - the initial roll offset, in degrees</dd><dd><code>yaw</code> - the yaw angle of the viewer, in degrees</dd><dd><code>pitch</code> - the pitch angle of the viewer, in degrees</dd><dd><code>roll</code> - the roll angle of the viewer, in degrees</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/CylindricalToCubic.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/FastTrigInverse.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/EquirectangularToCubic.html" target="_top">Frames</a></li>
+<li><a href="EquirectangularToCubic.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.AbstractCubicTransform">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.AbstractCubicTransform">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.FastAcos.html b/js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.FastAcos.html
new file mode 100644
index 00000000..3f3c5182
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.FastAcos.html
@@ -0,0 +1,306 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>FastTrigInverse.FastAcos (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FastTrigInverse.FastAcos (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/FastTrigInverse.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/FastTrigInverse.FastAcos.html" target="_top">Frames</a></li>
+<li><a href="FastTrigInverse.FastAcos.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.FastTrigInverse">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.FastTrigInverse">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class FastTrigInverse.FastAcos" class="title">Class FastTrigInverse.FastAcos</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../bigshot/FastTrigInverse.html" title="class in bigshot">bigshot.FastTrigInverse</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.FastTrigInverse.FastAcos</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <span class="strong">FastTrigInverse.FastAcos</span>
+extends <a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></pre>
+<div class="block">Fast inverse-cosine.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested_classes_inherited_from_class_bigshot.FastTrigInverse">
+<!-- -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;bigshot.<a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></h3>
+<code><a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot">FastTrigInverse.FastAcos</a>, <a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot">FastTrigInverse.FastAtan</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields_inherited_from_class_bigshot.FastTrigInverse">
+<!-- -->
+</a>
+<h3>Fields inherited from class&nbsp;bigshot.<a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></h3>
+<code><a href="../bigshot/FastTrigInverse.html#lookup">lookup</a>, <a href="../bigshot/FastTrigInverse.html#step">step</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/FastTrigInverse.FastAcos.html#FastTrigInverse.FastAcos(int)">FastTrigInverse.FastAcos</a></strong>(int&nbsp;resolution)</code>
+<div class="block">Creates a new fast arccos object.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/FastTrigInverse.FastAcos.html#f(double)">f</a></strong>(double&nbsp;v)</code>
+<div class="block">Computes an approximation to arccos(v)</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="FastTrigInverse.FastAcos(int)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FastTrigInverse.FastAcos</h4>
+<pre>public&nbsp;FastTrigInverse.FastAcos(int&nbsp;resolution)</pre>
+<div class="block">Creates a new fast arccos object.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>resolution</code> - the resolution of the lookup table</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="f(double)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>f</h4>
+<pre>public&nbsp;double&nbsp;f(double&nbsp;v)</pre>
+<div class="block">Computes an approximation to arccos(v)</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../bigshot/FastTrigInverse.html#f(double)">f</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>v</code> - the value</dd>
+<dt><span class="strong">Returns:</span></dt><dd>arccos(v)</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/FastTrigInverse.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/FastTrigInverse.FastAcos.html" target="_top">Frames</a></li>
+<li><a href="FastTrigInverse.FastAcos.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.FastTrigInverse">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.FastTrigInverse">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.FastAtan.html b/js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.FastAtan.html
new file mode 100644
index 00000000..bf5b8ddb
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.FastAtan.html
@@ -0,0 +1,306 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>FastTrigInverse.FastAtan (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FastTrigInverse.FastAtan (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/Image.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/FastTrigInverse.FastAtan.html" target="_top">Frames</a></li>
+<li><a href="FastTrigInverse.FastAtan.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.FastTrigInverse">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.FastTrigInverse">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class FastTrigInverse.FastAtan" class="title">Class FastTrigInverse.FastAtan</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../bigshot/FastTrigInverse.html" title="class in bigshot">bigshot.FastTrigInverse</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.FastTrigInverse.FastAtan</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <span class="strong">FastTrigInverse.FastAtan</span>
+extends <a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></pre>
+<div class="block">Fast inverse-cosine.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested_classes_inherited_from_class_bigshot.FastTrigInverse">
+<!-- -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;bigshot.<a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></h3>
+<code><a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot">FastTrigInverse.FastAcos</a>, <a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot">FastTrigInverse.FastAtan</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields_inherited_from_class_bigshot.FastTrigInverse">
+<!-- -->
+</a>
+<h3>Fields inherited from class&nbsp;bigshot.<a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></h3>
+<code><a href="../bigshot/FastTrigInverse.html#lookup">lookup</a>, <a href="../bigshot/FastTrigInverse.html#step">step</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/FastTrigInverse.FastAtan.html#FastTrigInverse.FastAtan(int)">FastTrigInverse.FastAtan</a></strong>(int&nbsp;resolution)</code>
+<div class="block">Creates a new fast arccos object.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/FastTrigInverse.FastAtan.html#f(double)">f</a></strong>(double&nbsp;v)</code>
+<div class="block">Computes an approximation to arctan(v)</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="FastTrigInverse.FastAtan(int)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FastTrigInverse.FastAtan</h4>
+<pre>public&nbsp;FastTrigInverse.FastAtan(int&nbsp;resolution)</pre>
+<div class="block">Creates a new fast arccos object.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>resolution</code> - the resolution of the lookup table</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="f(double)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>f</h4>
+<pre>public&nbsp;double&nbsp;f(double&nbsp;v)</pre>
+<div class="block">Computes an approximation to arctan(v)</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../bigshot/FastTrigInverse.html#f(double)">f</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>v</code> - the value</dd>
+<dt><span class="strong">Returns:</span></dt><dd>arctan(v)</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/Image.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/FastTrigInverse.FastAtan.html" target="_top">Frames</a></li>
+<li><a href="FastTrigInverse.FastAtan.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_bigshot.FastTrigInverse">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_bigshot.FastTrigInverse">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.html b/js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.html
new file mode 100644
index 00000000..7fff6fd5
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/FastTrigInverse.html
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>FastTrigInverse (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FastTrigInverse (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/FastTrigInverse.html" target="_top">Frames</a></li>
+<li><a href="FastTrigInverse.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class FastTrigInverse" class="title">Class FastTrigInverse</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.FastTrigInverse</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Direct Known Subclasses:</dt>
+<dd><a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot">FastTrigInverse.FastAcos</a>, <a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot">FastTrigInverse.FastAtan</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public class <span class="strong">FastTrigInverse</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">Fast inverse trigonometric functions based on lookup tables and
+ linear interpolation between lookup table values.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot">FastTrigInverse.FastAcos</a></strong></code>
+<div class="block">Fast inverse-cosine.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot">FastTrigInverse.FastAtan</a></strong></code>
+<div class="block">Fast inverse-cosine.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected double[]</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/FastTrigInverse.html#lookup">lookup</a></strong></code>
+<div class="block">The lookup table.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/FastTrigInverse.html#step">step</a></strong></code>
+<div class="block">The interval between two input values in the lookup table.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/FastTrigInverse.html#FastTrigInverse(int)">FastTrigInverse</a></strong>(int&nbsp;resolution)</code>
+<div class="block">Creates a new function object.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/FastTrigInverse.html#f(double)">f</a></strong>(double&nbsp;v)</code>
+<div class="block">Apply the function.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="lookup">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>lookup</h4>
+<pre>protected final&nbsp;double[] lookup</pre>
+<div class="block">The lookup table.</div>
+</li>
+</ul>
+<a name="step">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>step</h4>
+<pre>protected final&nbsp;double step</pre>
+<div class="block">The interval between two input values in the lookup table.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="FastTrigInverse(int)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FastTrigInverse</h4>
+<pre>public&nbsp;FastTrigInverse(int&nbsp;resolution)</pre>
+<div class="block">Creates a new function object.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>resolution</code> - the resolution of the lookup table</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="f(double)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>f</h4>
+<pre>public&nbsp;double&nbsp;f(double&nbsp;v)</pre>
+<div class="block">Apply the function.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>v</code> - the value</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the value of the inverse trigonometric function</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/FastTrigInverse.html" target="_top">Frames</a></li>
+<li><a href="FastTrigInverse.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/Image.html b/js/vendor/bigshot/doc/java/bigshot/Image.html
new file mode 100644
index 00000000..267a576a
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/Image.html
@@ -0,0 +1,850 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Image (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Image (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImageInsert.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/Image.html" target="_top">Frames</a></li>
+<li><a href="Image.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class Image" class="title">Class Image</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.Image</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="strong">Image</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">A 30-bit (10 per channel) RGB image.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#COMPONENT_MAX_VALUE">COMPONENT_MAX_VALUE</a></strong></code>
+<div class="block">The maximum value a component can have.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/Image.html#Image(int, int)">Image</a></strong>(int&nbsp;width,
+ int&nbsp;height)</code>
+<div class="block">Creates an empty (all-black) image with the given width and height.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../bigshot/Image.html#Image(int, int, int[])">Image</a></strong>(int&nbsp;width,
+ int&nbsp;height,
+ int[]&nbsp;data)</code>
+<div class="block">Creates an image with the given data.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/Image.html#Image(int, int, int[], byte[])">Image</a></strong>(int&nbsp;width,
+ int&nbsp;height,
+ int[]&nbsp;data,
+ byte[]&nbsp;alpha)</code>
+<div class="block">Creates an image with the given data.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#addAlpha()">addAlpha</a></strong>()</code>
+<div class="block">Adds an alpha channel to this image and fills it with
+ the maximum value.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#alphaValue(int, int)">alphaValue</a></strong>(int&nbsp;x,
+ int&nbsp;y)</code>
+<div class="block">Gets the alpha pixel color value for a given pixel.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#alphaValue(int, int, int)">alphaValue</a></strong>(int&nbsp;x,
+ int&nbsp;y,
+ int&nbsp;a)</code>
+<div class="block">Sets the alpha value for a given pixel.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#componentValue(int, int, int)">componentValue</a></strong>(int&nbsp;x,
+ int&nbsp;y,
+ int&nbsp;shift)</code>
+<div class="block">Helper function to get the component with a given bitshift
+ from a pixel.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#componentValue(int, int, int[])">componentValue</a></strong>(int&nbsp;x,
+ int&nbsp;y,
+ int[]&nbsp;result)</code>
+<div class="block">Gets the red, green and blue values for a given pixel.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#componentValue(int, int, int, int, int)">componentValue</a></strong>(int&nbsp;x,
+ int&nbsp;y,
+ int&nbsp;r,
+ int&nbsp;g,
+ int&nbsp;b)</code>
+<div class="block">Sets the red, green and blue values for a given pixel.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#fromBuffered(java.awt.image.BufferedImage)">fromBuffered</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image">BufferedImage</a>&nbsp;input)</code>
+<div class="block">Creates an image without alpha channel from a <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image"><code>BufferedImage</code></a>, which is assumed to be
+ of type <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_RGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_RGB</code></a> or <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_ARGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_ARGB</code></a>.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#fromBuffered(java.awt.image.BufferedImage, boolean)">fromBuffered</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image">BufferedImage</a>&nbsp;input,
+ boolean&nbsp;withAlpha)</code>
+<div class="block">Creates an image from a <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image"><code>BufferedImage</code></a>, which is assumed to be
+ of type <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_RGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_RGB</code></a> or <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_ARGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_ARGB</code></a>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#getName()">getName</a></strong>()</code>
+<div class="block">Gets the name of the image, which can be the file name or other
+ identifying key.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#hasAlpha()">hasAlpha</a></strong>()</code>
+<div class="block">Returns true if this image has an associated alpha channel.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#height()">height</a></strong>()</code>
+<div class="block">Image height in pixels.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#lerp(double, double, double)">lerp</a></strong>(double&nbsp;a,
+ double&nbsp;b,
+ double&nbsp;x)</code>
+<div class="block">Helper function to linerarly interpolate between two values over
+ the interval [0, 1].</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#multiply(int, int, int, int)">multiply</a></strong>(int&nbsp;y0,
+ int&nbsp;y1,
+ int&nbsp;num,
+ int&nbsp;denom)</code>
+<div class="block">Scales all channels by <code>num / denom</code>.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#read(java.io.File)">read</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file)</code>
+<div class="block">Reads an image without alpha from a file using java ImageIO.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/Image.html" title="class in bigshot">Image</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#read(java.io.File, boolean)">read</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file,
+ boolean&nbsp;withAlpha)</code>
+<div class="block">Reads an image from a file using java ImageIO.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#removeAlpha()">removeAlpha</a></strong>()</code>
+<div class="block">Removes the alpha channel from this image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#sample(double, double)">sample</a></strong>(double&nbsp;x,
+ double&nbsp;y)</code>
+<div class="block">Computes a packed 30-bit interpolated value for all channels at a given point</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#sample(double, double, int)">sample</a></strong>(double&nbsp;x,
+ double&nbsp;y,
+ int&nbsp;shift)</code>
+<div class="block">Samples a linearly interpolated channel value.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#sampleAlpha(double, double)">sampleAlpha</a></strong>(double&nbsp;x,
+ double&nbsp;y)</code>
+<div class="block">Samples a linearly interpolated alpha value.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#sampleComponents(double, double, int[])">sampleComponents</a></strong>(double&nbsp;x,
+ double&nbsp;y,
+ int[]&nbsp;result)</code>
+<div class="block">Computes a linearly interpolated value for all channels at a given point</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#setName(java.lang.String)">setName</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Sets the name of the image, which can be the file name or other
+ identifying key.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image">BufferedImage</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#toBuffered()">toBuffered</a></strong>()</code>
+<div class="block">Converts this image to a 24-bit per pixel <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image"><code>BufferedImage</code></a> with type
+ <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_RGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_RGB</code></a>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#value(int, int)">value</a></strong>(int&nbsp;x,
+ int&nbsp;y)</code>
+<div class="block">Gets the packed pixel color value for a given pixel.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#value(int, int, int)">value</a></strong>(int&nbsp;x,
+ int&nbsp;y,
+ int&nbsp;v)</code>
+<div class="block">Sets the packed 30-bit value at a given point</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#width()">width</a></strong>()</code>
+<div class="block">Image width in pixels.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Image.html#write(java.io.File)">write</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file)</code>
+<div class="block">Writes the image to a PNG file.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="COMPONENT_MAX_VALUE">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>COMPONENT_MAX_VALUE</h4>
+<pre>public static final&nbsp;int COMPONENT_MAX_VALUE</pre>
+<div class="block">The maximum value a component can have.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.Image.COMPONENT_MAX_VALUE">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Image(int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>Image</h4>
+<pre>public&nbsp;Image(int&nbsp;width,
+ int&nbsp;height)</pre>
+<div class="block">Creates an empty (all-black) image with the given width and height.</div>
+</li>
+</ul>
+<a name="Image(int, int, int[])">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>Image</h4>
+<pre>public&nbsp;Image(int&nbsp;width,
+ int&nbsp;height,
+ int[]&nbsp;data)</pre>
+<div class="block">Creates an image with the given data.</div>
+</li>
+</ul>
+<a name="Image(int, int, int[], byte[])">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Image</h4>
+<pre>public&nbsp;Image(int&nbsp;width,
+ int&nbsp;height,
+ int[]&nbsp;data,
+ byte[]&nbsp;alpha)</pre>
+<div class="block">Creates an image with the given data.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="setName(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setName</h4>
+<pre>public&nbsp;void&nbsp;setName(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Sets the name of the image, which can be the file name or other
+ identifying key.</div>
+</li>
+</ul>
+<a name="getName()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getName</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;getName()</pre>
+<div class="block">Gets the name of the image, which can be the file name or other
+ identifying key.</div>
+</li>
+</ul>
+<a name="componentValue(int, int, int[])">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>componentValue</h4>
+<pre>public&nbsp;void&nbsp;componentValue(int&nbsp;x,
+ int&nbsp;y,
+ int[]&nbsp;result)</pre>
+<div class="block">Gets the red, green and blue values for a given pixel.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate of the pixel</dd><dd><code>y</code> - the y-coordinate of the pixel</dd><dd><code>result</code> - the array to put the result in. result[0] = red, result[1] = green, result[2] = blue</dd></dl>
+</li>
+</ul>
+<a name="componentValue(int, int, int, int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>componentValue</h4>
+<pre>public&nbsp;void&nbsp;componentValue(int&nbsp;x,
+ int&nbsp;y,
+ int&nbsp;r,
+ int&nbsp;g,
+ int&nbsp;b)</pre>
+<div class="block">Sets the red, green and blue values for a given pixel.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate of the pixel</dd><dd><code>y</code> - the y-coordinate of the pixel</dd><dd><code>r</code> - the red value</dd><dd><code>g</code> - the green value</dd><dd><code>b</code> - the blue value</dd></dl>
+</li>
+</ul>
+<a name="alphaValue(int, int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>alphaValue</h4>
+<pre>public&nbsp;void&nbsp;alphaValue(int&nbsp;x,
+ int&nbsp;y,
+ int&nbsp;a)</pre>
+<div class="block">Sets the alpha value for a given pixel.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate of the pixel</dd><dd><code>y</code> - the y-coordinate of the pixel</dd><dd><code>a</code> - the alpha value</dd></dl>
+</li>
+</ul>
+<a name="value(int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>value</h4>
+<pre>public&nbsp;int&nbsp;value(int&nbsp;x,
+ int&nbsp;y)</pre>
+<div class="block">Gets the packed pixel color value for a given pixel.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate of the pixel</dd><dd><code>y</code> - the y-coordinate of the pixel</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the packed, 30-bit-total, 10-bit-per-color, value</dd></dl>
+</li>
+</ul>
+<a name="componentValue(int, int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>componentValue</h4>
+<pre>protected&nbsp;int&nbsp;componentValue(int&nbsp;x,
+ int&nbsp;y,
+ int&nbsp;shift)</pre>
+<div class="block">Helper function to get the component with a given bitshift
+ from a pixel.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate of the pixel</dd><dd><code>y</code> - the y-coordinate of the pixel</dd><dd><code>shift</code> - the bitshift of the component to return</dd></dl>
+</li>
+</ul>
+<a name="alphaValue(int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>alphaValue</h4>
+<pre>public&nbsp;int&nbsp;alphaValue(int&nbsp;x,
+ int&nbsp;y)</pre>
+<div class="block">Gets the alpha pixel color value for a given pixel.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate of the pixel</dd><dd><code>y</code> - the y-coordinate of the pixel</dd>
+<dt><span class="strong">Returns:</span></dt><dd>10-bit alpha</dd></dl>
+</li>
+</ul>
+<a name="sampleAlpha(double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sampleAlpha</h4>
+<pre>protected&nbsp;int&nbsp;sampleAlpha(double&nbsp;x,
+ double&nbsp;y)</pre>
+<div class="block">Samples a linearly interpolated alpha value.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate to sample</dd><dd><code>y</code> - the y-coordinate to sample</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the alpha value at <code>x, y</code></dd></dl>
+</li>
+</ul>
+<a name="lerp(double, double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>lerp</h4>
+<pre>protected&nbsp;double&nbsp;lerp(double&nbsp;a,
+ double&nbsp;b,
+ double&nbsp;x)</pre>
+<div class="block">Helper function to linerarly interpolate between two values over
+ the interval [0, 1].</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>a</code> - the value at 0</dd><dd><code>b</code> - the value at 1</dd><dd><code>x</code> - the point in the interval [0, 1] that we want the value for</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the value at <code>x</code></dd></dl>
+</li>
+</ul>
+<a name="sample(double, double, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sample</h4>
+<pre>protected&nbsp;int&nbsp;sample(double&nbsp;x,
+ double&nbsp;y,
+ int&nbsp;shift)</pre>
+<div class="block">Samples a linearly interpolated channel value.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate to sample</dd><dd><code>y</code> - the y-coordinate to sample</dd><dd><code>shift</code> - the bitshift of the component</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the component value at <code>x, y</code></dd></dl>
+</li>
+</ul>
+<a name="sampleComponents(double, double, int[])">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sampleComponents</h4>
+<pre>public&nbsp;void&nbsp;sampleComponents(double&nbsp;x,
+ double&nbsp;y,
+ int[]&nbsp;result)</pre>
+<div class="block">Computes a linearly interpolated value for all channels at a given point</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate to sample</dd><dd><code>y</code> - the y-coordinate to sample</dd><dd><code>result</code> - the result of the interpolated sampling. result[0] = red, result[1] = green, result[2] = blue</dd></dl>
+</li>
+</ul>
+<a name="sample(double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sample</h4>
+<pre>public&nbsp;int&nbsp;sample(double&nbsp;x,
+ double&nbsp;y)</pre>
+<div class="block">Computes a packed 30-bit interpolated value for all channels at a given point</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate to sample</dd><dd><code>y</code> - the y-coordinate to sample</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the 30-bit interpolated sample at the given point</dd></dl>
+</li>
+</ul>
+<a name="value(int, int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>value</h4>
+<pre>public&nbsp;void&nbsp;value(int&nbsp;x,
+ int&nbsp;y,
+ int&nbsp;v)</pre>
+<div class="block">Sets the packed 30-bit value at a given point</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate of the pixel</dd><dd><code>y</code> - the y-coordinate of the pixel</dd><dd><code>v</code> - the 30-bit packed value to set the pixel to</dd></dl>
+</li>
+</ul>
+<a name="width()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>width</h4>
+<pre>public&nbsp;int&nbsp;width()</pre>
+<div class="block">Image width in pixels.</div>
+</li>
+</ul>
+<a name="height()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>height</h4>
+<pre>public&nbsp;int&nbsp;height()</pre>
+<div class="block">Image height in pixels.</div>
+</li>
+</ul>
+<a name="hasAlpha()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hasAlpha</h4>
+<pre>public&nbsp;boolean&nbsp;hasAlpha()</pre>
+<div class="block">Returns true if this image has an associated alpha channel.</div>
+</li>
+</ul>
+<a name="addAlpha()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addAlpha</h4>
+<pre>public&nbsp;void&nbsp;addAlpha()</pre>
+<div class="block">Adds an alpha channel to this image and fills it with
+ the maximum value.</div>
+</li>
+</ul>
+<a name="removeAlpha()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>removeAlpha</h4>
+<pre>public&nbsp;void&nbsp;removeAlpha()</pre>
+<div class="block">Removes the alpha channel from this image.</div>
+</li>
+</ul>
+<a name="write(java.io.File)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>write</h4>
+<pre>public&nbsp;void&nbsp;write(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Writes the image to a PNG file.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="multiply(int, int, int, int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>multiply</h4>
+<pre>public&nbsp;void&nbsp;multiply(int&nbsp;y0,
+ int&nbsp;y1,
+ int&nbsp;num,
+ int&nbsp;denom)</pre>
+<div class="block">Scales all channels by <code>num / denom</code>.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>y0</code> - the first line to apply the scaling to</dd><dd><code>y1</code> - one-past the last line to apply the scaling to</dd></dl>
+</li>
+</ul>
+<a name="toBuffered()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toBuffered</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image">BufferedImage</a>&nbsp;toBuffered()
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Converts this image to a 24-bit per pixel <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image"><code>BufferedImage</code></a> with type
+ <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_RGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_RGB</code></a>.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="read(java.io.File)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>read</h4>
+<pre>public static&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;read(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Reads an image without alpha from a file using java ImageIO.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="read(java.io.File, boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>read</h4>
+<pre>public static&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;read(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file,
+ boolean&nbsp;withAlpha)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Reads an image from a file using java ImageIO.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="fromBuffered(java.awt.image.BufferedImage)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fromBuffered</h4>
+<pre>public static&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;fromBuffered(<a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image">BufferedImage</a>&nbsp;input)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Creates an image without alpha channel from a <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image"><code>BufferedImage</code></a>, which is assumed to be
+ of type <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_RGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_RGB</code></a> or <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_ARGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_ARGB</code></a>.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="fromBuffered(java.awt.image.BufferedImage, boolean)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>fromBuffered</h4>
+<pre>public static&nbsp;<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;fromBuffered(<a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image">BufferedImage</a>&nbsp;input,
+ boolean&nbsp;withAlpha)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Creates an image from a <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image"><code>BufferedImage</code></a>, which is assumed to be
+ of type <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_RGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_RGB</code></a> or <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_ARGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_ARGB</code></a>.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImageInsert.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/Image.html" target="_top">Frames</a></li>
+<li><a href="Image.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/ImageInsert.html b/js/vendor/bigshot/doc/java/bigshot/ImageInsert.html
new file mode 100644
index 00000000..e7b824d6
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/ImageInsert.html
@@ -0,0 +1,651 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ImageInsert (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImageInsert (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/Image.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImageInsert.html" target="_top">Frames</a></li>
+<li><a href="ImageInsert.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class ImageInsert" class="title">Class ImageInsert</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.ImageInsert</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="strong">ImageInsert</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">An image that is projected into an existing panorama. The position of the image
+ can be given in two ways - either as a <i>{yaw, pitch, roll, vfov}</i> quadruplet
+ of angles, or as three vectors - <i>{topLeft, u, v}</i>. If the <i>topLeft</i>
+ vector is set, the image insert will use the latter method to insert the image.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImageInsert.html#ImageInsert()">ImageInsert</a></strong>()</code>
+<div class="block">Creates a new image insert.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#apply(bigshot.AbstractCubicTransform)">apply</a></strong>(<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&nbsp;xform)</code>
+<div class="block">Inserts the image into the panorama.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#image(bigshot.Image)">image</a></strong>(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;image)</code>
+<div class="block">Sets the image to insert.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#imageFile()">imageFile</a></strong>()</code>
+<div class="block">Gets the image file to insert.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#imageFile(java.io.File)">imageFile</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageFile)</code>
+<div class="block">Sets an image file to insert.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#imageFile(java.lang.String)">imageFile</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;imageFile)</code>
+<div class="block">Sets an image file to insert.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#parseAngles(java.lang.String)">parseAngles</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;decl)</code>
+<div class="block">Parses a command-line parameter describing the image
+ insert.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#parseVectors(java.lang.String)">parseVectors</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;decl)</code>
+<div class="block">Parses a command-line parameter describing the image
+ insert.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#pitch()">pitch</a></strong>()</code>
+<div class="block">Gets the pitch of the center point of the image, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#pitch(double)">pitch</a></strong>(double&nbsp;pitch)</code>
+<div class="block">Sets the pitch of the center point of the image, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#roll()">roll</a></strong>()</code>
+<div class="block">Gets the roll around the view axis (yaw and pitch)
+ of the image, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#roll(double)">roll</a></strong>(double&nbsp;roll)</code>
+<div class="block">Sets the roll around the view axis (yaw and pitch)
+ of the image, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#topLeft()">topLeft</a></strong>()</code>
+<div class="block">Gets the <i>topLeft</i> vector, which is the bubble-space coordinate
+ of the top left corner of the image to be inserted.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#topLeft(bigshot.Point3D)">topLeft</a></strong>(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;topLeft)</code>
+<div class="block">Sets the <i>topLeft</i> vector, which is the bubble-space coordinate
+ of the top left corner of the image to be inserted.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#u()">u</a></strong>()</code>
+<div class="block">Gets the <i>u</i> vector, going from the top left corner to
+ the top right corner of the image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#u(bigshot.Point3D)">u</a></strong>(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;u)</code>
+<div class="block">Sets the <i>u</i> vector, going from the top left corner to
+ the top right corner of the image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#v()">v</a></strong>()</code>
+<div class="block">Gets the <i>v</i> vector, going from the top left corner to
+ the bottom left corner of the image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#v(bigshot.Point3D)">v</a></strong>(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;v)</code>
+<div class="block">Sets the <i>v</i> vector, going from the top left corner to
+ the bottom left corner of the image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#vfov()">vfov</a></strong>()</code>
+<div class="block">Gets the number of vertical degrees the image occupies.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#vfov(double)">vfov</a></strong>(double&nbsp;vfov)</code>
+<div class="block">Sets the number of degrees the image occupies.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#view(double, double, double)">view</a></strong>(double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)</code>
+<div class="block">Sets all view parameters at once.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#yaw()">yaw</a></strong>()</code>
+<div class="block">Gets the yaw of the center point of the image, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImageInsert.html#yaw(double)">yaw</a></strong>(double&nbsp;yaw)</code>
+<div class="block">Sets the yaw of the center point of the image, in degrees.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="ImageInsert()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ImageInsert</h4>
+<pre>public&nbsp;ImageInsert()</pre>
+<div class="block">Creates a new image insert.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="yaw()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yaw</h4>
+<pre>public&nbsp;double&nbsp;yaw()</pre>
+<div class="block">Gets the yaw of the center point of the image, in degrees.</div>
+</li>
+</ul>
+<a name="yaw(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yaw</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;yaw(double&nbsp;yaw)</pre>
+<div class="block">Sets the yaw of the center point of the image, in degrees.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="pitch()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pitch</h4>
+<pre>public&nbsp;double&nbsp;pitch()</pre>
+<div class="block">Gets the pitch of the center point of the image, in degrees.</div>
+</li>
+</ul>
+<a name="pitch(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pitch</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;pitch(double&nbsp;pitch)</pre>
+<div class="block">Sets the pitch of the center point of the image, in degrees.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="roll()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>roll</h4>
+<pre>public&nbsp;double&nbsp;roll()</pre>
+<div class="block">Gets the roll around the view axis (yaw and pitch)
+ of the image, in degrees.</div>
+</li>
+</ul>
+<a name="roll(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>roll</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;roll(double&nbsp;roll)</pre>
+<div class="block">Sets the roll around the view axis (yaw and pitch)
+ of the image, in degrees.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="view(double, double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>view</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;view(double&nbsp;yaw,
+ double&nbsp;pitch,
+ double&nbsp;roll)</pre>
+<div class="block">Sets all view parameters at once.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>yaw</code> - the way in degrees</dd><dd><code>pitch</code> - the pitch in degrees</dd><dd><code>roll</code> - the roll in degrees</dd>
+<dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="imageFile()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>imageFile</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageFile()</pre>
+<div class="block">Gets the image file to insert.</div>
+</li>
+</ul>
+<a name="imageFile(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>imageFile</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;imageFile(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;imageFile)</pre>
+<div class="block">Sets an image file to insert. The image is loaded
+ when applying the insert.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="imageFile(java.io.File)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>imageFile</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;imageFile(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;imageFile)</pre>
+<div class="block">Sets an image file to insert. The image is loaded
+ when applying the insert.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="image(bigshot.Image)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>image</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;image(<a href="../bigshot/Image.html" title="class in bigshot">Image</a>&nbsp;image)</pre>
+<div class="block">Sets the image to insert. This overrides any <a href="../bigshot/ImageInsert.html#imageFile(java.io.File)"><code>imageFile(File)</code></a>
+ setting.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="vfov()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>vfov</h4>
+<pre>public&nbsp;double&nbsp;vfov()</pre>
+<div class="block">Gets the number of vertical degrees the image occupies.</div>
+</li>
+</ul>
+<a name="vfov(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>vfov</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;vfov(double&nbsp;vfov)</pre>
+<div class="block">Sets the number of degrees the image occupies. If the insert is
+ specified using <i>{topLeft,u,v}</i> then this parameter is
+ ignored.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="topLeft()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>topLeft</h4>
+<pre>public&nbsp;<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;topLeft()</pre>
+<div class="block">Gets the <i>topLeft</i> vector, which is the bubble-space coordinate
+ of the top left corner of the image to be inserted.</div>
+</li>
+</ul>
+<a name="topLeft(bigshot.Point3D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>topLeft</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;topLeft(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;topLeft)</pre>
+<div class="block">Sets the <i>topLeft</i> vector, which is the bubble-space coordinate
+ of the top left corner of the image to be inserted.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="u()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>u</h4>
+<pre>public&nbsp;<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;u()</pre>
+<div class="block">Gets the <i>u</i> vector, going from the top left corner to
+ the top right corner of the image.</div>
+</li>
+</ul>
+<a name="u(bigshot.Point3D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>u</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;u(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;u)</pre>
+<div class="block">Sets the <i>u</i> vector, going from the top left corner to
+ the top right corner of the image.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="v()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>v</h4>
+<pre>public&nbsp;<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;v()</pre>
+<div class="block">Gets the <i>v</i> vector, going from the top left corner to
+ the bottom left corner of the image.</div>
+</li>
+</ul>
+<a name="v(bigshot.Point3D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>v</h4>
+<pre>public&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;v(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;v)</pre>
+<div class="block">Sets the <i>v</i> vector, going from the top left corner to
+ the bottom left corner of the image.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
+</li>
+</ul>
+<a name="parseVectors(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>parseVectors</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;parseVectors(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;decl)</pre>
+<div class="block">Parses a command-line parameter describing the image
+ insert. The parameter is a comma-separated list
+ consisting of ten elements:
+ <i>topLeft.x,topLeft.y,topLeft.z,u.x,u.y,u.z,v.x,v.y,v.z,imageFile</i>.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>a new ImageInsert instance with the topLeft, u, and v and imageFile parameters set</dd></dl>
+</li>
+</ul>
+<a name="parseAngles(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>parseAngles</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&nbsp;parseAngles(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;decl)</pre>
+<div class="block">Parses a command-line parameter describing the image
+ insert. The parameter is a comma-separated list
+ consisting of five elements: <i>yaw,pitch,roll,vfov,imageFile</i>.</div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>a new ImageInsert instance with the yaw, pitch, roll, vfov, and imageFile parameters set</dd></dl>
+</li>
+</ul>
+<a name="apply(bigshot.AbstractCubicTransform)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>apply</h4>
+<pre>public&nbsp;void&nbsp;apply(<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&nbsp;xform)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Inserts the image into the panorama. If the insert position has been given as
+ a <i>{topLeft, u, v}</i>, the transform is unchanged. Otherwise, the
+ transform's view and vfov are set and previous settings lost.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/Image.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImageInsert.html" target="_top">Frames</a></li>
+<li><a href="ImageInsert.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.DescriptorFormat.html b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.DescriptorFormat.html
new file mode 100644
index 00000000..f5c891a2
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.DescriptorFormat.html
@@ -0,0 +1,360 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ImagePyramidParameters.DescriptorFormat (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImagePyramidParameters.DescriptorFormat (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.DescriptorFormat.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.DescriptorFormat.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Enum ImagePyramidParameters.DescriptorFormat" class="title">Enum ImagePyramidParameters.DescriptorFormat</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.ImagePyramidParameters.DescriptorFormat</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <span class="strong">ImagePyramidParameters.DescriptorFormat</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&gt;</pre>
+<div class="block">The descriptor format for the output pyramid.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html#BIGSHOT">BIGSHOT</a></strong></code>
+<div class="block">Outputs a descriptor compatible with the default Bigshot filesystem adapters.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html#DZI">DZI</a></strong></code>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html#toString()">toString</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html#valueOf(java.lang.String)">valueOf</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html#valueOfKey(java.lang.String)">valueOfKey</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>[]</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html#values()">values</a></strong>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#compareTo(E)" title="class or interface in java.lang">compareTo</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass()" title="class or interface in java.lang">getDeclaringClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#name()" title="class or interface in java.lang">name</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#ordinal()" title="class or interface in java.lang">ordinal</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class, java.lang.String)" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="BIGSHOT">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>BIGSHOT</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a> BIGSHOT</pre>
+<div class="block">Outputs a descriptor compatible with the default Bigshot filesystem adapters.</div>
+</li>
+</ul>
+<a name="DZI">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>DZI</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a> DZI</pre>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>[]&nbsp;values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (ImagePyramidParameters.DescriptorFormat c : ImagePyramidParameters.DescriptorFormat.values())
+&nbsp; System.out.println(c);
+</pre></div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>an array containing the constants of this enum type, in
+the order they are declared</dd></dl>
+</li>
+</ul>
+<a name="valueOf(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&nbsp;valueOf(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the enum constant with the specified name</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant
+with the specified name</dd>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd></dl>
+</li>
+</ul>
+<a name="toString()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="valueOfKey(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOfKey</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&nbsp;valueOfKey(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.DescriptorFormat.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.DescriptorFormat.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.FolderLayout.html b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.FolderLayout.html
new file mode 100644
index 00000000..03ac4c49
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.FolderLayout.html
@@ -0,0 +1,360 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ImagePyramidParameters.FolderLayout (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImagePyramidParameters.FolderLayout (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.FolderLayout.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.FolderLayout.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Enum ImagePyramidParameters.FolderLayout" class="title">Enum ImagePyramidParameters.FolderLayout</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.ImagePyramidParameters.FolderLayout</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <span class="strong">ImagePyramidParameters.FolderLayout</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&gt;</pre>
+<div class="block">The folder structure of the output pyramid. Default is BIGSHOT.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.FolderLayout.html#BIGSHOT">BIGSHOT</a></strong></code>
+<div class="block">Outputs a folder layout compatible with the default Bigshot filesystem adapters.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.FolderLayout.html#DZI">DZI</a></strong></code>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.FolderLayout.html#toString()">toString</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.FolderLayout.html#valueOf(java.lang.String)">valueOf</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.FolderLayout.html#valueOfKey(java.lang.String)">valueOfKey</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>[]</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.FolderLayout.html#values()">values</a></strong>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#compareTo(E)" title="class or interface in java.lang">compareTo</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass()" title="class or interface in java.lang">getDeclaringClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#name()" title="class or interface in java.lang">name</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#ordinal()" title="class or interface in java.lang">ordinal</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class, java.lang.String)" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="BIGSHOT">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>BIGSHOT</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a> BIGSHOT</pre>
+<div class="block">Outputs a folder layout compatible with the default Bigshot filesystem adapters.</div>
+</li>
+</ul>
+<a name="DZI">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>DZI</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a> DZI</pre>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>[]&nbsp;values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (ImagePyramidParameters.FolderLayout c : ImagePyramidParameters.FolderLayout.values())
+&nbsp; System.out.println(c);
+</pre></div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>an array containing the constants of this enum type, in
+the order they are declared</dd></dl>
+</li>
+</ul>
+<a name="valueOf(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&nbsp;valueOf(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the enum constant with the specified name</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant
+with the specified name</dd>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd></dl>
+</li>
+</ul>
+<a name="toString()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="valueOfKey(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOfKey</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&nbsp;valueOfKey(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.FolderLayout.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.FolderLayout.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Format.html b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Format.html
new file mode 100644
index 00000000..fa99ffa7
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Format.html
@@ -0,0 +1,360 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ImagePyramidParameters.Format (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImagePyramidParameters.Format (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.Format.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.Format.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Enum ImagePyramidParameters.Format" class="title">Enum ImagePyramidParameters.Format</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.ImagePyramidParameters.Format</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <span class="strong">ImagePyramidParameters.Format</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&gt;</pre>
+<div class="block">The output format for the image pyramid.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.Format.html#ARCHIVE">ARCHIVE</a></strong></code>
+<div class="block">A single-file <code>.bigshot</code> archive.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.Format.html#FOLDERS">FOLDERS</a></strong></code>
+<div class="block">A folder structure.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Format.html#toString()">toString</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Format.html#valueOf(java.lang.String)">valueOf</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Format.html#valueOfKey(java.lang.String)">valueOfKey</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>[]</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Format.html#values()">values</a></strong>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#compareTo(E)" title="class or interface in java.lang">compareTo</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass()" title="class or interface in java.lang">getDeclaringClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#name()" title="class or interface in java.lang">name</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#ordinal()" title="class or interface in java.lang">ordinal</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class, java.lang.String)" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="ARCHIVE">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ARCHIVE</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a> ARCHIVE</pre>
+<div class="block">A single-file <code>.bigshot</code> archive.</div>
+</li>
+</ul>
+<a name="FOLDERS">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FOLDERS</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a> FOLDERS</pre>
+<div class="block">A folder structure.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>[]&nbsp;values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (ImagePyramidParameters.Format c : ImagePyramidParameters.Format.values())
+&nbsp; System.out.println(c);
+</pre></div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>an array containing the constants of this enum type, in
+the order they are declared</dd></dl>
+</li>
+</ul>
+<a name="valueOf(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&nbsp;valueOf(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the enum constant with the specified name</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant
+with the specified name</dd>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd></dl>
+</li>
+</ul>
+<a name="toString()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="valueOfKey(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOfKey</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&nbsp;valueOfKey(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.Format.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.Format.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.ImageFormat.html b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.ImageFormat.html
new file mode 100644
index 00000000..cf50288a
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.ImageFormat.html
@@ -0,0 +1,360 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ImagePyramidParameters.ImageFormat (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImagePyramidParameters.ImageFormat (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.ImageFormat.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.ImageFormat.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Enum ImagePyramidParameters.ImageFormat" class="title">Enum ImagePyramidParameters.ImageFormat</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.ImagePyramidParameters.ImageFormat</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <span class="strong">ImagePyramidParameters.ImageFormat</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&gt;</pre>
+<div class="block">Image format for the tiles and everything.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.ImageFormat.html#JPG">JPG</a></strong></code>
+<div class="block">Create JPEG files.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.ImageFormat.html#PNG">PNG</a></strong></code>
+<div class="block">Create PNG files.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.ImageFormat.html#toString()">toString</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.ImageFormat.html#valueOf(java.lang.String)">valueOf</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.ImageFormat.html#valueOfKey(java.lang.String)">valueOfKey</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>[]</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.ImageFormat.html#values()">values</a></strong>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#compareTo(E)" title="class or interface in java.lang">compareTo</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass()" title="class or interface in java.lang">getDeclaringClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#name()" title="class or interface in java.lang">name</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#ordinal()" title="class or interface in java.lang">ordinal</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class, java.lang.String)" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="JPG">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>JPG</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a> JPG</pre>
+<div class="block">Create JPEG files.</div>
+</li>
+</ul>
+<a name="PNG">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>PNG</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a> PNG</pre>
+<div class="block">Create PNG files.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>[]&nbsp;values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (ImagePyramidParameters.ImageFormat c : ImagePyramidParameters.ImageFormat.values())
+&nbsp; System.out.println(c);
+</pre></div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>an array containing the constants of this enum type, in
+the order they are declared</dd></dl>
+</li>
+</ul>
+<a name="valueOf(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&nbsp;valueOf(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the enum constant with the specified name</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant
+with the specified name</dd>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd></dl>
+</li>
+</ul>
+<a name="toString()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="valueOfKey(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOfKey</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&nbsp;valueOfKey(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.ImageFormat.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.ImageFormat.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.LevelNumbering.html b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.LevelNumbering.html
new file mode 100644
index 00000000..067b19a9
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.LevelNumbering.html
@@ -0,0 +1,345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ImagePyramidParameters.LevelNumbering (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImagePyramidParameters.LevelNumbering (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.LevelNumbering.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.LevelNumbering.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Enum ImagePyramidParameters.LevelNumbering" class="title">Enum ImagePyramidParameters.LevelNumbering</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.ImagePyramidParameters.LevelNumbering</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <span class="strong">ImagePyramidParameters.LevelNumbering</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&gt;</pre>
+<div class="block">If set to "invert", inverts the level numbering. By default, zoom level 0 is the full-size image, level 1 is half the size of level 0, and so on. In the Deep Zoom Image format, level N is the image at a resolution where the largest dimension is 2^n pixels. For example, a 2048x2048 Deep Zoom image would be at full resolution at level 11, half resolution at level 10, and so on.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html#INVERT">INVERT</a></strong></code>
+<div class="block">Inverts the level numbering.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html#toString()">toString</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html#valueOf(java.lang.String)">valueOf</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html#valueOfKey(java.lang.String)">valueOfKey</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>[]</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html#values()">values</a></strong>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#compareTo(E)" title="class or interface in java.lang">compareTo</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass()" title="class or interface in java.lang">getDeclaringClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#name()" title="class or interface in java.lang">name</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#ordinal()" title="class or interface in java.lang">ordinal</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class, java.lang.String)" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="INVERT">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>INVERT</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a> INVERT</pre>
+<div class="block">Inverts the level numbering.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>[]&nbsp;values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (ImagePyramidParameters.LevelNumbering c : ImagePyramidParameters.LevelNumbering.values())
+&nbsp; System.out.println(c);
+</pre></div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>an array containing the constants of this enum type, in
+the order they are declared</dd></dl>
+</li>
+</ul>
+<a name="valueOf(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&nbsp;valueOf(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the enum constant with the specified name</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant
+with the specified name</dd>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd></dl>
+</li>
+</ul>
+<a name="toString()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="valueOfKey(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOfKey</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&nbsp;valueOfKey(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.LevelNumbering.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.LevelNumbering.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Preset.html b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Preset.html
new file mode 100644
index 00000000..bf6171ab
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Preset.html
@@ -0,0 +1,345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ImagePyramidParameters.Preset (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImagePyramidParameters.Preset (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.Preset.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.Preset.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Enum ImagePyramidParameters.Preset" class="title">Enum ImagePyramidParameters.Preset</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.ImagePyramidParameters.Preset</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <span class="strong">ImagePyramidParameters.Preset</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&gt;</pre>
+<div class="block">A preset set of parameters.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.Preset.html#DZI_CUBEMAP">DZI_CUBEMAP</a></strong></code>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Preset.html#toString()">toString</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Preset.html#valueOf(java.lang.String)">valueOf</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Preset.html#valueOfKey(java.lang.String)">valueOfKey</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>[]</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Preset.html#values()">values</a></strong>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#compareTo(E)" title="class or interface in java.lang">compareTo</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass()" title="class or interface in java.lang">getDeclaringClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#name()" title="class or interface in java.lang">name</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#ordinal()" title="class or interface in java.lang">ordinal</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class, java.lang.String)" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="DZI_CUBEMAP">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>DZI_CUBEMAP</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a> DZI_CUBEMAP</pre>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>[]&nbsp;values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (ImagePyramidParameters.Preset c : ImagePyramidParameters.Preset.values())
+&nbsp; System.out.println(c);
+</pre></div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>an array containing the constants of this enum type, in
+the order they are declared</dd></dl>
+</li>
+</ul>
+<a name="valueOf(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&nbsp;valueOf(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the enum constant with the specified name</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant
+with the specified name</dd>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd></dl>
+</li>
+</ul>
+<a name="toString()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="valueOfKey(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOfKey</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&nbsp;valueOfKey(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.Preset.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.Preset.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Transform.html b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Transform.html
new file mode 100644
index 00000000..d94d97eb
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.Transform.html
@@ -0,0 +1,375 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ImagePyramidParameters.Transform (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImagePyramidParameters.Transform (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/MakeImagePyramid.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.Transform.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.Transform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Enum ImagePyramidParameters.Transform" class="title">Enum ImagePyramidParameters.Transform</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.ImagePyramidParameters.Transform</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <span class="strong">ImagePyramidParameters.Transform</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&gt;</pre>
+<div class="block">The input image transform</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.Transform.html#CYLINDER_FACEMAP">CYLINDER_FACEMAP</a></strong></code>
+<div class="block">Create a cubic facemap from a cylindrical projection image map</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.Transform.html#FACE">FACE</a></strong></code>
+<div class="block">Output a single rectilinear image</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.Transform.html#FACEMAP">FACEMAP</a></strong></code>
+<div class="block">Create a cubic facemap from an equirectangular projection image map</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Transform.html#toString()">toString</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Transform.html#valueOf(java.lang.String)">valueOf</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Transform.html#valueOfKey(java.lang.String)">valueOfKey</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>[]</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Transform.html#values()">values</a></strong>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#compareTo(E)" title="class or interface in java.lang">compareTo</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass()" title="class or interface in java.lang">getDeclaringClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#name()" title="class or interface in java.lang">name</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#ordinal()" title="class or interface in java.lang">ordinal</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class, java.lang.String)" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum_constant_detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="FACEMAP">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FACEMAP</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a> FACEMAP</pre>
+<div class="block">Create a cubic facemap from an equirectangular projection image map</div>
+</li>
+</ul>
+<a name="CYLINDER_FACEMAP">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CYLINDER_FACEMAP</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a> CYLINDER_FACEMAP</pre>
+<div class="block">Create a cubic facemap from a cylindrical projection image map</div>
+</li>
+</ul>
+<a name="FACE">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FACE</h4>
+<pre>public static final&nbsp;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a> FACE</pre>
+<div class="block">Output a single rectilinear image</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>[]&nbsp;values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (ImagePyramidParameters.Transform c : ImagePyramidParameters.Transform.values())
+&nbsp; System.out.println(c);
+</pre></div>
+<dl><dt><span class="strong">Returns:</span></dt><dd>an array containing the constants of this enum type, in
+the order they are declared</dd></dl>
+</li>
+</ul>
+<a name="valueOf(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&nbsp;valueOf(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the enum constant with the specified name</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant
+with the specified name</dd>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd></dl>
+</li>
+</ul>
+<a name="toString()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="valueOfKey(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOfKey</h4>
+<pre>public static&nbsp;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&nbsp;valueOfKey(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/MakeImagePyramid.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.Transform.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.Transform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum_constant_summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum_constant_detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.html b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.html
new file mode 100644
index 00000000..1fc95549
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/ImagePyramidParameters.html
@@ -0,0 +1,2953 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ImagePyramidParameters (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ImagePyramidParameters (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImageInsert.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class ImagePyramidParameters" class="title">Class ImagePyramidParameters</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.html?is-external=true" title="class or interface in java.util">java.util.AbstractMap</a>&lt;K,V&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">java.util.TreeMap</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>bigshot.ImagePyramidParameters</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;, <a href="http://java.sun.com/javase/6/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;, <a href="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</dd>
+</dl>
+<hr>
+<br>
+<pre>public class <span class="strong">ImagePyramidParameters</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</pre>
+<div class="block">A typesafe interface to the parameters for MakeImagePyramid.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../serialized-form.html#bigshot.ImagePyramidParameters">Serialized Form</a></dd></dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></strong></code>
+<div class="block">The descriptor format for the output pyramid.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></strong></code>
+<div class="block">The folder structure of the output pyramid.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></strong></code>
+<div class="block">The output format for the image pyramid.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></strong></code>
+<div class="block">Image format for the tiles and everything.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></strong></code>
+<div class="block">If set to "invert", inverts the level numbering.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></strong></code>
+<div class="block">A preset set of parameters.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></strong></code>
+<div class="block">The input image transform</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="nested_classes_inherited_from_class_java.util.AbstractMap">
+<!-- -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.html?is-external=true" title="class or interface in java.util">AbstractMap</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.SimpleEntry.html?is-external=true" title="class or interface in java.util">AbstractMap.SimpleEntry</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.SimpleEntry.html?is-external=true" title="class or interface in java.util">K</a>,<a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.SimpleEntry.html?is-external=true" title="class or interface in java.util">V</a>&gt;, <a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.SimpleImmutableEntry.html?is-external=true" title="class or interface in java.util">AbstractMap.SimpleImmutableEntry</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.SimpleImmutableEntry.html?is-external=true" title="class or interface in java.util">K</a>,<a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.SimpleImmutableEntry.html?is-external=true" title="class or interface in java.util">V</a>&gt;</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#BOTTOM_CAP">BOTTOM_CAP</a></strong></code>
+<div class="block">Lookup key for the <code>bottom-cap</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#DESCRIPTOR_FORMAT">DESCRIPTOR_FORMAT</a></strong></code>
+<div class="block">Lookup key for the <code>descriptor-format</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#FACE_SIZE">FACE_SIZE</a></strong></code>
+<div class="block">Lookup key for the <code>face-size</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#FOLDER_LAYOUT">FOLDER_LAYOUT</a></strong></code>
+<div class="block">Lookup key for the <code>folder-layout</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#FORMAT">FORMAT</a></strong></code>
+<div class="block">Lookup key for the <code>format</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#FOV">FOV</a></strong></code>
+<div class="block">Lookup key for the <code>fov</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#IMAGE_FORMAT">IMAGE_FORMAT</a></strong></code>
+<div class="block">Lookup key for the <code>image-format</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#INPUT_HEIGHT">INPUT_HEIGHT</a></strong></code>
+<div class="block">Lookup key for the <code>input-height</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#INPUT_HFOV">INPUT_HFOV</a></strong></code>
+<div class="block">Lookup key for the <code>input-hfov</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#INPUT_HORIZON">INPUT_HORIZON</a></strong></code>
+<div class="block">Lookup key for the <code>input-horizon</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#INPUT_VFOV">INPUT_VFOV</a></strong></code>
+<div class="block">Lookup key for the <code>input-vfov</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#INPUT_WIDTH">INPUT_WIDTH</a></strong></code>
+<div class="block">Lookup key for the <code>input-width</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#JITTER">JITTER</a></strong></code>
+<div class="block">Lookup key for the <code>jitter</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#JPEG_QUALITY">JPEG_QUALITY</a></strong></code>
+<div class="block">Lookup key for the <code>jpeg-quality</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#LEVEL_NUMBERING">LEVEL_NUMBERING</a></strong></code>
+<div class="block">Lookup key for the <code>level-numbering</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#LEVELS">LEVELS</a></strong></code>
+<div class="block">Lookup key for the <code>levels</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#OUTPUT_HEIGHT">OUTPUT_HEIGHT</a></strong></code>
+<div class="block">Lookup key for the <code>output-height</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#OUTPUT_WIDTH">OUTPUT_WIDTH</a></strong></code>
+<div class="block">Lookup key for the <code>output-width</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#OVERLAP">OVERLAP</a></strong></code>
+<div class="block">Lookup key for the <code>overlap</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#OVERSAMPLING">OVERSAMPLING</a></strong></code>
+<div class="block">Lookup key for the <code>oversampling</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#PITCH">PITCH</a></strong></code>
+<div class="block">Lookup key for the <code>pitch</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#PITCH_OFFSET">PITCH_OFFSET</a></strong></code>
+<div class="block">Lookup key for the <code>pitch-offset</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#POSTER_SIZE">POSTER_SIZE</a></strong></code>
+<div class="block">Lookup key for the <code>poster-size</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#PRESET">PRESET</a></strong></code>
+<div class="block">Lookup key for the <code>preset</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#ROLL">ROLL</a></strong></code>
+<div class="block">Lookup key for the <code>roll</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#ROLL_OFFSET">ROLL_OFFSET</a></strong></code>
+<div class="block">Lookup key for the <code>roll-offset</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#TILE_SIZE">TILE_SIZE</a></strong></code>
+<div class="block">Lookup key for the <code>tile-size</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#TOP_CAP">TOP_CAP</a></strong></code>
+<div class="block">Lookup key for the <code>top-cap</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#TRANSFORM">TRANSFORM</a></strong></code>
+<div class="block">Lookup key for the <code>transform</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#TRANSFORM_PTO">TRANSFORM_PTO</a></strong></code>
+<div class="block">Lookup key for the <code>transform-pto</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#WRAP_X">WRAP_X</a></strong></code>
+<div class="block">Lookup key for the <code>wrap-x</code> parameter.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#YAW">YAW</a></strong></code>
+<div class="block">Lookup key for the <code>yaw</code> parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#YAW_OFFSET">YAW_OFFSET</a></strong></code>
+<div class="block">Lookup key for the <code>yaw-offset</code> parameter.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.html#ImagePyramidParameters()">ImagePyramidParameters</a></strong>()</code>
+<div class="block">Creates an empty parameter set.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../bigshot/ImagePyramidParameters.html#ImagePyramidParameters(java.util.Map)">ImagePyramidParameters</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;params)</code>
+<div class="block">Creates a parameter set by copying another set.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#bottomCap()">bottomCap</a></strong>()</code>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#bottomCap(boolean)">bottomCap</a></strong>(boolean&nbsp;bottomCap)</code>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#bottomCap(java.lang.Boolean)">bottomCap</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;bottomCap)</code>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#descriptorFormat()">descriptorFormat</a></strong>()</code>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#descriptorFormat(bigshot.ImagePyramidParameters.DescriptorFormat)">descriptorFormat</a></strong>(<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&nbsp;descriptorFormat)</code>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#faceSize()">faceSize</a></strong>()</code>
+<div class="block">The size of each cube map face.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#faceSize(int)">faceSize</a></strong>(int&nbsp;faceSize)</code>
+<div class="block">The size of each cube map face.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#faceSize(java.lang.Integer)">faceSize</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;faceSize)</code>
+<div class="block">The size of each cube map face.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#folderLayout()">folderLayout</a></strong>()</code>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#folderLayout(bigshot.ImagePyramidParameters.FolderLayout)">folderLayout</a></strong>(<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&nbsp;folderLayout)</code>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#format()">format</a></strong>()</code>
+<div class="block">A folder structure.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#format(bigshot.ImagePyramidParameters.Format)">format</a></strong>(<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&nbsp;format)</code>
+<div class="block">A folder structure.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#fov()">fov</a></strong>()</code>
+<div class="block">The output field of view when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#fov(float)">fov</a></strong>(float&nbsp;fov)</code>
+<div class="block">The output field of view when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#fov(java.lang.Float)">fov</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;fov)</code>
+<div class="block">The output field of view when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#imageFormat()">imageFormat</a></strong>()</code>
+<div class="block">Create PNG files.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#imageFormat(bigshot.ImagePyramidParameters.ImageFormat)">imageFormat</a></strong>(<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&nbsp;imageFormat)</code>
+<div class="block">Create PNG files.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputHeight()">inputHeight</a></strong>()</code>
+<div class="block">Height of the source image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputHeight(int)">inputHeight</a></strong>(int&nbsp;inputHeight)</code>
+<div class="block">Height of the source image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputHeight(java.lang.Integer)">inputHeight</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;inputHeight)</code>
+<div class="block">Height of the source image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputHfov()">inputHfov</a></strong>()</code>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputHfov(float)">inputHfov</a></strong>(float&nbsp;inputHfov)</code>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputHfov(java.lang.Float)">inputHfov</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;inputHfov)</code>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputHorizon()">inputHorizon</a></strong>()</code>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputHorizon(int)">inputHorizon</a></strong>(int&nbsp;inputHorizon)</code>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputHorizon(java.lang.Integer)">inputHorizon</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;inputHorizon)</code>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputVfov()">inputVfov</a></strong>()</code>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputVfov(float)">inputVfov</a></strong>(float&nbsp;inputVfov)</code>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputVfov(java.lang.Float)">inputVfov</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;inputVfov)</code>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputWidth()">inputWidth</a></strong>()</code>
+<div class="block">Width of the source image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputWidth(int)">inputWidth</a></strong>(int&nbsp;inputWidth)</code>
+<div class="block">Width of the source image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#inputWidth(java.lang.Integer)">inputWidth</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;inputWidth)</code>
+<div class="block">Width of the source image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#jitter()">jitter</a></strong>()</code>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#jitter(float)">jitter</a></strong>(float&nbsp;jitter)</code>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#jitter(java.lang.Float)">jitter</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;jitter)</code>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#jpegQuality()">jpegQuality</a></strong>()</code>
+<div class="block">Jpeg output quality, between 0.0 and 1.0.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#jpegQuality(float)">jpegQuality</a></strong>(float&nbsp;jpegQuality)</code>
+<div class="block">Jpeg output quality, between 0.0 and 1.0.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#jpegQuality(java.lang.Float)">jpegQuality</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;jpegQuality)</code>
+<div class="block">Jpeg output quality, between 0.0 and 1.0.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#levelNumbering()">levelNumbering</a></strong>()</code>
+<div class="block">Inverts the level numbering.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#levelNumbering(bigshot.ImagePyramidParameters.LevelNumbering)">levelNumbering</a></strong>(<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&nbsp;levelNumbering)</code>
+<div class="block">Inverts the level numbering.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#levels()">levels</a></strong>()</code>
+<div class="block">Number of levels in the image pyramid.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#levels(int)">levels</a></strong>(int&nbsp;levels)</code>
+<div class="block">Number of levels in the image pyramid.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#levels(java.lang.Integer)">levels</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;levels)</code>
+<div class="block">Number of levels in the image pyramid.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optBottomCap(boolean)">optBottomCap</a></strong>(boolean&nbsp;defaultValue)</code>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optDescriptorFormat(bigshot.ImagePyramidParameters.DescriptorFormat)">optDescriptorFormat</a></strong>(<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&nbsp;defaultValue)</code>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optFaceSize(int)">optFaceSize</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">The size of each cube map face.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optFolderLayout(bigshot.ImagePyramidParameters.FolderLayout)">optFolderLayout</a></strong>(<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&nbsp;defaultValue)</code>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optFormat(bigshot.ImagePyramidParameters.Format)">optFormat</a></strong>(<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&nbsp;defaultValue)</code>
+<div class="block">A folder structure.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optFov(float)">optFov</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">The output field of view when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optImageFormat(bigshot.ImagePyramidParameters.ImageFormat)">optImageFormat</a></strong>(<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&nbsp;defaultValue)</code>
+<div class="block">Create PNG files.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optInputHeight(int)">optInputHeight</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">Height of the source image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optInputHfov(float)">optInputHfov</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optInputHorizon(int)">optInputHorizon</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optInputVfov(float)">optInputVfov</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optInputWidth(int)">optInputWidth</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">Width of the source image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optJitter(float)">optJitter</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optJpegQuality(float)">optJpegQuality</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">Jpeg output quality, between 0.0 and 1.0.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optLevelNumbering(bigshot.ImagePyramidParameters.LevelNumbering)">optLevelNumbering</a></strong>(<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&nbsp;defaultValue)</code>
+<div class="block">Inverts the level numbering.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optLevels(int)">optLevels</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">Number of levels in the image pyramid.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optOutputHeight(int)">optOutputHeight</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">The output image width when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optOutputWidth(int)">optOutputWidth</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">The output image width when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optOverlap(int)">optOverlap</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">Number of pixels overlap between tiles.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optOversampling(int)">optOversampling</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optPitch(float)">optPitch</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optPitchOffset(float)">optPitchOffset</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optPosterSize(int)">optPosterSize</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optPreset(bigshot.ImagePyramidParameters.Preset)">optPreset</a></strong>(<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&nbsp;defaultValue)</code>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optRoll(float)">optRoll</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optRollOffset(float)">optRollOffset</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optTileSize(int)">optTileSize</a></strong>(int&nbsp;defaultValue)</code>
+<div class="block">Size in pixels of an image tile.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optTopCap(boolean)">optTopCap</a></strong>(boolean&nbsp;defaultValue)</code>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optTransform(bigshot.ImagePyramidParameters.Transform)">optTransform</a></strong>(<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&nbsp;defaultValue)</code>
+<div class="block">Output a single rectilinear image</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optTransformPto(java.lang.String)">optTransformPto</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;defaultValue)</code>
+<div class="block">For the "*-facemap" transforms, sets the input-vfov, input-hfov and input-horizon parameters from a Hugin .pto file.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optWrapX(boolean)">optWrapX</a></strong>(boolean&nbsp;defaultValue)</code>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optYaw(float)">optYaw</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#optYawOffset(float)">optYawOffset</a></strong>(float&nbsp;defaultValue)</code>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#outputHeight()">outputHeight</a></strong>()</code>
+<div class="block">The output image width when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#outputHeight(int)">outputHeight</a></strong>(int&nbsp;outputHeight)</code>
+<div class="block">The output image width when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#outputHeight(java.lang.Integer)">outputHeight</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;outputHeight)</code>
+<div class="block">The output image width when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#outputWidth()">outputWidth</a></strong>()</code>
+<div class="block">The output image width when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#outputWidth(int)">outputWidth</a></strong>(int&nbsp;outputWidth)</code>
+<div class="block">The output image width when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#outputWidth(java.lang.Integer)">outputWidth</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;outputWidth)</code>
+<div class="block">The output image width when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#overlap()">overlap</a></strong>()</code>
+<div class="block">Number of pixels overlap between tiles.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#overlap(int)">overlap</a></strong>(int&nbsp;overlap)</code>
+<div class="block">Number of pixels overlap between tiles.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#overlap(java.lang.Integer)">overlap</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;overlap)</code>
+<div class="block">Number of pixels overlap between tiles.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#oversampling()">oversampling</a></strong>()</code>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#oversampling(int)">oversampling</a></strong>(int&nbsp;oversampling)</code>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#oversampling(java.lang.Integer)">oversampling</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;oversampling)</code>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#pitch()">pitch</a></strong>()</code>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#pitch(float)">pitch</a></strong>(float&nbsp;pitch)</code>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#pitch(java.lang.Float)">pitch</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;pitch)</code>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#pitchOffset()">pitchOffset</a></strong>()</code>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#pitchOffset(float)">pitchOffset</a></strong>(float&nbsp;pitchOffset)</code>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#pitchOffset(java.lang.Float)">pitchOffset</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;pitchOffset)</code>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#posterSize()">posterSize</a></strong>()</code>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#posterSize(int)">posterSize</a></strong>(int&nbsp;posterSize)</code>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#posterSize(java.lang.Integer)">posterSize</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;posterSize)</code>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#preset()">preset</a></strong>()</code>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#preset(bigshot.ImagePyramidParameters.Preset)">preset</a></strong>(<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&nbsp;preset)</code>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#putIfEmpty(java.lang.String, java.lang.String)">putIfEmpty</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
+ <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
+<div class="block">Sets the given parameter if it is not set.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#roll()">roll</a></strong>()</code>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#roll(float)">roll</a></strong>(float&nbsp;roll)</code>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#roll(java.lang.Float)">roll</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;roll)</code>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#rollOffset()">rollOffset</a></strong>()</code>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#rollOffset(float)">rollOffset</a></strong>(float&nbsp;rollOffset)</code>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#rollOffset(java.lang.Float)">rollOffset</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;rollOffset)</code>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#tileSize()">tileSize</a></strong>()</code>
+<div class="block">Size in pixels of an image tile.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#tileSize(int)">tileSize</a></strong>(int&nbsp;tileSize)</code>
+<div class="block">Size in pixels of an image tile.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#tileSize(java.lang.Integer)">tileSize</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;tileSize)</code>
+<div class="block">Size in pixels of an image tile.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#topCap()">topCap</a></strong>()</code>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#topCap(boolean)">topCap</a></strong>(boolean&nbsp;topCap)</code>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#topCap(java.lang.Boolean)">topCap</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;topCap)</code>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#transform()">transform</a></strong>()</code>
+<div class="block">Output a single rectilinear image</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#transform(bigshot.ImagePyramidParameters.Transform)">transform</a></strong>(<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&nbsp;transform)</code>
+<div class="block">Output a single rectilinear image</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#transformPto()">transformPto</a></strong>()</code>
+<div class="block">For the "*-facemap" transforms, sets the input-vfov, input-hfov and input-horizon parameters from a Hugin .pto file.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#transformPto(java.lang.String)">transformPto</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;transformPto)</code>
+<div class="block">For the "*-facemap" transforms, sets the input-vfov, input-hfov and input-horizon parameters from a Hugin .pto file.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#wrapX()">wrapX</a></strong>()</code>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#wrapX(boolean)">wrapX</a></strong>(boolean&nbsp;wrapX)</code>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#wrapX(java.lang.Boolean)">wrapX</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;wrapX)</code>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#yaw()">yaw</a></strong>()</code>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#yaw(float)">yaw</a></strong>(float&nbsp;yaw)</code>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#yaw(java.lang.Float)">yaw</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;yaw)</code>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#yawOffset()">yawOffset</a></strong>()</code>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#yawOffset(float)">yawOffset</a></strong>(float&nbsp;yawOffset)</code>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/ImagePyramidParameters.html#yawOffset(java.lang.Float)">yawOffset</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;yawOffset)</code>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.util.TreeMap">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#ceilingEntry(K)" title="class or interface in java.util">ceilingEntry</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#ceilingKey(K)" title="class or interface in java.util">ceilingKey</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#clear()" title="class or interface in java.util">clear</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#clone()" title="class or interface in java.util">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#comparator()" title="class or interface in java.util">comparator</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#descendingKeySet()" title="class or interface in java.util">descendingKeySet</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#descendingMap()" title="class or interface in java.util">descendingMap</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#firstEntry()" title="class or interface in java.util">firstEntry</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#firstKey()" title="class or interface in java.util">firstKey</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#floorEntry(K)" title="class or interface in java.util">floorEntry</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#floorKey(K)" title="class or interface in java.util">floorKey</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#headMap(K)" title="class or interface in java.util">headMap</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#headMap(K, boolean)" title="class or interface in java.util">headMap</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#higherEntry(K)" title="class or interface in java.util">higherEntry</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#higherKey(K)" title="class or interface in java.util">higherKey</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#keySet()" title="class or interface in java.util">keySet</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#lastEntry()" title="class or interface in java.util">lastEntry</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#lastKey()" title="class or interface in java.util">lastKey</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#lowerEntry(K)" title="class or interface in java.util">lowerEntry</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#lowerKey(K)" title="class or interface in java.util">lowerKey</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#navigableKeySet()" title="class or interface in java.util">navigableKeySet</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#pollFirstEntry()" title="class or interface in java.util">pollFirstEntry</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#pollLastEntry()" title="class or interface in java.util">pollLastEntry</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#put(K, V)" title="class or interface in java.util">put</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#size()" title="class or interface in java.util">size</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#subMap(K, boolean, K, boolean)" title="class or interface in java.util">subMap</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#subMap(K, K)" title="class or interface in java.util">subMap</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#tailMap(K)" title="class or interface in java.util">tailMap</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#tailMap(K, boolean)" title="class or interface in java.util">tailMap</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#values()" title="class or interface in java.util">values</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.util.AbstractMap">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.html?is-external=true" title="class or interface in java.util">AbstractMap</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.html?is-external=true#toString()" title="class or interface in java.util">toString</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.util.Map">
+<!-- -->
+</a>
+<h3>Methods inherited from interface&nbsp;java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="PRESET">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PRESET</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> PRESET</pre>
+<div class="block">Lookup key for the <code>preset</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.PRESET">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="FORMAT">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FORMAT</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> FORMAT</pre>
+<div class="block">Lookup key for the <code>format</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.FORMAT">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="TRANSFORM">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TRANSFORM</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> TRANSFORM</pre>
+<div class="block">Lookup key for the <code>transform</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.TRANSFORM">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="INPUT_WIDTH">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>INPUT_WIDTH</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> INPUT_WIDTH</pre>
+<div class="block">Lookup key for the <code>input-width</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.INPUT_WIDTH">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="INPUT_HEIGHT">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>INPUT_HEIGHT</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> INPUT_HEIGHT</pre>
+<div class="block">Lookup key for the <code>input-height</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.INPUT_HEIGHT">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="POSTER_SIZE">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>POSTER_SIZE</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> POSTER_SIZE</pre>
+<div class="block">Lookup key for the <code>poster-size</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.POSTER_SIZE">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="TILE_SIZE">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TILE_SIZE</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> TILE_SIZE</pre>
+<div class="block">Lookup key for the <code>tile-size</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.TILE_SIZE">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="LEVELS">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LEVELS</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> LEVELS</pre>
+<div class="block">Lookup key for the <code>levels</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.LEVELS">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="WRAP_X">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>WRAP_X</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> WRAP_X</pre>
+<div class="block">Lookup key for the <code>wrap-x</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.WRAP_X">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="OVERLAP">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>OVERLAP</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> OVERLAP</pre>
+<div class="block">Lookup key for the <code>overlap</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.OVERLAP">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="IMAGE_FORMAT">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>IMAGE_FORMAT</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> IMAGE_FORMAT</pre>
+<div class="block">Lookup key for the <code>image-format</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.IMAGE_FORMAT">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="JPEG_QUALITY">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>JPEG_QUALITY</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> JPEG_QUALITY</pre>
+<div class="block">Lookup key for the <code>jpeg-quality</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.JPEG_QUALITY">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="FACE_SIZE">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FACE_SIZE</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> FACE_SIZE</pre>
+<div class="block">Lookup key for the <code>face-size</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.FACE_SIZE">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="FOLDER_LAYOUT">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FOLDER_LAYOUT</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> FOLDER_LAYOUT</pre>
+<div class="block">Lookup key for the <code>folder-layout</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.FOLDER_LAYOUT">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="DESCRIPTOR_FORMAT">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DESCRIPTOR_FORMAT</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> DESCRIPTOR_FORMAT</pre>
+<div class="block">Lookup key for the <code>descriptor-format</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.DESCRIPTOR_FORMAT">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="LEVEL_NUMBERING">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LEVEL_NUMBERING</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> LEVEL_NUMBERING</pre>
+<div class="block">Lookup key for the <code>level-numbering</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.LEVEL_NUMBERING">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="YAW">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>YAW</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> YAW</pre>
+<div class="block">Lookup key for the <code>yaw</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.YAW">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="PITCH">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PITCH</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> PITCH</pre>
+<div class="block">Lookup key for the <code>pitch</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.PITCH">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="ROLL">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ROLL</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> ROLL</pre>
+<div class="block">Lookup key for the <code>roll</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.ROLL">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="YAW_OFFSET">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>YAW_OFFSET</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> YAW_OFFSET</pre>
+<div class="block">Lookup key for the <code>yaw-offset</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.YAW_OFFSET">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="PITCH_OFFSET">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PITCH_OFFSET</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> PITCH_OFFSET</pre>
+<div class="block">Lookup key for the <code>pitch-offset</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.PITCH_OFFSET">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="ROLL_OFFSET">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ROLL_OFFSET</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> ROLL_OFFSET</pre>
+<div class="block">Lookup key for the <code>roll-offset</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.ROLL_OFFSET">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="INPUT_HORIZON">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>INPUT_HORIZON</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> INPUT_HORIZON</pre>
+<div class="block">Lookup key for the <code>input-horizon</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.INPUT_HORIZON">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="INPUT_VFOV">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>INPUT_VFOV</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> INPUT_VFOV</pre>
+<div class="block">Lookup key for the <code>input-vfov</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.INPUT_VFOV">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="INPUT_HFOV">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>INPUT_HFOV</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> INPUT_HFOV</pre>
+<div class="block">Lookup key for the <code>input-hfov</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.INPUT_HFOV">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="TRANSFORM_PTO">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TRANSFORM_PTO</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> TRANSFORM_PTO</pre>
+<div class="block">Lookup key for the <code>transform-pto</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.TRANSFORM_PTO">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="OVERSAMPLING">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>OVERSAMPLING</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> OVERSAMPLING</pre>
+<div class="block">Lookup key for the <code>oversampling</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.OVERSAMPLING">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="JITTER">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>JITTER</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> JITTER</pre>
+<div class="block">Lookup key for the <code>jitter</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.JITTER">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="FOV">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FOV</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> FOV</pre>
+<div class="block">Lookup key for the <code>fov</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.FOV">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="OUTPUT_WIDTH">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>OUTPUT_WIDTH</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> OUTPUT_WIDTH</pre>
+<div class="block">Lookup key for the <code>output-width</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.OUTPUT_WIDTH">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="OUTPUT_HEIGHT">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>OUTPUT_HEIGHT</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> OUTPUT_HEIGHT</pre>
+<div class="block">Lookup key for the <code>output-height</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.OUTPUT_HEIGHT">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="TOP_CAP">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TOP_CAP</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> TOP_CAP</pre>
+<div class="block">Lookup key for the <code>top-cap</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.TOP_CAP">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="BOTTOM_CAP">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>BOTTOM_CAP</h4>
+<pre>public static final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> BOTTOM_CAP</pre>
+<div class="block">Lookup key for the <code>bottom-cap</code> parameter.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../constant-values.html#bigshot.ImagePyramidParameters.BOTTOM_CAP">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="ImagePyramidParameters()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ImagePyramidParameters</h4>
+<pre>public&nbsp;ImagePyramidParameters()</pre>
+<div class="block">Creates an empty parameter set.</div>
+</li>
+</ul>
+<a name="ImagePyramidParameters(java.util.Map)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ImagePyramidParameters</h4>
+<pre>public&nbsp;ImagePyramidParameters(<a href="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;params)</pre>
+<div class="block">Creates a parameter set by copying another set.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="putIfEmpty(java.lang.String, java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>putIfEmpty</h4>
+<pre>public&nbsp;void&nbsp;putIfEmpty(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
+ <a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<div class="block">Sets the given parameter if it is not set.</div>
+</li>
+</ul>
+<a name="preset(bigshot.ImagePyramidParameters.Preset)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>preset</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;preset(<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&nbsp;preset)</pre>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</li>
+</ul>
+<a name="optPreset(bigshot.ImagePyramidParameters.Preset)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optPreset</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&nbsp;optPreset(<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&nbsp;defaultValue)</pre>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>defaultValue</code> - the value to return if the parameter is not defined.</dd></dl>
+</li>
+</ul>
+<a name="preset()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>preset</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a>&nbsp;preset()</pre>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</li>
+</ul>
+<a name="format(bigshot.ImagePyramidParameters.Format)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>format</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;format(<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&nbsp;format)</pre>
+<div class="block">A folder structure.</div>
+</li>
+</ul>
+<a name="optFormat(bigshot.ImagePyramidParameters.Format)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optFormat</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&nbsp;optFormat(<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&nbsp;defaultValue)</pre>
+<div class="block">A folder structure.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>defaultValue</code> - the value to return if the parameter is not defined.</dd></dl>
+</li>
+</ul>
+<a name="format()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>format</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a>&nbsp;format()</pre>
+<div class="block">A folder structure.</div>
+</li>
+</ul>
+<a name="transform(bigshot.ImagePyramidParameters.Transform)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transform</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;transform(<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&nbsp;transform)</pre>
+<div class="block">Output a single rectilinear image</div>
+</li>
+</ul>
+<a name="optTransform(bigshot.ImagePyramidParameters.Transform)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optTransform</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&nbsp;optTransform(<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&nbsp;defaultValue)</pre>
+<div class="block">Output a single rectilinear image</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>defaultValue</code> - the value to return if the parameter is not defined.</dd></dl>
+</li>
+</ul>
+<a name="transform()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transform</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a>&nbsp;transform()</pre>
+<div class="block">Output a single rectilinear image</div>
+</li>
+</ul>
+<a name="inputWidth(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputWidth</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputWidth(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;inputWidth)</pre>
+<div class="block">Width of the source image. Set internally by the application.</div>
+</li>
+</ul>
+<a name="inputWidth(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputWidth</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputWidth(int&nbsp;inputWidth)</pre>
+<div class="block">Width of the source image. Set internally by the application.</div>
+</li>
+</ul>
+<a name="optInputWidth(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optInputWidth</h4>
+<pre>public&nbsp;int&nbsp;optInputWidth(int&nbsp;defaultValue)</pre>
+<div class="block">Width of the source image. Set internally by the application.</div>
+</li>
+</ul>
+<a name="inputWidth()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputWidth</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;inputWidth()</pre>
+<div class="block">Width of the source image. Set internally by the application.</div>
+</li>
+</ul>
+<a name="inputHeight(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHeight</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputHeight(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;inputHeight)</pre>
+<div class="block">Height of the source image. Set internally by the application.</div>
+</li>
+</ul>
+<a name="inputHeight(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHeight</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputHeight(int&nbsp;inputHeight)</pre>
+<div class="block">Height of the source image. Set internally by the application.</div>
+</li>
+</ul>
+<a name="optInputHeight(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optInputHeight</h4>
+<pre>public&nbsp;int&nbsp;optInputHeight(int&nbsp;defaultValue)</pre>
+<div class="block">Height of the source image. Set internally by the application.</div>
+</li>
+</ul>
+<a name="inputHeight()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHeight</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;inputHeight()</pre>
+<div class="block">Height of the source image. Set internally by the application.</div>
+</li>
+</ul>
+<a name="posterSize(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>posterSize</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;posterSize(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;posterSize)</pre>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</li>
+</ul>
+<a name="posterSize(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>posterSize</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;posterSize(int&nbsp;posterSize)</pre>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</li>
+</ul>
+<a name="optPosterSize(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optPosterSize</h4>
+<pre>public&nbsp;int&nbsp;optPosterSize(int&nbsp;defaultValue)</pre>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</li>
+</ul>
+<a name="posterSize()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>posterSize</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;posterSize()</pre>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</li>
+</ul>
+<a name="tileSize(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tileSize</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;tileSize(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;tileSize)</pre>
+<div class="block">Size in pixels of an image tile.</div>
+</li>
+</ul>
+<a name="tileSize(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tileSize</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;tileSize(int&nbsp;tileSize)</pre>
+<div class="block">Size in pixels of an image tile.</div>
+</li>
+</ul>
+<a name="optTileSize(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optTileSize</h4>
+<pre>public&nbsp;int&nbsp;optTileSize(int&nbsp;defaultValue)</pre>
+<div class="block">Size in pixels of an image tile.</div>
+</li>
+</ul>
+<a name="tileSize()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tileSize</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;tileSize()</pre>
+<div class="block">Size in pixels of an image tile.</div>
+</li>
+</ul>
+<a name="levels(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>levels</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;levels(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;levels)</pre>
+<div class="block">Number of levels in the image pyramid. Cannot be used with wrapX. Default: Enough to shrink the image to half a tile along the longest dimension.</div>
+</li>
+</ul>
+<a name="levels(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>levels</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;levels(int&nbsp;levels)</pre>
+<div class="block">Number of levels in the image pyramid. Cannot be used with wrapX. Default: Enough to shrink the image to half a tile along the longest dimension.</div>
+</li>
+</ul>
+<a name="optLevels(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optLevels</h4>
+<pre>public&nbsp;int&nbsp;optLevels(int&nbsp;defaultValue)</pre>
+<div class="block">Number of levels in the image pyramid. Cannot be used with wrapX. Default: Enough to shrink the image to half a tile along the longest dimension.</div>
+</li>
+</ul>
+<a name="levels()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>levels</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;levels()</pre>
+<div class="block">Number of levels in the image pyramid. Cannot be used with wrapX. Default: Enough to shrink the image to half a tile along the longest dimension.</div>
+</li>
+</ul>
+<a name="wrapX(java.lang.Boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>wrapX</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;wrapX(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;wrapX)</pre>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries. Cannot be used with levels.</div>
+</li>
+</ul>
+<a name="wrapX(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>wrapX</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;wrapX(boolean&nbsp;wrapX)</pre>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries. Cannot be used with levels.</div>
+</li>
+</ul>
+<a name="optWrapX(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optWrapX</h4>
+<pre>public&nbsp;boolean&nbsp;optWrapX(boolean&nbsp;defaultValue)</pre>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries. Cannot be used with levels.</div>
+</li>
+</ul>
+<a name="wrapX()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>wrapX</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;wrapX()</pre>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries. Cannot be used with levels.</div>
+</li>
+</ul>
+<a name="overlap(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>overlap</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;overlap(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;overlap)</pre>
+<div class="block">Number of pixels overlap between tiles. Default: 0</div>
+</li>
+</ul>
+<a name="overlap(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>overlap</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;overlap(int&nbsp;overlap)</pre>
+<div class="block">Number of pixels overlap between tiles. Default: 0</div>
+</li>
+</ul>
+<a name="optOverlap(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optOverlap</h4>
+<pre>public&nbsp;int&nbsp;optOverlap(int&nbsp;defaultValue)</pre>
+<div class="block">Number of pixels overlap between tiles. Default: 0</div>
+</li>
+</ul>
+<a name="overlap()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>overlap</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;overlap()</pre>
+<div class="block">Number of pixels overlap between tiles. Default: 0</div>
+</li>
+</ul>
+<a name="imageFormat(bigshot.ImagePyramidParameters.ImageFormat)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>imageFormat</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;imageFormat(<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&nbsp;imageFormat)</pre>
+<div class="block">Create PNG files.</div>
+</li>
+</ul>
+<a name="optImageFormat(bigshot.ImagePyramidParameters.ImageFormat)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optImageFormat</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&nbsp;optImageFormat(<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&nbsp;defaultValue)</pre>
+<div class="block">Create PNG files.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>defaultValue</code> - the value to return if the parameter is not defined.</dd></dl>
+</li>
+</ul>
+<a name="imageFormat()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>imageFormat</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a>&nbsp;imageFormat()</pre>
+<div class="block">Create PNG files.</div>
+</li>
+</ul>
+<a name="jpegQuality(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>jpegQuality</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;jpegQuality(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;jpegQuality)</pre>
+<div class="block">Jpeg output quality, between 0.0 and 1.0. Only has effect if imageFormat is JPG. Default: 0.7</div>
+</li>
+</ul>
+<a name="jpegQuality(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>jpegQuality</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;jpegQuality(float&nbsp;jpegQuality)</pre>
+<div class="block">Jpeg output quality, between 0.0 and 1.0. Only has effect if imageFormat is JPG. Default: 0.7</div>
+</li>
+</ul>
+<a name="optJpegQuality(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optJpegQuality</h4>
+<pre>public&nbsp;float&nbsp;optJpegQuality(float&nbsp;defaultValue)</pre>
+<div class="block">Jpeg output quality, between 0.0 and 1.0. Only has effect if imageFormat is JPG. Default: 0.7</div>
+</li>
+</ul>
+<a name="jpegQuality()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>jpegQuality</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;jpegQuality()</pre>
+<div class="block">Jpeg output quality, between 0.0 and 1.0. Only has effect if imageFormat is JPG. Default: 0.7</div>
+</li>
+</ul>
+<a name="faceSize(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>faceSize</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;faceSize(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;faceSize)</pre>
+<div class="block">The size of each cube map face. Only applicable when using Transform.FACEMAP or Transform.CYLINDER_FACEMAP</div>
+</li>
+</ul>
+<a name="faceSize(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>faceSize</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;faceSize(int&nbsp;faceSize)</pre>
+<div class="block">The size of each cube map face. Only applicable when using Transform.FACEMAP or Transform.CYLINDER_FACEMAP</div>
+</li>
+</ul>
+<a name="optFaceSize(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optFaceSize</h4>
+<pre>public&nbsp;int&nbsp;optFaceSize(int&nbsp;defaultValue)</pre>
+<div class="block">The size of each cube map face. Only applicable when using Transform.FACEMAP or Transform.CYLINDER_FACEMAP</div>
+</li>
+</ul>
+<a name="faceSize()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>faceSize</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;faceSize()</pre>
+<div class="block">The size of each cube map face. Only applicable when using Transform.FACEMAP or Transform.CYLINDER_FACEMAP</div>
+</li>
+</ul>
+<a name="folderLayout(bigshot.ImagePyramidParameters.FolderLayout)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>folderLayout</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;folderLayout(<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&nbsp;folderLayout)</pre>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</li>
+</ul>
+<a name="optFolderLayout(bigshot.ImagePyramidParameters.FolderLayout)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optFolderLayout</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&nbsp;optFolderLayout(<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&nbsp;defaultValue)</pre>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>defaultValue</code> - the value to return if the parameter is not defined.</dd></dl>
+</li>
+</ul>
+<a name="folderLayout()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>folderLayout</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a>&nbsp;folderLayout()</pre>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</li>
+</ul>
+<a name="descriptorFormat(bigshot.ImagePyramidParameters.DescriptorFormat)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>descriptorFormat</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;descriptorFormat(<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&nbsp;descriptorFormat)</pre>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</li>
+</ul>
+<a name="optDescriptorFormat(bigshot.ImagePyramidParameters.DescriptorFormat)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optDescriptorFormat</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&nbsp;optDescriptorFormat(<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&nbsp;defaultValue)</pre>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>defaultValue</code> - the value to return if the parameter is not defined.</dd></dl>
+</li>
+</ul>
+<a name="descriptorFormat()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>descriptorFormat</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a>&nbsp;descriptorFormat()</pre>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</li>
+</ul>
+<a name="levelNumbering(bigshot.ImagePyramidParameters.LevelNumbering)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>levelNumbering</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;levelNumbering(<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&nbsp;levelNumbering)</pre>
+<div class="block">Inverts the level numbering.</div>
+</li>
+</ul>
+<a name="optLevelNumbering(bigshot.ImagePyramidParameters.LevelNumbering)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optLevelNumbering</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&nbsp;optLevelNumbering(<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&nbsp;defaultValue)</pre>
+<div class="block">Inverts the level numbering.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>defaultValue</code> - the value to return if the parameter is not defined.</dd></dl>
+</li>
+</ul>
+<a name="levelNumbering()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>levelNumbering</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a>&nbsp;levelNumbering()</pre>
+<div class="block">Inverts the level numbering.</div>
+</li>
+</ul>
+<a name="yaw(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yaw</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;yaw(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;yaw)</pre>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="yaw(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yaw</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;yaw(float&nbsp;yaw)</pre>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="optYaw(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optYaw</h4>
+<pre>public&nbsp;float&nbsp;optYaw(float&nbsp;defaultValue)</pre>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="yaw()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yaw</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;yaw()</pre>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="pitch(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pitch</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;pitch(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;pitch)</pre>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="pitch(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pitch</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;pitch(float&nbsp;pitch)</pre>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="optPitch(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optPitch</h4>
+<pre>public&nbsp;float&nbsp;optPitch(float&nbsp;defaultValue)</pre>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="pitch()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pitch</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;pitch()</pre>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="roll(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>roll</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;roll(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;roll)</pre>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="roll(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>roll</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;roll(float&nbsp;roll)</pre>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="optRoll(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optRoll</h4>
+<pre>public&nbsp;float&nbsp;optRoll(float&nbsp;defaultValue)</pre>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="roll()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>roll</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;roll()</pre>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</li>
+</ul>
+<a name="yawOffset(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yawOffset</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;yawOffset(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;yawOffset)</pre>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="yawOffset(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yawOffset</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;yawOffset(float&nbsp;yawOffset)</pre>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="optYawOffset(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optYawOffset</h4>
+<pre>public&nbsp;float&nbsp;optYawOffset(float&nbsp;defaultValue)</pre>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="yawOffset()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yawOffset</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;yawOffset()</pre>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="pitchOffset(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pitchOffset</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;pitchOffset(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;pitchOffset)</pre>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="pitchOffset(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pitchOffset</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;pitchOffset(float&nbsp;pitchOffset)</pre>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="optPitchOffset(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optPitchOffset</h4>
+<pre>public&nbsp;float&nbsp;optPitchOffset(float&nbsp;defaultValue)</pre>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="pitchOffset()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pitchOffset</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;pitchOffset()</pre>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="rollOffset(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rollOffset</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;rollOffset(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;rollOffset)</pre>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="rollOffset(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rollOffset</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;rollOffset(float&nbsp;rollOffset)</pre>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="optRollOffset(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optRollOffset</h4>
+<pre>public&nbsp;float&nbsp;optRollOffset(float&nbsp;defaultValue)</pre>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="rollOffset()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rollOffset</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;rollOffset()</pre>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</li>
+</ul>
+<a name="inputHorizon(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHorizon</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputHorizon(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;inputHorizon)</pre>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</li>
+</ul>
+<a name="inputHorizon(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHorizon</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputHorizon(int&nbsp;inputHorizon)</pre>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</li>
+</ul>
+<a name="optInputHorizon(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optInputHorizon</h4>
+<pre>public&nbsp;int&nbsp;optInputHorizon(int&nbsp;defaultValue)</pre>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</li>
+</ul>
+<a name="inputHorizon()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHorizon</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;inputHorizon()</pre>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</li>
+</ul>
+<a name="inputVfov(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputVfov</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputVfov(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;inputVfov)</pre>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</li>
+</ul>
+<a name="inputVfov(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputVfov</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputVfov(float&nbsp;inputVfov)</pre>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</li>
+</ul>
+<a name="optInputVfov(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optInputVfov</h4>
+<pre>public&nbsp;float&nbsp;optInputVfov(float&nbsp;defaultValue)</pre>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</li>
+</ul>
+<a name="inputVfov()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputVfov</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;inputVfov()</pre>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</li>
+</ul>
+<a name="inputHfov(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHfov</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputHfov(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;inputHfov)</pre>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</li>
+</ul>
+<a name="inputHfov(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHfov</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;inputHfov(float&nbsp;inputHfov)</pre>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</li>
+</ul>
+<a name="optInputHfov(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optInputHfov</h4>
+<pre>public&nbsp;float&nbsp;optInputHfov(float&nbsp;defaultValue)</pre>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</li>
+</ul>
+<a name="inputHfov()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inputHfov</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;inputHfov()</pre>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</li>
+</ul>
+<a name="transformPto(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transformPto</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;transformPto(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;transformPto)</pre>
+<div class="block">For the "*-facemap" transforms, sets the input-vfov, input-hfov and input-horizon parameters from a Hugin .pto file. Note: You must still specify the transform (cylindrical or equirectangular).</div>
+</li>
+</ul>
+<a name="optTransformPto(java.lang.String)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optTransformPto</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;optTransformPto(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;defaultValue)</pre>
+<div class="block">For the "*-facemap" transforms, sets the input-vfov, input-hfov and input-horizon parameters from a Hugin .pto file. Note: You must still specify the transform (cylindrical or equirectangular).</div>
+</li>
+</ul>
+<a name="transformPto()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>transformPto</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;transformPto()</pre>
+<div class="block">For the "*-facemap" transforms, sets the input-vfov, input-hfov and input-horizon parameters from a Hugin .pto file. Note: You must still specify the transform (cylindrical or equirectangular).</div>
+</li>
+</ul>
+<a name="oversampling(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>oversampling</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;oversampling(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;oversampling)</pre>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</li>
+</ul>
+<a name="oversampling(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>oversampling</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;oversampling(int&nbsp;oversampling)</pre>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</li>
+</ul>
+<a name="optOversampling(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optOversampling</h4>
+<pre>public&nbsp;int&nbsp;optOversampling(int&nbsp;defaultValue)</pre>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</li>
+</ul>
+<a name="oversampling()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>oversampling</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;oversampling()</pre>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</li>
+</ul>
+<a name="jitter(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>jitter</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;jitter(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;jitter)</pre>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</li>
+</ul>
+<a name="jitter(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>jitter</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;jitter(float&nbsp;jitter)</pre>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</li>
+</ul>
+<a name="optJitter(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optJitter</h4>
+<pre>public&nbsp;float&nbsp;optJitter(float&nbsp;defaultValue)</pre>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</li>
+</ul>
+<a name="jitter()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>jitter</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;jitter()</pre>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</li>
+</ul>
+<a name="fov(java.lang.Float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fov</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;fov(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;fov)</pre>
+<div class="block">The output field of view when using the "face" transform.</div>
+</li>
+</ul>
+<a name="fov(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fov</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;fov(float&nbsp;fov)</pre>
+<div class="block">The output field of view when using the "face" transform.</div>
+</li>
+</ul>
+<a name="optFov(float)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optFov</h4>
+<pre>public&nbsp;float&nbsp;optFov(float&nbsp;defaultValue)</pre>
+<div class="block">The output field of view when using the "face" transform.</div>
+</li>
+</ul>
+<a name="fov()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fov</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</a>&nbsp;fov()</pre>
+<div class="block">The output field of view when using the "face" transform.</div>
+</li>
+</ul>
+<a name="outputWidth(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>outputWidth</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;outputWidth(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;outputWidth)</pre>
+<div class="block">The output image width when using the "face" transform.</div>
+</li>
+</ul>
+<a name="outputWidth(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>outputWidth</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;outputWidth(int&nbsp;outputWidth)</pre>
+<div class="block">The output image width when using the "face" transform.</div>
+</li>
+</ul>
+<a name="optOutputWidth(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optOutputWidth</h4>
+<pre>public&nbsp;int&nbsp;optOutputWidth(int&nbsp;defaultValue)</pre>
+<div class="block">The output image width when using the "face" transform.</div>
+</li>
+</ul>
+<a name="outputWidth()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>outputWidth</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;outputWidth()</pre>
+<div class="block">The output image width when using the "face" transform.</div>
+</li>
+</ul>
+<a name="outputHeight(java.lang.Integer)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>outputHeight</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;outputHeight(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;outputHeight)</pre>
+<div class="block">The output image width when using the "face" transform.</div>
+</li>
+</ul>
+<a name="outputHeight(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>outputHeight</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;outputHeight(int&nbsp;outputHeight)</pre>
+<div class="block">The output image width when using the "face" transform.</div>
+</li>
+</ul>
+<a name="optOutputHeight(int)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optOutputHeight</h4>
+<pre>public&nbsp;int&nbsp;optOutputHeight(int&nbsp;defaultValue)</pre>
+<div class="block">The output image width when using the "face" transform.</div>
+</li>
+</ul>
+<a name="outputHeight()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>outputHeight</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;outputHeight()</pre>
+<div class="block">The output image width when using the "face" transform.</div>
+</li>
+</ul>
+<a name="topCap(java.lang.Boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>topCap</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;topCap(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;topCap)</pre>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</li>
+</ul>
+<a name="topCap(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>topCap</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;topCap(boolean&nbsp;topCap)</pre>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</li>
+</ul>
+<a name="optTopCap(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optTopCap</h4>
+<pre>public&nbsp;boolean&nbsp;optTopCap(boolean&nbsp;defaultValue)</pre>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</li>
+</ul>
+<a name="topCap()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>topCap</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;topCap()</pre>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</li>
+</ul>
+<a name="bottomCap(java.lang.Boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>bottomCap</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;bottomCap(<a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;bottomCap)</pre>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</li>
+</ul>
+<a name="bottomCap(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>bottomCap</h4>
+<pre>public&nbsp;<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;bottomCap(boolean&nbsp;bottomCap)</pre>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</li>
+</ul>
+<a name="optBottomCap(boolean)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>optBottomCap</h4>
+<pre>public&nbsp;boolean&nbsp;optBottomCap(boolean&nbsp;defaultValue)</pre>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</li>
+</ul>
+<a name="bottomCap()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>bottomCap</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;bottomCap()</pre>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImageInsert.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/ImagePyramidParameters.html" target="_top">Frames</a></li>
+<li><a href="ImagePyramidParameters.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_class_summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/MakeImagePyramid.html b/js/vendor/bigshot/doc/java/bigshot/MakeImagePyramid.html
new file mode 100644
index 00000000..1d78c28d
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/MakeImagePyramid.html
@@ -0,0 +1,311 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>MakeImagePyramid (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="MakeImagePyramid (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/MathUtil.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/MakeImagePyramid.html" target="_top">Frames</a></li>
+<li><a href="MakeImagePyramid.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class MakeImagePyramid" class="title">Class MakeImagePyramid</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.MakeImagePyramid</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="strong">MakeImagePyramid</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">Command-line tool to creates the tiled image pyramids that are used by Bigshot.
+ Run without parameters or with <code>--help</code> to see parameters.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/MakeImagePyramid.html#MakeImagePyramid()">MakeImagePyramid</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/MakeImagePyramid.html#main(java.lang.String[])">main</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>
+<div class="block">Command line interface.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/MakeImagePyramid.html#process(java.io.File, java.io.File, bigshot.ImagePyramidParameters)">process</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;input,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;outputBase,
+ <a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;parameters)</code>
+<div class="block">Creates an image pyramid.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/MakeImagePyramid.html#process(java.io.File, java.io.File, bigshot.ImagePyramidParameters, java.util.Collection)">process</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;input,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;outputBase,
+ <a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;parameters,
+ <a href="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&gt;&nbsp;inserts)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="MakeImagePyramid()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>MakeImagePyramid</h4>
+<pre>public&nbsp;MakeImagePyramid()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="main(java.lang.String[])">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>main</h4>
+<pre>public static&nbsp;void&nbsp;main(<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Command line interface. Parses the command line options and invokes the
+ <a href="../bigshot/MakeImagePyramid.html#process(java.io.File, java.io.File, bigshot.ImagePyramidParameters)"><code>process(java.io.File, java.io.File, bigshot.ImagePyramidParameters)</code></a> method.
+ To run this fro your own code, use the <a href="../bigshot/MakeImagePyramid.html#process(java.io.File, java.io.File, bigshot.ImagePyramidParameters)"><code>process(java.io.File, java.io.File, bigshot.ImagePyramidParameters)</code></a> method. This method
+ may call <code>System.exit()</code>.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="process(java.io.File, java.io.File, bigshot.ImagePyramidParameters)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>process</h4>
+<pre>public static&nbsp;void&nbsp;process(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;input,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;outputBase,
+ <a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;parameters)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Creates an image pyramid.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>input</code> - the input image map</dd><dd><code>outputBase</code> - the output base directory (for folder output) or bigshot archive file (for archive output)</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="process(java.io.File, java.io.File, bigshot.ImagePyramidParameters, java.util.Collection)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>process</h4>
+<pre>public static&nbsp;void&nbsp;process(<a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;input,
+ <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;outputBase,
+ <a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a>&nbsp;parameters,
+ <a href="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a>&gt;&nbsp;inserts)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/MathUtil.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/MakeImagePyramid.html" target="_top">Frames</a></li>
+<li><a href="MakeImagePyramid.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/MathUtil.html b/js/vendor/bigshot/doc/java/bigshot/MathUtil.html
new file mode 100644
index 00000000..bf8b71d1
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/MathUtil.html
@@ -0,0 +1,266 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>MathUtil (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="MathUtil (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/MakeImagePyramid.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/Point2D.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/MathUtil.html" target="_top">Frames</a></li>
+<li><a href="MathUtil.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class MathUtil" class="title">Class MathUtil</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.MathUtil</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="strong">MathUtil</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">Math utility functions.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/MathUtil.html#clamp(int, int, int)">clamp</a></strong>(int&nbsp;a,
+ int&nbsp;x,
+ int&nbsp;b)</code>
+<div class="block">Clamps the value between two endpoints.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/MathUtil.html#toDeg(double)">toDeg</a></strong>(double&nbsp;rad)</code>
+<div class="block">Converts radians to degrees.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/MathUtil.html#toRad(double)">toRad</a></strong>(double&nbsp;deg)</code>
+<div class="block">Converts degrees to radians.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="toRad(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toRad</h4>
+<pre>public static&nbsp;double&nbsp;toRad(double&nbsp;deg)</pre>
+<div class="block">Converts degrees to radians.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>deg</code> - the angle in degrees</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the angle in radians</dd></dl>
+</li>
+</ul>
+<a name="toDeg(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toDeg</h4>
+<pre>public static&nbsp;double&nbsp;toDeg(double&nbsp;rad)</pre>
+<div class="block">Converts radians to degrees.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>rad</code> - the angle in radians</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the angle in degrees</dd></dl>
+</li>
+</ul>
+<a name="clamp(int, int, int)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>clamp</h4>
+<pre>public static&nbsp;int&nbsp;clamp(int&nbsp;a,
+ int&nbsp;x,
+ int&nbsp;b)</pre>
+<div class="block">Clamps the value between two endpoints.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>a</code> - the lowest value that will be returned</dd><dd><code>b</code> - the highest value that will be returned</dd><dd><code>x</code> - the value to clamp</dd>
+<dt><span class="strong">Returns:</span></dt><dd>a, if x &lt;= a; b, if x &gt;= b; x otherwise</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/MakeImagePyramid.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/Point2D.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/MathUtil.html" target="_top">Frames</a></li>
+<li><a href="MathUtil.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/Point2D.html b/js/vendor/bigshot/doc/java/bigshot/Point2D.html
new file mode 100644
index 00000000..b732539b
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/Point2D.html
@@ -0,0 +1,411 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Point2D (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Point2D (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/MathUtil.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/Point3D.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/Point2D.html" target="_top">Frames</a></li>
+<li><a href="Point2D.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class Point2D" class="title">Class Point2D</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.Point2D</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Direct Known Subclasses:</dt>
+<dd><a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public class <span class="strong">Point2D</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">A mutable 2D point</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point2D.html#x">x</a></strong></code>
+<div class="block">The x-coordinate.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point2D.html#y">y</a></strong></code>
+<div class="block">The y-coordinate.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/Point2D.html#Point2D()">Point2D</a></strong>()</code>
+<div class="block">Creates a new 2d point with coordinates (0, 0).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../bigshot/Point2D.html#Point2D(double, double)">Point2D</a></strong>(double&nbsp;x,
+ double&nbsp;y)</code>
+<div class="block">Creates a new 2d point with the given coordinates.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point2D.html#norm()">norm</a></strong>()</code>
+<div class="block">The euclidean distance of the point to the origin.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point2D.html#rotate(double)">rotate</a></strong>(double&nbsp;angle)</code>
+<div class="block">Rotates the point around the origin.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point2D.html#scale(double)">scale</a></strong>(double&nbsp;s)</code>
+<div class="block">Scales the point relative to the origin.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point2D.html#toString()">toString</a></strong>()</code>
+<div class="block">Formats the point on the form <code>[<i>x</i>, <i>y</i>]</code>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point2D.html#translate2D(double, double)">translate2D</a></strong>(double&nbsp;dx,
+ double&nbsp;dy)</code>
+<div class="block">Translates the point.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="x">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>x</h4>
+<pre>public&nbsp;double x</pre>
+<div class="block">The x-coordinate.</div>
+</li>
+</ul>
+<a name="y">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>y</h4>
+<pre>public&nbsp;double y</pre>
+<div class="block">The y-coordinate.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Point2D()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>Point2D</h4>
+<pre>public&nbsp;Point2D()</pre>
+<div class="block">Creates a new 2d point with coordinates (0, 0).</div>
+</li>
+</ul>
+<a name="Point2D(double, double)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Point2D</h4>
+<pre>public&nbsp;Point2D(double&nbsp;x,
+ double&nbsp;y)</pre>
+<div class="block">Creates a new 2d point with the given coordinates.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate</dd><dd><code>y</code> - the y-coordinate</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="rotate(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rotate</h4>
+<pre>public&nbsp;void&nbsp;rotate(double&nbsp;angle)</pre>
+<div class="block">Rotates the point around the origin.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>angle</code> - the angle in radians</dd></dl>
+</li>
+</ul>
+<a name="scale(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>scale</h4>
+<pre>public&nbsp;void&nbsp;scale(double&nbsp;s)</pre>
+<div class="block">Scales the point relative to the origin.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>s</code> - the scale factor</dd></dl>
+</li>
+</ul>
+<a name="translate2D(double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>translate2D</h4>
+<pre>public&nbsp;void&nbsp;translate2D(double&nbsp;dx,
+ double&nbsp;dy)</pre>
+<div class="block">Translates the point.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>dx</code> - the amount to move the point along the x-axis</dd><dd><code>dy</code> - the amount to move the point along the y-axis</dd></dl>
+</li>
+</ul>
+<a name="norm()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>norm</h4>
+<pre>public&nbsp;double&nbsp;norm()</pre>
+<div class="block">The euclidean distance of the point to the origin.</div>
+</li>
+</ul>
+<a name="toString()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<div class="block">Formats the point on the form <code>[<i>x</i>, <i>y</i>]</code>.</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/MathUtil.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/Point3D.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/Point2D.html" target="_top">Frames</a></li>
+<li><a href="Point2D.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/Point3D.html b/js/vendor/bigshot/doc/java/bigshot/Point3D.html
new file mode 100644
index 00000000..3d7dfe8d
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/Point3D.html
@@ -0,0 +1,537 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Point3D (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Point3D (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/Point2D.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/Point3DTransform.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/Point3D.html" target="_top">Frames</a></li>
+<li><a href="Point3D.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class Point3D" class="title">Class Point3D</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../bigshot/Point2D.html" title="class in bigshot">bigshot.Point2D</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.Point3D</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="strong">Point3D</span>
+extends <a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a></pre>
+<div class="block">A 3D point</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#z">z</a></strong></code>
+<div class="block">The z-coordinate.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields_inherited_from_class_bigshot.Point2D">
+<!-- -->
+</a>
+<h3>Fields inherited from class&nbsp;bigshot.<a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a></h3>
+<code><a href="../bigshot/Point2D.html#x">x</a>, <a href="../bigshot/Point2D.html#y">y</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/Point3D.html#Point3D()">Point3D</a></strong>()</code>
+<div class="block">Creates a new 3d point with coordinates (0, 0, 0).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><strong><a href="../bigshot/Point3D.html#Point3D(double, double, double)">Point3D</a></strong>(double&nbsp;x,
+ double&nbsp;y,
+ double&nbsp;z)</code>
+<div class="block">Creates a new 3d point with the given coordinates.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#cross(bigshot.Point3D)">cross</a></strong>(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;other)</code>
+<div class="block">Computes the cross product of this vector and another.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#dot(bigshot.Point3D)">dot</a></strong>(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;other)</code>
+<div class="block">Computes the dot product of this vector and another.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#norm()">norm</a></strong>()</code>
+<div class="block">The euclidean distance of the point to the origin.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#norm2()">norm2</a></strong>()</code>
+<div class="block">The square of the euclidean distance of the point to the origin.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#project(double)">project</a></strong>(double&nbsp;f)</code>
+<div class="block">Projects the point by dividing the x and y coordinates by <code>z / f</code>.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#rotateX(double)">rotateX</a></strong>(double&nbsp;angle)</code>
+<div class="block">Rotates the point around the X-axis.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#rotateY(double)">rotateY</a></strong>(double&nbsp;angle)</code>
+<div class="block">Rotates the point around the Y-axis.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#rotateZ(double)">rotateZ</a></strong>(double&nbsp;angle)</code>
+<div class="block">Rotates the point around the Z-axis.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#scale(double)">scale</a></strong>(double&nbsp;s)</code>
+<div class="block">Scales the point relative to the origin.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#toString()">toString</a></strong>()</code>
+<div class="block">Formats the point on the form <code>[<i>x</i>, <i>y</i>, <i>z</i>]</code>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#translate3D(double, double, double)">translate3D</a></strong>(double&nbsp;dx,
+ double&nbsp;dy,
+ double&nbsp;dz)</code>
+<div class="block">Translates the point.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3D.html#translateZ(double)">translateZ</a></strong>(double&nbsp;d)</code>
+<div class="block">Translates the point along the z axis.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_bigshot.Point2D">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;bigshot.<a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a></h3>
+<code><a href="../bigshot/Point2D.html#rotate(double)">rotate</a>, <a href="../bigshot/Point2D.html#translate2D(double, double)">translate2D</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="z">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>z</h4>
+<pre>public&nbsp;double z</pre>
+<div class="block">The z-coordinate.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Point3D()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>Point3D</h4>
+<pre>public&nbsp;Point3D()</pre>
+<div class="block">Creates a new 3d point with coordinates (0, 0, 0).</div>
+</li>
+</ul>
+<a name="Point3D(double, double, double)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Point3D</h4>
+<pre>public&nbsp;Point3D(double&nbsp;x,
+ double&nbsp;y,
+ double&nbsp;z)</pre>
+<div class="block">Creates a new 3d point with the given coordinates.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>x</code> - the x-coordinate</dd><dd><code>y</code> - the y-coordinate</dd><dd><code>z</code> - the z-coordinate</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="rotateX(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rotateX</h4>
+<pre>public&nbsp;void&nbsp;rotateX(double&nbsp;angle)</pre>
+<div class="block">Rotates the point around the X-axis.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>angle</code> - the angle in radians</dd></dl>
+</li>
+</ul>
+<a name="rotateY(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rotateY</h4>
+<pre>public&nbsp;void&nbsp;rotateY(double&nbsp;angle)</pre>
+<div class="block">Rotates the point around the Y-axis.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>angle</code> - the angle in radians</dd></dl>
+</li>
+</ul>
+<a name="rotateZ(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rotateZ</h4>
+<pre>public&nbsp;void&nbsp;rotateZ(double&nbsp;angle)</pre>
+<div class="block">Rotates the point around the Z-axis.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>angle</code> - the angle in radians</dd></dl>
+</li>
+</ul>
+<a name="scale(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>scale</h4>
+<pre>public&nbsp;void&nbsp;scale(double&nbsp;s)</pre>
+<div class="block">Scales the point relative to the origin.</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../bigshot/Point2D.html#scale(double)">scale</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>s</code> - the scale factor</dd></dl>
+</li>
+</ul>
+<a name="translate3D(double, double, double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>translate3D</h4>
+<pre>public&nbsp;void&nbsp;translate3D(double&nbsp;dx,
+ double&nbsp;dy,
+ double&nbsp;dz)</pre>
+<div class="block">Translates the point.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>dx</code> - the amount to move the point along the x-axis</dd><dd><code>dy</code> - the amount to move the point along the y-axis</dd><dd><code>dz</code> - the amount to move the point along the z-axis</dd></dl>
+</li>
+</ul>
+<a name="translateZ(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>translateZ</h4>
+<pre>public&nbsp;void&nbsp;translateZ(double&nbsp;d)</pre>
+<div class="block">Translates the point along the z axis.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>d</code> - the amount to translate</dd></dl>
+</li>
+</ul>
+<a name="project(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>project</h4>
+<pre>public&nbsp;void&nbsp;project(double&nbsp;f)</pre>
+<div class="block">Projects the point by dividing the x and y coordinates by <code>z / f</code>.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>f</code> - the "focal length" of the lens</dd></dl>
+</li>
+</ul>
+<a name="dot(bigshot.Point3D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>dot</h4>
+<pre>public&nbsp;double&nbsp;dot(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;other)</pre>
+<div class="block">Computes the dot product of this vector and another.</div>
+</li>
+</ul>
+<a name="cross(bigshot.Point3D)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>cross</h4>
+<pre>public&nbsp;<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;cross(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;other)</pre>
+<div class="block">Computes the cross product of this vector and another.</div>
+</li>
+</ul>
+<a name="norm()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>norm</h4>
+<pre>public&nbsp;double&nbsp;norm()</pre>
+<div class="block">The euclidean distance of the point to the origin.</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../bigshot/Point2D.html#norm()">norm</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="norm2()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>norm2</h4>
+<pre>public&nbsp;double&nbsp;norm2()</pre>
+<div class="block">The square of the euclidean distance of the point to the origin.</div>
+</li>
+</ul>
+<a name="toString()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toString()</pre>
+<div class="block">Formats the point on the form <code>[<i>x</i>, <i>y</i>, <i>z</i>]</code>.</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../bigshot/Point2D.html#toString()">toString</a></code>&nbsp;in class&nbsp;<code><a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/Point2D.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li><a href="../bigshot/Point3DTransform.html" title="class in bigshot"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/Point3D.html" target="_top">Frames</a></li>
+<li><a href="Point3D.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/Point3DTransform.html b/js/vendor/bigshot/doc/java/bigshot/Point3DTransform.html
new file mode 100644
index 00000000..4b3f8d39
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/Point3DTransform.html
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Point3DTransform (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Point3DTransform (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/Point3D.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/Point3DTransform.html" target="_top">Frames</a></li>
+<li><a href="Point3DTransform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot</div>
+<h2 title="Class Point3DTransform" class="title">Class Point3DTransform</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.Point3DTransform</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="strong">Point3DTransform</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">A 3x3 matrix transform.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../bigshot/Point3DTransform.html#Point3DTransform()">Point3DTransform</a></strong>()</code>
+<div class="block">Creates a new transform and initializes it to the identity
+ transform.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3DTransform.html#prepend(double[][])">prepend</a></strong>(double[][]&nbsp;xform)</code>
+<div class="block">Multiplies this transform from the left with another transform.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3DTransform.html#rotateX(double)">rotateX</a></strong>(double&nbsp;angle)</code>
+<div class="block">Prepends a rotation around the X axis.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3DTransform.html#rotateY(double)">rotateY</a></strong>(double&nbsp;angle)</code>
+<div class="block">Prepends a rotation around the Y axis.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3DTransform.html#rotateZ(double)">rotateZ</a></strong>(double&nbsp;angle)</code>
+<div class="block">Prepends a rotation around the Z axis.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a></code></td>
+<td class="colLast"><code><strong><a href="../bigshot/Point3DTransform.html#transform(bigshot.Point3D)">transform</a></strong>(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;input)</code>
+<div class="block">In-place transforms a 3d point.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Point3DTransform()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Point3DTransform</h4>
+<pre>public&nbsp;Point3DTransform()</pre>
+<div class="block">Creates a new transform and initializes it to the identity
+ transform.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="prepend(double[][])">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>prepend</h4>
+<pre>public&nbsp;void&nbsp;prepend(double[][]&nbsp;xform)</pre>
+<div class="block">Multiplies this transform from the left with another transform.
+ (<code>this = xform * this</code>).</div>
+</li>
+</ul>
+<a name="rotateX(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rotateX</h4>
+<pre>public&nbsp;void&nbsp;rotateX(double&nbsp;angle)</pre>
+<div class="block">Prepends a rotation around the X axis.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>angle</code> - the angle in radians</dd></dl>
+</li>
+</ul>
+<a name="rotateY(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rotateY</h4>
+<pre>public&nbsp;void&nbsp;rotateY(double&nbsp;angle)</pre>
+<div class="block">Prepends a rotation around the Y axis.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>angle</code> - the angle in radians</dd></dl>
+</li>
+</ul>
+<a name="rotateZ(double)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rotateZ</h4>
+<pre>public&nbsp;void&nbsp;rotateZ(double&nbsp;angle)</pre>
+<div class="block">Prepends a rotation around the Z axis.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>angle</code> - the angle in radians</dd></dl>
+</li>
+</ul>
+<a name="transform(bigshot.Point3D)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>transform</h4>
+<pre>public&nbsp;<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;transform(<a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a>&nbsp;input)</pre>
+<div class="block">In-place transforms a 3d point.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>input</code> - the point to transform. This point will be mutated - no new Point3D object is created.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the input point after it has been transformed</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../bigshot/Point3D.html" title="class in bigshot"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/Point3DTransform.html" target="_top">Frames</a></li>
+<li><a href="Point3DTransform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/mp/ChildCallable.html b/js/vendor/bigshot/doc/java/bigshot/mp/ChildCallable.html
new file mode 100644
index 00000000..b0b35740
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/mp/ChildCallable.html
@@ -0,0 +1,300 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ChildCallable (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ChildCallable (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Class</li>
+<li><a href="../../bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/ChildCallable.html" target="_top">Frames</a></li>
+<li><a href="ChildCallable.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot.mp</div>
+<h2 title="Class ChildCallable" class="title">Class ChildCallable&lt;T&gt;</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.mp.ChildCallable&lt;T&gt;</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;T&gt;</dd>
+</dl>
+<hr>
+<br>
+<pre>public abstract class <span class="strong">ChildCallable&lt;T&gt;</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;T&gt;</pre>
+<div class="block">Callable that sets the name of the executing thread to the
+ name of the thread used to create the callable. Used to keep track
+ of work set callables.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../bigshot/mp/ChildCallable.html#ChildCallable()">ChildCallable</a></strong>()</code>
+<div class="block">Creates a new child callable and captures the name
+ of the creating thread.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../bigshot/mp/ChildCallable.html" title="type parameter in ChildCallable">T</a></code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/ChildCallable.html#call()">call</a></strong>()</code>
+<div class="block">Tucks away the current thread name, sets it to the
+ creating thread name, calls <a href="../../bigshot/mp/ChildCallable.html#execute()"><code>execute()</code></a>,
+ then restores the old thread name.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected abstract <a href="../../bigshot/mp/ChildCallable.html" title="type parameter in ChildCallable">T</a></code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/ChildCallable.html#execute()">execute</a></strong>()</code>
+<div class="block">Override in subclasses.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="ChildCallable()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ChildCallable</h4>
+<pre>public&nbsp;ChildCallable()</pre>
+<div class="block">Creates a new child callable and captures the name
+ of the creating thread.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="call()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>call</h4>
+<pre>public final&nbsp;<a href="../../bigshot/mp/ChildCallable.html" title="type parameter in ChildCallable">T</a>&nbsp;call()
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Tucks away the current thread name, sets it to the
+ creating thread name, calls <a href="../../bigshot/mp/ChildCallable.html#execute()"><code>execute()</code></a>,
+ then restores the old thread name.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true#call()" title="class or interface in java.util.concurrent">call</a></code>&nbsp;in interface&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="../../bigshot/mp/ChildCallable.html" title="type parameter in ChildCallable">T</a>&gt;</code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="execute()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>execute</h4>
+<pre>protected abstract&nbsp;<a href="../../bigshot/mp/ChildCallable.html" title="type parameter in ChildCallable">T</a>&nbsp;execute()
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Override in subclasses. This substitutes for
+ <code>call()</code>.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Class</li>
+<li><a href="../../bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/ChildCallable.html" target="_top">Frames</a></li>
+<li><a href="ChildCallable.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/mp/DefaultWorkSetFactory.html b/js/vendor/bigshot/doc/java/bigshot/mp/DefaultWorkSetFactory.html
new file mode 100644
index 00000000..b50b45ec
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/mp/DefaultWorkSetFactory.html
@@ -0,0 +1,319 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>DefaultWorkSetFactory (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="DefaultWorkSetFactory (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/mp/ChildCallable.html" title="class in bigshot.mp"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/DefaultWorkSetFactory.html" target="_top">Frames</a></li>
+<li><a href="DefaultWorkSetFactory.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot.mp</div>
+<h2 title="Class DefaultWorkSetFactory" class="title">Class DefaultWorkSetFactory</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.mp.DefaultWorkSetFactory</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public class <span class="strong">DefaultWorkSetFactory</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
+<div class="block">Default implementation of the <a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp"><code>WorkSetFactory</code></a> interface.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../bigshot/mp/DefaultWorkSetFactory.html#DefaultWorkSetFactory()">DefaultWorkSetFactory</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>&lt;R&gt;&nbsp;<a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a>&lt;R&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/DefaultWorkSetFactory.html#create()">create</a></strong>()</code>
+<div class="block">Create a new work set with the given result type.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/DefaultWorkSetFactory.html#dispose()">dispose</a></strong>()</code>
+<div class="block">Dispose this factory.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/DefaultWorkSetFactory.html#run()">run</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;T&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/DefaultWorkSetFactory.html#submit(java.util.concurrent.Callable)">submit</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;T&gt;&nbsp;callable)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="DefaultWorkSetFactory()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>DefaultWorkSetFactory</h4>
+<pre>public&nbsp;DefaultWorkSetFactory()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="create()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>create</h4>
+<pre>public&nbsp;&lt;R&gt;&nbsp;<a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a>&lt;R&gt;&nbsp;create()</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../bigshot/mp/WorkSetFactory.html#create()">WorkSetFactory</a></code></strong></div>
+<div class="block">Create a new work set with the given result type.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../bigshot/mp/WorkSetFactory.html#create()">create</a></code>&nbsp;in interface&nbsp;<code><a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="run()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>run</h4>
+<pre>public&nbsp;void&nbsp;run()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true#run()" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="submit(java.util.concurrent.Callable)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>submit</h4>
+<pre>public&nbsp;&lt;T&gt;&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;T&gt;&nbsp;submit(<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;T&gt;&nbsp;callable)</pre>
+</li>
+</ul>
+<a name="dispose()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>dispose</h4>
+<pre>public&nbsp;void&nbsp;dispose()</pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../bigshot/mp/WorkSetFactory.html#dispose()">WorkSetFactory</a></code></strong></div>
+<div class="block">Dispose this factory.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../bigshot/mp/WorkSetFactory.html#dispose()">dispose</a></code>&nbsp;in interface&nbsp;<code><a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/mp/ChildCallable.html" title="class in bigshot.mp"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/DefaultWorkSetFactory.html" target="_top">Frames</a></li>
+<li><a href="DefaultWorkSetFactory.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/mp/ParallelFor.html b/js/vendor/bigshot/doc/java/bigshot/mp/ParallelFor.html
new file mode 100644
index 00000000..ff52b620
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/mp/ParallelFor.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>ParallelFor (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="ParallelFor (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/ParallelFor.html" target="_top">Frames</a></li>
+<li><a href="ParallelFor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot.mp</div>
+<h2 title="Interface ParallelFor" class="title">Interface ParallelFor&lt;Result&gt;</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public interface <span class="strong">ParallelFor&lt;Result&gt;</span></pre>
+<div class="block">Interface for parallel for-loops.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../bigshot/mp/ParallelFor.html" title="type parameter in ParallelFor">Result</a></code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/ParallelFor.html#call(int, int)">call</a></strong>(int&nbsp;a,
+ int&nbsp;b)</code>
+<div class="block">Execute a for loop between a and b, like <code>for (int i = a; i &lt; b; ++i) { ...</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="call(int, int)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>call</h4>
+<pre><a href="../../bigshot/mp/ParallelFor.html" title="type parameter in ParallelFor">Result</a>&nbsp;call(int&nbsp;a,
+ int&nbsp;b)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Execute a for loop between a and b, like <code>for (int i = a; i &lt; b; ++i) { ... }</code>
+ and return the result.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/ParallelFor.html" target="_top">Frames</a></li>
+<li><a href="ParallelFor.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/mp/WorkSet.html b/js/vendor/bigshot/doc/java/bigshot/mp/WorkSet.html
new file mode 100644
index 00000000..2899e936
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/mp/WorkSet.html
@@ -0,0 +1,376 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>WorkSet (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="WorkSet (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/WorkSet.html" target="_top">Frames</a></li>
+<li><a href="WorkSet.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot.mp</div>
+<h2 title="Class WorkSet" class="title">Class WorkSet&lt;Result&gt;</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>bigshot.mp.WorkSet&lt;Result&gt;</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public abstract class <span class="strong">WorkSet&lt;Result&gt;</span>
+extends <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">A work set abstraction.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../bigshot/mp/WorkSet.html#WorkSet()">WorkSet</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>abstract <a href="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../../bigshot/mp/WorkSet.html" title="type parameter in WorkSet">Result</a>&gt;&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/WorkSet.html#complete()">complete</a></strong>()</code>
+<div class="block">Completes all submitted callables and returns the results as <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><code>Future</code></a>s.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static &lt;Result&gt;&nbsp;<a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a>&lt;Result&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/WorkSet.html#create()">create</a></strong>()</code>
+<div class="block">Creates a new work set.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>abstract void</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/WorkSet.html#execute(java.util.concurrent.Callable)">execute</a></strong>(<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="../../bigshot/mp/WorkSet.html" title="type parameter in WorkSet">Result</a>&gt;&nbsp;callable)</code>
+<div class="block">Submits a callable for execution.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>abstract <a href="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../bigshot/mp/WorkSet.html" title="type parameter in WorkSet">Result</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/WorkSet.html#join()">join</a></strong>()</code>
+<div class="block">Completes all submitted callables, also in the calling thread if possible,
+ and returns the results.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>abstract void</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/WorkSet.html#parallelFor(int, int, bigshot.mp.ParallelFor)">parallelFor</a></strong>(int&nbsp;a,
+ int&nbsp;b,
+ <a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp">ParallelFor</a>&lt;<a href="../../bigshot/mp/WorkSet.html" title="type parameter in WorkSet">Result</a>&gt;&nbsp;pfor)</code>
+<div class="block">Executes a parallel for in this work set.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static &lt;Result&gt;&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;Result&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/WorkSet.html#pfor(int, int, bigshot.mp.ParallelFor)">pfor</a></strong>(int&nbsp;a,
+ int&nbsp;b,
+ <a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp">ParallelFor</a>&lt;Result&gt;&nbsp;pfor)</code>
+<div class="block">Convenience method to execute a parallel for in a work set.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/WorkSet.html#setFactory(bigshot.mp.WorkSetFactory)">setFactory</a></strong>(<a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a>&nbsp;factory)</code>
+<div class="block">Set the factory implementation to use.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="WorkSet()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>WorkSet</h4>
+<pre>public&nbsp;WorkSet()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="create()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>create</h4>
+<pre>public static&nbsp;&lt;Result&gt;&nbsp;<a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a>&lt;Result&gt;&nbsp;create()</pre>
+<div class="block">Creates a new work set.</div>
+</li>
+</ul>
+<a name="setFactory(bigshot.mp.WorkSetFactory)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setFactory</h4>
+<pre>public static&nbsp;void&nbsp;setFactory(<a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a>&nbsp;factory)</pre>
+<div class="block">Set the factory implementation to use.</div>
+</li>
+</ul>
+<a name="complete()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>complete</h4>
+<pre>public abstract&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../../bigshot/mp/WorkSet.html" title="type parameter in WorkSet">Result</a>&gt;&gt;&nbsp;complete()
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Completes all submitted callables and returns the results as <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><code>Future</code></a>s.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="join()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>join</h4>
+<pre>public abstract&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../bigshot/mp/WorkSet.html" title="type parameter in WorkSet">Result</a>&gt;&nbsp;join()
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Completes all submitted callables, also in the calling thread if possible,
+ and returns the results.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="execute(java.util.concurrent.Callable)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>execute</h4>
+<pre>public abstract&nbsp;void&nbsp;execute(<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="../../bigshot/mp/WorkSet.html" title="type parameter in WorkSet">Result</a>&gt;&nbsp;callable)</pre>
+<div class="block">Submits a callable for execution.</div>
+</li>
+</ul>
+<a name="parallelFor(int, int, bigshot.mp.ParallelFor)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>parallelFor</h4>
+<pre>public abstract&nbsp;void&nbsp;parallelFor(int&nbsp;a,
+ int&nbsp;b,
+ <a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp">ParallelFor</a>&lt;<a href="../../bigshot/mp/WorkSet.html" title="type parameter in WorkSet">Result</a>&gt;&nbsp;pfor)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Executes a parallel for in this work set.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="pfor(int, int, bigshot.mp.ParallelFor)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>pfor</h4>
+<pre>public static&nbsp;&lt;Result&gt;&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;Result&gt;&nbsp;pfor(int&nbsp;a,
+ int&nbsp;b,
+ <a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp">ParallelFor</a>&lt;Result&gt;&nbsp;pfor)
+ throws <a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Convenience method to execute a parallel for in a work set.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/WorkSet.html" target="_top">Frames</a></li>
+<li><a href="WorkSet.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/mp/WorkSetFactory.html b/js/vendor/bigshot/doc/java/bigshot/mp/WorkSetFactory.html
new file mode 100644
index 00000000..97ca4b0f
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/mp/WorkSetFactory.html
@@ -0,0 +1,228 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>WorkSetFactory (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="WorkSetFactory (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/WorkSetFactory.html" target="_top">Frames</a></li>
+<li><a href="WorkSetFactory.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">bigshot.mp</div>
+<h2 title="Interface WorkSetFactory" class="title">Interface WorkSetFactory</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Known Implementing Classes:</dt>
+<dd><a href="../../bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp">DefaultWorkSetFactory</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public interface <span class="strong">WorkSetFactory</span></pre>
+<div class="block">Pluggable factory for <a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp"><code>WorkSet</code></a>s.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>&lt;Result&gt;&nbsp;<a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a>&lt;Result&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/WorkSetFactory.html#create()">create</a></strong>()</code>
+<div class="block">Create a new work set with the given result type.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../bigshot/mp/WorkSetFactory.html#dispose()">dispose</a></strong>()</code>
+<div class="block">Dispose this factory.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="create()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>create</h4>
+<pre>&lt;Result&gt;&nbsp;<a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a>&lt;Result&gt;&nbsp;create()</pre>
+<div class="block">Create a new work set with the given result type.</div>
+</li>
+</ul>
+<a name="dispose()">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>dispose</h4>
+<pre>void&nbsp;dispose()</pre>
+<div class="block">Dispose this factory.</div>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/WorkSetFactory.html" target="_top">Frames</a></li>
+<li><a href="WorkSetFactory.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/mp/package-frame.html b/js/vendor/bigshot/doc/java/bigshot/mp/package-frame.html
new file mode 100644
index 00000000..f1df874c
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/mp/package-frame.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>bigshot.mp (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<h1 class="bar"><a href="../../bigshot/mp/package-summary.html" target="classFrame">bigshot.mp</a></h1>
+<div class="indexContainer">
+<h2 title="Interfaces">Interfaces</h2>
+<ul title="Interfaces">
+<li><a href="ParallelFor.html" title="interface in bigshot.mp" target="classFrame"><i>ParallelFor</i></a></li>
+<li><a href="WorkSetFactory.html" title="interface in bigshot.mp" target="classFrame"><i>WorkSetFactory</i></a></li>
+</ul>
+<h2 title="Classes">Classes</h2>
+<ul title="Classes">
+<li><a href="ChildCallable.html" title="class in bigshot.mp" target="classFrame">ChildCallable</a></li>
+<li><a href="DefaultWorkSetFactory.html" title="class in bigshot.mp" target="classFrame">DefaultWorkSetFactory</a></li>
+<li><a href="WorkSet.html" title="class in bigshot.mp" target="classFrame">WorkSet</a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/mp/package-summary.html b/js/vendor/bigshot/doc/java/bigshot/mp/package-summary.html
new file mode 100644
index 00000000..de9b7de3
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/mp/package-summary.html
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>bigshot.mp (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="bigshot.mp (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/package-summary.html">Prev Package</a></li>
+<li>Next Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Package" class="title">Package&nbsp;bigshot.mp</h1>
+<div class="docSummary">
+<div class="block">Contains classes for multi core processing.</div>
+</div>
+<p>See:&nbsp;<a href="#package_description">Description</a></p>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Interface Summary table, listing interfaces, and an explanation">
+<caption><span>Interface Summary</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Interface</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp">ParallelFor</a>&lt;Result&gt;</td>
+<td class="colLast">
+<div class="block">Interface for parallel for-loops.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a></td>
+<td class="colLast">
+<div class="block">Pluggable factory for <a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp"><code>WorkSet</code></a>s.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
+<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Class</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../../bigshot/mp/ChildCallable.html" title="class in bigshot.mp">ChildCallable</a>&lt;T&gt;</td>
+<td class="colLast">
+<div class="block">Callable that sets the name of the executing thread to the
+ name of the thread used to create the callable.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp">DefaultWorkSetFactory</a></td>
+<td class="colLast">
+<div class="block">Default implementation of the <a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp"><code>WorkSetFactory</code></a> interface.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a>&lt;Result&gt;</td>
+<td class="colLast">
+<div class="block">A work set abstraction.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+<a name="package_description">
+<!-- -->
+</a>
+<h2 title="Package bigshot.mp Description">Package bigshot.mp Description</h2>
+<div class="block">Contains classes for multi core processing. Use the <a href="../../bigshot/mp/WorkSet.html#setFactory(bigshot.mp.WorkSetFactory)"><code>WorkSet.setFactory(bigshot.mp.WorkSetFactory)</code></a>
+ method to plug in your own (system-wide) implementation.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp"><code>WorkSet</code></a></dd></dl>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/package-summary.html">Prev Package</a></li>
+<li>Next Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/mp/package-tree.html b/js/vendor/bigshot/doc/java/bigshot/mp/package-tree.html
new file mode 100644
index 00000000..d721eceb
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/mp/package-tree.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>bigshot.mp Class Hierarchy (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="bigshot.mp Class Hierarchy (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/package-tree.html">Prev</a></li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For Package bigshot.mp</h1>
+<span class="strong">Package Hierarchies:</span>
+<ul class="horizontal">
+<li><a href="../../overview-tree.html">All Packages</a></li>
+</ul>
+</div>
+<div class="contentContainer">
+<h2 title="Class Hierarchy">Class Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="strong">Object</span></a>
+<ul>
+<li type="circle">bigshot.mp.<a href="../../bigshot/mp/ChildCallable.html" title="class in bigshot.mp"><span class="strong">ChildCallable</span></a>&lt;T&gt; (implements java.util.concurrent.<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;)</li>
+<li type="circle">bigshot.mp.<a href="../../bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp"><span class="strong">DefaultWorkSetFactory</span></a> (implements java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>, bigshot.mp.<a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a>)</li>
+<li type="circle">bigshot.mp.<a href="../../bigshot/mp/WorkSet.html" title="class in bigshot.mp"><span class="strong">WorkSet</span></a>&lt;Result&gt;</li>
+</ul>
+</li>
+</ul>
+<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
+<ul>
+<li type="circle">bigshot.mp.<a href="../../bigshot/mp/ParallelFor.html" title="interface in bigshot.mp"><span class="strong">ParallelFor</span></a>&lt;Result&gt;</li>
+<li type="circle">bigshot.mp.<a href="../../bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp"><span class="strong">WorkSetFactory</span></a></li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../bigshot/package-tree.html">Prev</a></li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../index.html?bigshot/mp/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/package-frame.html b/js/vendor/bigshot/doc/java/bigshot/package-frame.html
new file mode 100644
index 00000000..3dcd4666
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/package-frame.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>bigshot (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<h1 class="bar"><a href="../bigshot/package-summary.html" target="classFrame">bigshot</a></h1>
+<div class="indexContainer">
+<h2 title="Classes">Classes</h2>
+<ul title="Classes">
+<li><a href="AbstractCubicTransform.html" title="class in bigshot" target="classFrame">AbstractCubicTransform</a></li>
+<li><a href="AbstractCubicTransform.TransformedFace.html" title="class in bigshot" target="classFrame">AbstractCubicTransform.TransformedFace</a></li>
+<li><a href="AbstractSphericalCubicTransform.html" title="class in bigshot" target="classFrame">AbstractSphericalCubicTransform</a></li>
+<li><a href="CylindricalToCubic.html" title="class in bigshot" target="classFrame">CylindricalToCubic</a></li>
+<li><a href="EquirectangularToCubic.html" title="class in bigshot" target="classFrame">EquirectangularToCubic</a></li>
+<li><a href="FastTrigInverse.html" title="class in bigshot" target="classFrame">FastTrigInverse</a></li>
+<li><a href="FastTrigInverse.FastAcos.html" title="class in bigshot" target="classFrame">FastTrigInverse.FastAcos</a></li>
+<li><a href="FastTrigInverse.FastAtan.html" title="class in bigshot" target="classFrame">FastTrigInverse.FastAtan</a></li>
+<li><a href="Image.html" title="class in bigshot" target="classFrame">Image</a></li>
+<li><a href="ImageInsert.html" title="class in bigshot" target="classFrame">ImageInsert</a></li>
+<li><a href="ImagePyramidParameters.html" title="class in bigshot" target="classFrame">ImagePyramidParameters</a></li>
+<li><a href="MakeImagePyramid.html" title="class in bigshot" target="classFrame">MakeImagePyramid</a></li>
+<li><a href="MathUtil.html" title="class in bigshot" target="classFrame">MathUtil</a></li>
+<li><a href="Point2D.html" title="class in bigshot" target="classFrame">Point2D</a></li>
+<li><a href="Point3D.html" title="class in bigshot" target="classFrame">Point3D</a></li>
+<li><a href="Point3DTransform.html" title="class in bigshot" target="classFrame">Point3DTransform</a></li>
+</ul>
+<h2 title="Enums">Enums</h2>
+<ul title="Enums">
+<li><a href="ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.DescriptorFormat</a></li>
+<li><a href="ImagePyramidParameters.FolderLayout.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.FolderLayout</a></li>
+<li><a href="ImagePyramidParameters.Format.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.Format</a></li>
+<li><a href="ImagePyramidParameters.ImageFormat.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.ImageFormat</a></li>
+<li><a href="ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.LevelNumbering</a></li>
+<li><a href="ImagePyramidParameters.Preset.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.Preset</a></li>
+<li><a href="ImagePyramidParameters.Transform.html" title="enum in bigshot" target="classFrame">ImagePyramidParameters.Transform</a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/package-summary.html b/js/vendor/bigshot/doc/java/bigshot/package-summary.html
new file mode 100644
index 00000000..f43a4209
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/package-summary.html
@@ -0,0 +1,290 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>bigshot (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="bigshot (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Package</li>
+<li><a href="../bigshot/mp/package-summary.html">Next Package</a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Package" class="title">Package&nbsp;bigshot</h1>
+<div class="docSummary">
+<div class="block">Contains classes for image transformation, as well as image pyramid and VR cube generation.</div>
+</div>
+<p>See:&nbsp;<a href="#package_description">Description</a></p>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
+<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Class</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&lt;Derived extends <a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&gt;</td>
+<td class="colLast">
+<div class="block">Transforms an image map to a set of rectilinear images.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></td>
+<td class="colLast">
+<div class="block">A delayed-evaluated Image.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a>&lt;Derived extends <a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&gt;</td>
+<td class="colLast">
+<div class="block">Base class for transforms where the transformation to image map space can be expressed in
+ terms of the two angles theta and phi of the sight ray.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></td>
+<td class="colLast">
+<div class="block">Transforms an cylindrical image map to rectilinear images.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></td>
+<td class="colLast">
+<div class="block">Transforms an equirectangular image map to rectilinear images.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></td>
+<td class="colLast">
+<div class="block">Fast inverse trigonometric functions based on lookup tables and
+ linear interpolation between lookup table values.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot">FastTrigInverse.FastAcos</a></td>
+<td class="colLast">
+<div class="block">Fast inverse-cosine.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot">FastTrigInverse.FastAtan</a></td>
+<td class="colLast">
+<div class="block">Fast inverse-cosine.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/Image.html" title="class in bigshot">Image</a></td>
+<td class="colLast">
+<div class="block">A 30-bit (10 per channel) RGB image.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></td>
+<td class="colLast">
+<div class="block">An image that is projected into an existing panorama.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></td>
+<td class="colLast">
+<div class="block">A typesafe interface to the parameters for MakeImagePyramid.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/MakeImagePyramid.html" title="class in bigshot">MakeImagePyramid</a></td>
+<td class="colLast">
+<div class="block">Command-line tool to creates the tiled image pyramids that are used by Bigshot.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/MathUtil.html" title="class in bigshot">MathUtil</a></td>
+<td class="colLast">
+<div class="block">Math utility functions.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/Point2D.html" title="class in bigshot">Point2D</a></td>
+<td class="colLast">
+<div class="block">A mutable 2D point</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/Point3D.html" title="class in bigshot">Point3D</a></td>
+<td class="colLast">
+<div class="block">A 3D point</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/Point3DTransform.html" title="class in bigshot">Point3DTransform</a></td>
+<td class="colLast">
+<div class="block">A 3x3 matrix transform.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Summary table, listing enums, and an explanation">
+<caption><span>Enum Summary</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Enum</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></td>
+<td class="colLast">
+<div class="block">The descriptor format for the output pyramid.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></td>
+<td class="colLast">
+<div class="block">The folder structure of the output pyramid.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></td>
+<td class="colLast">
+<div class="block">The output format for the image pyramid.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></td>
+<td class="colLast">
+<div class="block">Image format for the tiles and everything.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></td>
+<td class="colLast">
+<div class="block">If set to "invert", inverts the level numbering.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></td>
+<td class="colLast">
+<div class="block">A preset set of parameters.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></td>
+<td class="colLast">
+<div class="block">The input image transform</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+<a name="package_description">
+<!-- -->
+</a>
+<h2 title="Package bigshot Description">Package bigshot Description</h2>
+<div class="block">Contains classes for image transformation, as well as image pyramid and VR cube generation.</div>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../bigshot/MakeImagePyramid.html" title="class in bigshot"><code>MakeImagePyramid</code></a>,
+<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot"><code>EquirectangularToCubic</code></a>,
+<a href="../bigshot/CylindricalToCubic.html" title="class in bigshot"><code>CylindricalToCubic</code></a></dd></dl>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Package</li>
+<li><a href="../bigshot/mp/package-summary.html">Next Package</a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/bigshot/package-tree.html b/js/vendor/bigshot/doc/java/bigshot/package-tree.html
new file mode 100644
index 00000000..dfc98aac
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/bigshot/package-tree.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>bigshot Class Hierarchy (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="bigshot Class Hierarchy (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li><a href="../bigshot/mp/package-tree.html">Next</a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For Package bigshot</h1>
+<span class="strong">Package Hierarchies:</span>
+<ul class="horizontal">
+<li><a href="../overview-tree.html">All Packages</a></li>
+</ul>
+</div>
+<div class="contentContainer">
+<h2 title="Class Hierarchy">Class Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="strong">Object</span></a>
+<ul>
+<li type="circle">bigshot.<a href="../bigshot/AbstractCubicTransform.html" title="class in bigshot"><span class="strong">AbstractCubicTransform</span></a>&lt;Derived&gt;
+<ul>
+<li type="circle">bigshot.<a href="../bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot"><span class="strong">AbstractSphericalCubicTransform</span></a>&lt;Derived&gt;
+<ul>
+<li type="circle">bigshot.<a href="../bigshot/CylindricalToCubic.html" title="class in bigshot"><span class="strong">CylindricalToCubic</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/EquirectangularToCubic.html" title="class in bigshot"><span class="strong">EquirectangularToCubic</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li type="circle">bigshot.<a href="../bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot"><span class="strong">AbstractCubicTransform.TransformedFace</span></a> (implements java.util.concurrent.<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;V&gt;)</li>
+<li type="circle">java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.html?is-external=true" title="class or interface in java.util"><span class="strong">AbstractMap</span></a>&lt;K,V&gt; (implements java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;K,V&gt;)
+<ul>
+<li type="circle">java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util"><span class="strong">TreeMap</span></a>&lt;K,V&gt; (implements java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;K,V&gt;, java.io.<a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<ul>
+<li type="circle">bigshot.<a href="../bigshot/ImagePyramidParameters.html" title="class in bigshot"><span class="strong">ImagePyramidParameters</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li type="circle">bigshot.<a href="../bigshot/FastTrigInverse.html" title="class in bigshot"><span class="strong">FastTrigInverse</span></a>
+<ul>
+<li type="circle">bigshot.<a href="../bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot"><span class="strong">FastTrigInverse.FastAcos</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot"><span class="strong">FastTrigInverse.FastAtan</span></a></li>
+</ul>
+</li>
+<li type="circle">bigshot.<a href="../bigshot/Image.html" title="class in bigshot"><span class="strong">Image</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/ImageInsert.html" title="class in bigshot"><span class="strong">ImageInsert</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/MakeImagePyramid.html" title="class in bigshot"><span class="strong">MakeImagePyramid</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/MathUtil.html" title="class in bigshot"><span class="strong">MathUtil</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/Point2D.html" title="class in bigshot"><span class="strong">Point2D</span></a>
+<ul>
+<li type="circle">bigshot.<a href="../bigshot/Point3D.html" title="class in bigshot"><span class="strong">Point3D</span></a></li>
+</ul>
+</li>
+<li type="circle">bigshot.<a href="../bigshot/Point3DTransform.html" title="class in bigshot"><span class="strong">Point3DTransform</span></a></li>
+</ul>
+</li>
+</ul>
+<h2 title="Enum Hierarchy">Enum Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="strong">Object</span></a>
+<ul>
+<li type="circle">java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<ul>
+<li type="circle">bigshot.<a href="../bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.Preset</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.Format</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.Transform</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.ImageFormat</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.FolderLayout</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.DescriptorFormat</span></a></li>
+<li type="circle">bigshot.<a href="../bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.LevelNumbering</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../deprecated-list.html">Deprecated</a></li>
+<li><a href="../index-all.html">Index</a></li>
+<li><a href="../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li><a href="../bigshot/mp/package-tree.html">Next</a></li>
+</ul>
+<ul class="navList">
+<li><a href="../index.html?bigshot/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/constant-values.html b/js/vendor/bigshot/doc/java/constant-values.html
new file mode 100644
index 00000000..1b818d78
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/constant-values.html
@@ -0,0 +1,385 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Constant Field Values (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Constant Field Values (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
+<li><a href="constant-values.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Constant Field Values" class="title">Constant Field Values</h1>
+<h2 title="Contents">Contents</h2>
+<ul>
+<li><a href="#bigshot">bigshot.*</a></li>
+</ul>
+</div>
+<div class="constantValuesContainer"><a name="bigshot">
+<!-- -->
+</a>
+<h2 title="bigshot">bigshot.*</h2>
+<ul class="blockList">
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>bigshot.<a href="bigshot/Image.html" title="class in bigshot">Image</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.Image.COMPONENT_MAX_VALUE">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="bigshot/Image.html#COMPONENT_MAX_VALUE">COMPONENT_MAX_VALUE</a></code></td>
+<td class="colLast"><code>1023</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>bigshot.<a href="bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.BOTTOM_CAP">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#BOTTOM_CAP">BOTTOM_CAP</a></code></td>
+<td class="colLast"><code>"bottom-cap"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.DESCRIPTOR_FORMAT">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#DESCRIPTOR_FORMAT">DESCRIPTOR_FORMAT</a></code></td>
+<td class="colLast"><code>"descriptor-format"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.FACE_SIZE">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#FACE_SIZE">FACE_SIZE</a></code></td>
+<td class="colLast"><code>"face-size"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.FOLDER_LAYOUT">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#FOLDER_LAYOUT">FOLDER_LAYOUT</a></code></td>
+<td class="colLast"><code>"folder-layout"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.FORMAT">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#FORMAT">FORMAT</a></code></td>
+<td class="colLast"><code>"format"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.FOV">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#FOV">FOV</a></code></td>
+<td class="colLast"><code>"fov"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.IMAGE_FORMAT">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#IMAGE_FORMAT">IMAGE_FORMAT</a></code></td>
+<td class="colLast"><code>"image-format"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.INPUT_HEIGHT">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#INPUT_HEIGHT">INPUT_HEIGHT</a></code></td>
+<td class="colLast"><code>"input-height"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.INPUT_HFOV">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#INPUT_HFOV">INPUT_HFOV</a></code></td>
+<td class="colLast"><code>"input-hfov"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.INPUT_HORIZON">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#INPUT_HORIZON">INPUT_HORIZON</a></code></td>
+<td class="colLast"><code>"input-horizon"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.INPUT_VFOV">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#INPUT_VFOV">INPUT_VFOV</a></code></td>
+<td class="colLast"><code>"input-vfov"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.INPUT_WIDTH">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#INPUT_WIDTH">INPUT_WIDTH</a></code></td>
+<td class="colLast"><code>"input-width"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.JITTER">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#JITTER">JITTER</a></code></td>
+<td class="colLast"><code>"jitter"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.JPEG_QUALITY">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#JPEG_QUALITY">JPEG_QUALITY</a></code></td>
+<td class="colLast"><code>"jpeg-quality"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.LEVEL_NUMBERING">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#LEVEL_NUMBERING">LEVEL_NUMBERING</a></code></td>
+<td class="colLast"><code>"level-numbering"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.LEVELS">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#LEVELS">LEVELS</a></code></td>
+<td class="colLast"><code>"levels"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.OUTPUT_HEIGHT">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#OUTPUT_HEIGHT">OUTPUT_HEIGHT</a></code></td>
+<td class="colLast"><code>"output-height"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.OUTPUT_WIDTH">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#OUTPUT_WIDTH">OUTPUT_WIDTH</a></code></td>
+<td class="colLast"><code>"output-width"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.OVERLAP">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#OVERLAP">OVERLAP</a></code></td>
+<td class="colLast"><code>"overlap"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.OVERSAMPLING">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#OVERSAMPLING">OVERSAMPLING</a></code></td>
+<td class="colLast"><code>"oversampling"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.PITCH">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#PITCH">PITCH</a></code></td>
+<td class="colLast"><code>"pitch"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.PITCH_OFFSET">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#PITCH_OFFSET">PITCH_OFFSET</a></code></td>
+<td class="colLast"><code>"pitch-offset"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.POSTER_SIZE">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#POSTER_SIZE">POSTER_SIZE</a></code></td>
+<td class="colLast"><code>"poster-size"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.PRESET">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#PRESET">PRESET</a></code></td>
+<td class="colLast"><code>"preset"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.ROLL">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#ROLL">ROLL</a></code></td>
+<td class="colLast"><code>"roll"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.ROLL_OFFSET">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#ROLL_OFFSET">ROLL_OFFSET</a></code></td>
+<td class="colLast"><code>"roll-offset"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.TILE_SIZE">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#TILE_SIZE">TILE_SIZE</a></code></td>
+<td class="colLast"><code>"tile-size"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.TOP_CAP">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#TOP_CAP">TOP_CAP</a></code></td>
+<td class="colLast"><code>"top-cap"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.TRANSFORM">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#TRANSFORM">TRANSFORM</a></code></td>
+<td class="colLast"><code>"transform"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.TRANSFORM_PTO">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#TRANSFORM_PTO">TRANSFORM_PTO</a></code></td>
+<td class="colLast"><code>"transform-pto"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.WRAP_X">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#WRAP_X">WRAP_X</a></code></td>
+<td class="colLast"><code>"wrap-x"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.YAW">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#YAW">YAW</a></code></td>
+<td class="colLast"><code>"yaw"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="bigshot.ImagePyramidParameters.YAW_OFFSET">
+<!-- -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="bigshot/ImagePyramidParameters.html#YAW_OFFSET">YAW_OFFSET</a></code></td>
+<td class="colLast"><code>"yaw-offset"</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
+<li><a href="constant-values.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/deprecated-list.html b/js/vendor/bigshot/doc/java/deprecated-list.html
new file mode 100644
index 00000000..036b9672
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/deprecated-list.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Deprecated List (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Deprecated List (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li class="navBarCell1Rev">Deprecated</li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
+<li><a href="deprecated-list.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Deprecated API" class="title">Deprecated API</h1>
+<h2 title="Contents">Contents</h2>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li class="navBarCell1Rev">Deprecated</li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
+<li><a href="deprecated-list.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/help-doc.html b/js/vendor/bigshot/doc/java/help-doc.html
new file mode 100644
index 00000000..dc42a524
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/help-doc.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>API Help (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="API Help (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li class="navBarCell1Rev">Help</li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
+<li><a href="help-doc.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">How This API Document Is Organized</h1>
+<div class="subTitle">This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.</div>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+<h2>Overview</h2>
+<p>The <a href="overview-summary.html">Overview</a> page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.</p>
+</li>
+<li class="blockList">
+<h2>Package</h2>
+<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:</p>
+<ul>
+<li>Interfaces (italic)</li>
+<li>Classes</li>
+<li>Enums</li>
+<li>Exceptions</li>
+<li>Errors</li>
+<li>Annotation Types</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Class/Interface</h2>
+<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:</p>
+<ul>
+<li>Class inheritance diagram</li>
+<li>Direct Subclasses</li>
+<li>All Known Subinterfaces</li>
+<li>All Known Implementing Classes</li>
+<li>Class/interface declaration</li>
+<li>Class/interface description</li>
+</ul>
+<ul>
+<li>Nested Class Summary</li>
+<li>Field Summary</li>
+<li>Constructor Summary</li>
+<li>Method Summary</li>
+</ul>
+<ul>
+<li>Field Detail</li>
+<li>Constructor Detail</li>
+<li>Method Detail</li>
+</ul>
+<p>Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>
+</li>
+<li class="blockList">
+<h2>Annotation Type</h2>
+<p>Each annotation type has its own separate page with the following sections:</p>
+<ul>
+<li>Annotation Type declaration</li>
+<li>Annotation Type description</li>
+<li>Required Element Summary</li>
+<li>Optional Element Summary</li>
+<li>Element Detail</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Enum</h2>
+<p>Each enum has its own separate page with the following sections:</p>
+<ul>
+<li>Enum declaration</li>
+<li>Enum description</li>
+<li>Enum Constant Summary</li>
+<li>Enum Constant Detail</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Tree (Class Hierarchy)</h2>
+<p>There is a <a href="overview-tree.html">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.</p>
+<ul>
+<li>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.</li>
+<li>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Deprecated API</h2>
+<p>The <a href="deprecated-list.html">Deprecated API</a> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</p>
+</li>
+<li class="blockList">
+<h2>Index</h2>
+<p>The <a href="index-all.html">Index</a> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</p>
+</li>
+<li class="blockList">
+<h2>Prev/Next</h2>
+<p>These links take you to the next or previous class, interface, package, or related page.</p>
+</li>
+<li class="blockList">
+<h2>Frames/No Frames</h2>
+<p>These links show and hide the HTML frames. All pages are available with or without frames.</p>
+</li>
+<li class="blockList">
+<h2>All Classes</h2>
+<p>The <a href="allclasses-noframe.html">All Classes</a> link shows all classes and interfaces except non-static nested types.</p>
+</li>
+<li class="blockList">
+<h2>Serialized Form</h2>
+<p>Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.</p>
+</li>
+<li class="blockList">
+<h2>Constant Field Values</h2>
+<p>The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.</p>
+</li>
+</ul>
+<em>This help file applies to API documentation generated using the standard doclet.</em></div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li class="navBarCell1Rev">Help</li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
+<li><a href="help-doc.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/index-all.html b/js/vendor/bigshot/doc/java/index-all.html
new file mode 100644
index 00000000..61e81d28
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/index-all.html
@@ -0,0 +1,1833 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Index (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="./stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Index (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="./overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="./overview-tree.html">Tree</a></li>
+<li><a href="./deprecated-list.html">Deprecated</a></li>
+<li class="navBarCell1Rev">Index</li>
+<li><a href="./help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="./index.html?index-all.html" target="_top">Frames</a></li>
+<li><a href="index-all.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="./allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="contentContainer"><a href="#_A_">A</a>&nbsp;<a href="#_B_">B</a>&nbsp;<a href="#_C_">C</a>&nbsp;<a href="#_D_">D</a>&nbsp;<a href="#_E_">E</a>&nbsp;<a href="#_F_">F</a>&nbsp;<a href="#_G_">G</a>&nbsp;<a href="#_H_">H</a>&nbsp;<a href="#_I_">I</a>&nbsp;<a href="#_J_">J</a>&nbsp;<a href="#_L_">L</a>&nbsp;<a href="#_M_">M</a>&nbsp;<a href="#_N_">N</a>&nbsp;<a href="#_O_">O</a>&nbsp;<a href="#_P_">P</a>&nbsp;<a href="#_R_">R</a>&nbsp;<a href="#_S_">S</a>&nbsp;<a href="#_T_">T</a>&nbsp;<a href="#_U_">U</a>&nbsp;<a href="#_V_">V</a>&nbsp;<a href="#_W_">W</a>&nbsp;<a href="#_X_">X</a>&nbsp;<a href="#_Y_">Y</a>&nbsp;<a href="#_Z_">Z</a>&nbsp;<a name="_A_">
+<!-- -->
+</a>
+<h2 class="title">A</h2>
+<dl>
+<dt><a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot"><span class="strong">AbstractCubicTransform</span></a>&lt;<a href="./bigshot/AbstractCubicTransform.html" title="type parameter in AbstractCubicTransform">Derived</a> extends <a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&gt; - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Transforms an image map to a set of rectilinear images.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#AbstractCubicTransform()">AbstractCubicTransform()</a></span> - Constructor for class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Creates a new transform instance.</div>
+</dd>
+<dt><a href="./bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot"><span class="strong">AbstractCubicTransform.TransformedFace</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">A delayed-evaluated Image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.TransformedFace.html#AbstractCubicTransform.TransformedFace(bigshot.AbstractCubicTransform, java.lang.String, double, double)">AbstractCubicTransform.TransformedFace(AbstractCubicTransform, String, double, double)</a></span> - Constructor for class bigshot.<a href="./bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="./bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot"><span class="strong">AbstractSphericalCubicTransform</span></a>&lt;<a href="./bigshot/AbstractSphericalCubicTransform.html" title="type parameter in AbstractSphericalCubicTransform">Derived</a> extends <a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a>&gt; - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Base class for transforms where the transformation to image map space can be expressed in
+ terms of the two angles theta and phi of the sight ray.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractSphericalCubicTransform.html#AbstractSphericalCubicTransform()">AbstractSphericalCubicTransform()</a></span> - Constructor for class bigshot.<a href="./bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></dt>
+<dd>
+<div class="block">Creates a new transform instance.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#addAlpha()">addAlpha()</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Adds an alpha channel to this image and fills it with
+ the maximum value.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#alphaValue(int, int, int)">alphaValue(int, int, int)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Sets the alpha value for a given pixel.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#alphaValue(int, int)">alphaValue(int, int)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Gets the alpha pixel color value for a given pixel.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#apply(bigshot.AbstractCubicTransform)">apply(AbstractCubicTransform)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Inserts the image into the panorama.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractSphericalCubicTransform.html#arcSample(int, double, double, int[])">arcSample(int, double, double, int[])</a></span> - Method in class bigshot.<a href="./bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="_B_">
+<!-- -->
+</a>
+<h2 class="title">B</h2>
+<dl>
+<dt><a href="./bigshot/package-summary.html">bigshot</a> - package bigshot</dt>
+<dd>
+<div class="block">Contains classes for image transformation, as well as image pyramid and VR cube generation.</div>
+</dd>
+<dt><a href="./bigshot/mp/package-summary.html">bigshot.mp</a> - package bigshot.mp</dt>
+<dd>
+<div class="block">Contains classes for multi core processing.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#BOTTOM_CAP">BOTTOM_CAP</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>bottom-cap</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#bottomCap">bottomCap</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in any missing bottom-section.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#bottomCap(boolean)">bottomCap(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#bottomCap(java.lang.Boolean)">bottomCap(Boolean)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#bottomCap(boolean)">bottomCap(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#bottomCap()">bottomCap()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</dd>
+</dl>
+<a name="_C_">
+<!-- -->
+</a>
+<h2 class="title">C</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/mp/ChildCallable.html#call()">call()</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/ChildCallable.html" title="class in bigshot.mp">ChildCallable</a></dt>
+<dd>
+<div class="block">Tucks away the current thread name, sets it to the
+ creating thread name, calls <a href="./bigshot/mp/ChildCallable.html#execute()"><code>ChildCallable.execute()</code></a>,
+ then restores the old thread name.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/ParallelFor.html#call(int, int)">call(int, int)</a></span> - Method in interface bigshot.mp.<a href="./bigshot/mp/ParallelFor.html" title="interface in bigshot.mp">ParallelFor</a></dt>
+<dd>
+<div class="block">Execute a for loop between a and b, like <code>for (int i = a; i &lt; b; ++i) { ...</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.TransformedFace.html#cancel(boolean)">cancel(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="./bigshot/mp/ChildCallable.html" title="class in bigshot.mp"><span class="strong">ChildCallable</span></a>&lt;<a href="./bigshot/mp/ChildCallable.html" title="type parameter in ChildCallable">T</a>&gt; - Class in <a href="./bigshot/mp/package-summary.html">bigshot.mp</a></dt>
+<dd>
+<div class="block">Callable that sets the name of the executing thread to the
+ name of the thread used to create the callable.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/ChildCallable.html#ChildCallable()">ChildCallable()</a></span> - Constructor for class bigshot.mp.<a href="./bigshot/mp/ChildCallable.html" title="class in bigshot.mp">ChildCallable</a></dt>
+<dd>
+<div class="block">Creates a new child callable and captures the name
+ of the creating thread.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/MathUtil.html#clamp(int, int, int)">clamp(int, int, int)</a></span> - Static method in class bigshot.<a href="./bigshot/MathUtil.html" title="class in bigshot">MathUtil</a></dt>
+<dd>
+<div class="block">Clamps the value between two endpoints.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSet.html#complete()">complete()</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a></dt>
+<dd>
+<div class="block">Completes all submitted callables and returns the results as <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><code>Future</code></a>s.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#COMPONENT_MAX_VALUE">COMPONENT_MAX_VALUE</a></span> - Static variable in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">The maximum value a component can have.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#componentValue(int, int, int[])">componentValue(int, int, int[])</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Gets the red, green and blue values for a given pixel.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#componentValue(int, int, int, int, int)">componentValue(int, int, int, int, int)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Sets the red, green and blue values for a given pixel.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#componentValue(int, int, int)">componentValue(int, int, int)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Helper function to get the component with a given bitshift
+ from a pixel.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/DefaultWorkSetFactory.html#create()">create()</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp">DefaultWorkSetFactory</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSet.html#create()">create()</a></span> - Static method in class bigshot.mp.<a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a></dt>
+<dd>
+<div class="block">Creates a new work set.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSetFactory.html#create()">create()</a></span> - Method in interface bigshot.mp.<a href="./bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a></dt>
+<dd>
+<div class="block">Create a new work set with the given result type.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#cross(bigshot.Point3D)">cross(Point3D)</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Computes the cross product of this vector and another.</div>
+</dd>
+<dt><a href="./bigshot/CylindricalToCubic.html" title="class in bigshot"><span class="strong">CylindricalToCubic</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Transforms an cylindrical image map to rectilinear images.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/CylindricalToCubic.html#CylindricalToCubic()">CylindricalToCubic()</a></span> - Constructor for class bigshot.<a href="./bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></dt>
+<dd>
+<div class="block">Creates a new transform instance.</div>
+</dd>
+</dl>
+<a name="_D_">
+<!-- -->
+</a>
+<h2 class="title">D</h2>
+<dl>
+<dt><a href="./bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp"><span class="strong">DefaultWorkSetFactory</span></a> - Class in <a href="./bigshot/mp/package-summary.html">bigshot.mp</a></dt>
+<dd>
+<div class="block">Default implementation of the <a href="./bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp"><code>WorkSetFactory</code></a> interface.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/DefaultWorkSetFactory.html#DefaultWorkSetFactory()">DefaultWorkSetFactory()</a></span> - Constructor for class bigshot.mp.<a href="./bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp">DefaultWorkSetFactory</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#DESCRIPTOR_FORMAT">DESCRIPTOR_FORMAT</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>descriptor-format</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#descriptorFormat(bigshot.ImagePyramidParameters.DescriptorFormat)">descriptorFormat(ImagePyramidParameters.DescriptorFormat)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#descriptorFormat()">descriptorFormat()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/DefaultWorkSetFactory.html#dispose()">dispose()</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp">DefaultWorkSetFactory</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSetFactory.html#dispose()">dispose()</a></span> - Method in interface bigshot.mp.<a href="./bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a></dt>
+<dd>
+<div class="block">Dispose this factory.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#dot(bigshot.Point3D)">dot(Point3D)</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Computes the dot product of this vector and another.</div>
+</dd>
+</dl>
+<a name="_E_">
+<!-- -->
+</a>
+<h2 class="title">E</h2>
+<dl>
+<dt><a href="./bigshot/EquirectangularToCubic.html" title="class in bigshot"><span class="strong">EquirectangularToCubic</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Transforms an equirectangular image map to rectilinear images.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/EquirectangularToCubic.html#EquirectangularToCubic()">EquirectangularToCubic()</a></span> - Constructor for class bigshot.<a href="./bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></dt>
+<dd>
+<div class="block">Creates a new transform instance.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/ChildCallable.html#execute()">execute()</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/ChildCallable.html" title="class in bigshot.mp">ChildCallable</a></dt>
+<dd>
+<div class="block">Override in subclasses.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSet.html#execute(java.util.concurrent.Callable)">execute(Callable&lt;Result&gt;)</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a></dt>
+<dd>
+<div class="block">Submits a callable for execution.</div>
+</dd>
+</dl>
+<a name="_F_">
+<!-- -->
+</a>
+<h2 class="title">F</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/FastTrigInverse.html#f(double)">f(double)</a></span> - Method in class bigshot.<a href="./bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></dt>
+<dd>
+<div class="block">Apply the function.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/FastTrigInverse.FastAcos.html#f(double)">f(double)</a></span> - Method in class bigshot.<a href="./bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot">FastTrigInverse.FastAcos</a></dt>
+<dd>
+<div class="block">Computes an approximation to arccos(v)</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/FastTrigInverse.FastAtan.html#f(double)">f(double)</a></span> - Method in class bigshot.<a href="./bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot">FastTrigInverse.FastAtan</a></dt>
+<dd>
+<div class="block">Computes an approximation to arctan(v)</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#FACE_SIZE">FACE_SIZE</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>face-size</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#faceSize(java.lang.Integer)">faceSize(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The size of each cube map face.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#faceSize(int)">faceSize(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The size of each cube map face.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#faceSize()">faceSize()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The size of each cube map face.</div>
+</dd>
+<dt><a href="./bigshot/FastTrigInverse.html" title="class in bigshot"><span class="strong">FastTrigInverse</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Fast inverse trigonometric functions based on lookup tables and
+ linear interpolation between lookup table values.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/FastTrigInverse.html#FastTrigInverse(int)">FastTrigInverse(int)</a></span> - Constructor for class bigshot.<a href="./bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></dt>
+<dd>
+<div class="block">Creates a new function object.</div>
+</dd>
+<dt><a href="./bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot"><span class="strong">FastTrigInverse.FastAcos</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Fast inverse-cosine.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/FastTrigInverse.FastAcos.html#FastTrigInverse.FastAcos(int)">FastTrigInverse.FastAcos(int)</a></span> - Constructor for class bigshot.<a href="./bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot">FastTrigInverse.FastAcos</a></dt>
+<dd>
+<div class="block">Creates a new fast arccos object.</div>
+</dd>
+<dt><a href="./bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot"><span class="strong">FastTrigInverse.FastAtan</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Fast inverse-cosine.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/FastTrigInverse.FastAtan.html#FastTrigInverse.FastAtan(int)">FastTrigInverse.FastAtan(int)</a></span> - Constructor for class bigshot.<a href="./bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot">FastTrigInverse.FastAtan</a></dt>
+<dd>
+<div class="block">Creates a new fast arccos object.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#FOLDER_LAYOUT">FOLDER_LAYOUT</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>folder-layout</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#folderLayout(bigshot.ImagePyramidParameters.FolderLayout)">folderLayout(ImagePyramidParameters.FolderLayout)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#folderLayout()">folderLayout()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#FORMAT">FORMAT</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>format</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#format(bigshot.ImagePyramidParameters.Format)">format(ImagePyramidParameters.Format)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">A folder structure.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#format()">format()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">A folder structure.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#FOV">FOV</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>fov</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#fov(java.lang.Float)">fov(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output field of view when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#fov(float)">fov(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output field of view when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#fov()">fov()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output field of view when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#fromBuffered(java.awt.image.BufferedImage)">fromBuffered(BufferedImage)</a></span> - Static method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Creates an image without alpha channel from a <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image"><code>BufferedImage</code></a>, which is assumed to be
+ of type <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_RGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_RGB</code></a> or <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_ARGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_ARGB</code></a>.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#fromBuffered(java.awt.image.BufferedImage, boolean)">fromBuffered(BufferedImage, boolean)</a></span> - Static method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Creates an image from a <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image"><code>BufferedImage</code></a>, which is assumed to be
+ of type <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_RGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_RGB</code></a> or <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_ARGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_ARGB</code></a>.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#fromHuginPto(java.io.File)">fromHuginPto(File)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Loads projection parameters from a Hugin <code>.pto</code> file.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">fromHuginPtoParameters(int, int, double, int, int, int, int)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets the required projection parameters from the Hugin <code>.pto</code> parameters.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/CylindricalToCubic.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">fromHuginPtoParameters(int, int, double, int, int, int, int)</a></span> - Method in class bigshot.<a href="./bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/EquirectangularToCubic.html#fromHuginPtoParameters(int, int, double, int, int, int, int)">fromHuginPtoParameters(int, int, double, int, int, int, int)</a></span> - Method in class bigshot.<a href="./bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="_G_">
+<!-- -->
+</a>
+<h2 class="title">G</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.TransformedFace.html#get()">get()</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.TransformedFace.html#get(long, java.util.concurrent.TimeUnit)">get(long, TimeUnit)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#getName()">getName()</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Gets the name of the image, which can be the file name or other
+ identifying key.</div>
+</dd>
+</dl>
+<a name="_H_">
+<!-- -->
+</a>
+<h2 class="title">H</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/Image.html#hasAlpha()">hasAlpha()</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Returns true if this image has an associated alpha channel.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#height">height</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Width in pixels of the output image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#height()">height()</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Image height in pixels.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#horizontalWrap">horizontalWrap</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">True iff the image map wraps horizontally.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#horizontalWrap(boolean)">horizontalWrap(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets whether the input image wraps around horizontally.</div>
+</dd>
+</dl>
+<a name="_I_">
+<!-- -->
+</a>
+<h2 class="title">I</h2>
+<dl>
+<dt><a href="./bigshot/Image.html" title="class in bigshot"><span class="strong">Image</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">A 30-bit (10 per channel) RGB image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#Image(int, int)">Image(int, int)</a></span> - Constructor for class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Creates an empty (all-black) image with the given width and height.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#Image(int, int, int[])">Image(int, int, int[])</a></span> - Constructor for class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Creates an image with the given data.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#Image(int, int, int[], byte[])">Image(int, int, int[], byte[])</a></span> - Constructor for class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Creates an image with the given data.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#image(bigshot.Image)">image(Image)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets the image to insert.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#IMAGE_FORMAT">IMAGE_FORMAT</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>image-format</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#imageFile()">imageFile()</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Gets the image file to insert.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#imageFile(java.lang.String)">imageFile(String)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets an image file to insert.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#imageFile(java.io.File)">imageFile(File)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets an image file to insert.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#imageFormat(bigshot.ImagePyramidParameters.ImageFormat)">imageFormat(ImagePyramidParameters.ImageFormat)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Create PNG files.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#imageFormat()">imageFormat()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Create PNG files.</div>
+</dd>
+<dt><a href="./bigshot/ImageInsert.html" title="class in bigshot"><span class="strong">ImageInsert</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">An image that is projected into an existing panorama.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#ImageInsert()">ImageInsert()</a></span> - Constructor for class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Creates a new image insert.</div>
+</dd>
+<dt><a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot"><span class="strong">ImagePyramidParameters</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">A typesafe interface to the parameters for MakeImagePyramid.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#ImagePyramidParameters()">ImagePyramidParameters()</a></span> - Constructor for class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Creates an empty parameter set.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#ImagePyramidParameters(java.util.Map)">ImagePyramidParameters(Map&lt;String, String&gt;)</a></span> - Constructor for class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Creates a parameter set by copying another set.</div>
+</dd>
+<dt><a href="./bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.DescriptorFormat</span></a> - Enum in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">The descriptor format for the output pyramid.</div>
+</dd>
+<dt><a href="./bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.FolderLayout</span></a> - Enum in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">The folder structure of the output pyramid.</div>
+</dd>
+<dt><a href="./bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.Format</span></a> - Enum in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">The output format for the image pyramid.</div>
+</dd>
+<dt><a href="./bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.ImageFormat</span></a> - Enum in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Image format for the tiles and everything.</div>
+</dd>
+<dt><a href="./bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.LevelNumbering</span></a> - Enum in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">If set to "invert", inverts the level numbering.</div>
+</dd>
+<dt><a href="./bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.Preset</span></a> - Enum in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">A preset set of parameters.</div>
+</dd>
+<dt><a href="./bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.Transform</span></a> - Enum in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">The input image transform</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#input">input</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">The input image map.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#input(bigshot.Image)">input(Image)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets the image map.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#input(java.io.File)">input(File)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Loads the image map from a file.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#input()">input()</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Gets the current input panorama image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/EquirectangularToCubic.html#input(bigshot.Image)">input(Image)</a></span> - Method in class bigshot.<a href="./bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#INPUT_HEIGHT">INPUT_HEIGHT</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>input-height</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#INPUT_HFOV">INPUT_HFOV</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>input-hfov</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#INPUT_HORIZON">INPUT_HORIZON</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>input-horizon</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#INPUT_VFOV">INPUT_VFOV</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>input-vfov</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#INPUT_WIDTH">INPUT_WIDTH</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>input-width</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputHeight(java.lang.Integer)">inputHeight(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Height of the source image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputHeight(int)">inputHeight(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Height of the source image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputHeight()">inputHeight()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Height of the source image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#inputHfov">inputHfov</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Horizontal field of view of the image map, in radians.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#inputHfov(double)">inputHfov(double)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets the horizontal field of view of the input image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#inputHfov()">inputHfov()</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Return the input horizontal field of view, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputHfov(java.lang.Float)">inputHfov(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputHfov(float)">inputHfov(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputHfov()">inputHfov()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#inputHorizon">inputHorizon</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">The pixel row that is at the horizon.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#inputHorizon(int)">inputHorizon(int)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets y-coordinate of the horizon for the input image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputHorizon(java.lang.Integer)">inputHorizon(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputHorizon(int)">inputHorizon(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputHorizon()">inputHorizon()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#inputVfov">inputVfov</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Vertical field of view of the image map, in radians.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#inputVfov(double)">inputVfov(double)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets the vertical field of view of the input image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#inputVfov()">inputVfov()</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Return the input vertical field of view, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputVfov(java.lang.Float)">inputVfov(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputVfov(float)">inputVfov(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputVfov()">inputVfov()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputWidth(java.lang.Integer)">inputWidth(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Width of the source image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputWidth(int)">inputWidth(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Width of the source image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#inputWidth()">inputWidth()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Width of the source image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#insert(bigshot.Image)">insert(Image)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">insert(Image, Point3D, Point3D, Point3D)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Inserts an image into a panorama.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractSphericalCubicTransform.html#insert(bigshot.Image, bigshot.Point3D, bigshot.Point3D, bigshot.Point3D)">insert(Image, Point3D, Point3D, Point3D)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractSphericalCubicTransform.html#invTransformPoint(int, int, bigshot.Point2D)">invTransformPoint(int, int, Point2D)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></dt>
+<dd>
+<div class="block">Transforms an image map coordinate to a ray in 3d-space.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/CylindricalToCubic.html#invTransformPoint(int, int, bigshot.Point2D)">invTransformPoint(int, int, Point2D)</a></span> - Method in class bigshot.<a href="./bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/EquirectangularToCubic.html#invTransformPoint(int, int, bigshot.Point2D)">invTransformPoint(int, int, Point2D)</a></span> - Method in class bigshot.<a href="./bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.TransformedFace.html#isCancelled()">isCancelled()</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.TransformedFace.html#isDone()">isDone()</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot">AbstractCubicTransform.TransformedFace</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="_J_">
+<!-- -->
+</a>
+<h2 class="title">J</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#jitter">jitter</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Amount of jitter in the oversampling.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#jitter(double)">jitter(double)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Adds a random jitter to the sampling.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#JITTER">JITTER</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>jitter</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#jitter(java.lang.Float)">jitter(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#jitter(float)">jitter(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#jitter()">jitter()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSet.html#join()">join()</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a></dt>
+<dd>
+<div class="block">Completes all submitted callables, also in the calling thread if possible,
+ and returns the results.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#JPEG_QUALITY">JPEG_QUALITY</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>jpeg-quality</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#jpegQuality(java.lang.Float)">jpegQuality(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Jpeg output quality, between 0.0 and 1.0.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#jpegQuality(float)">jpegQuality(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Jpeg output quality, between 0.0 and 1.0.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#jpegQuality()">jpegQuality()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Jpeg output quality, between 0.0 and 1.0.</div>
+</dd>
+</dl>
+<a name="_L_">
+<!-- -->
+</a>
+<h2 class="title">L</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/Image.html#lerp(double, double, double)">lerp(double, double, double)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Helper function to linerarly interpolate between two values over
+ the interval [0, 1].</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#LEVEL_NUMBERING">LEVEL_NUMBERING</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>level-numbering</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#levelNumbering(bigshot.ImagePyramidParameters.LevelNumbering)">levelNumbering(ImagePyramidParameters.LevelNumbering)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Inverts the level numbering.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#levelNumbering()">levelNumbering()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Inverts the level numbering.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#LEVELS">LEVELS</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>levels</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#levels(java.lang.Integer)">levels(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Number of levels in the image pyramid.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#levels(int)">levels(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Number of levels in the image pyramid.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#levels()">levels()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Number of levels in the image pyramid.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/FastTrigInverse.html#lookup">lookup</a></span> - Variable in class bigshot.<a href="./bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></dt>
+<dd>
+<div class="block">The lookup table.</div>
+</dd>
+</dl>
+<a name="_M_">
+<!-- -->
+</a>
+<h2 class="title">M</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/MakeImagePyramid.html#main(java.lang.String[])">main(String[])</a></span> - Static method in class bigshot.<a href="./bigshot/MakeImagePyramid.html" title="class in bigshot">MakeImagePyramid</a></dt>
+<dd>
+<div class="block">Command line interface.</div>
+</dd>
+<dt><a href="./bigshot/MakeImagePyramid.html" title="class in bigshot"><span class="strong">MakeImagePyramid</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Command-line tool to creates the tiled image pyramids that are used by Bigshot.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/MakeImagePyramid.html#MakeImagePyramid()">MakeImagePyramid()</a></span> - Constructor for class bigshot.<a href="./bigshot/MakeImagePyramid.html" title="class in bigshot">MakeImagePyramid</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="./bigshot/MathUtil.html" title="class in bigshot"><span class="strong">MathUtil</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">Math utility functions.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#multiply(int, int, int, int)">multiply(int, int, int, int)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Scales all channels by <code>num / denom</code>.</div>
+</dd>
+</dl>
+<a name="_N_">
+<!-- -->
+</a>
+<h2 class="title">N</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/Point2D.html#norm()">norm()</a></span> - Method in class bigshot.<a href="./bigshot/Point2D.html" title="class in bigshot">Point2D</a></dt>
+<dd>
+<div class="block">The euclidean distance of the point to the origin.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#norm()">norm()</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">The euclidean distance of the point to the origin.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#norm2()">norm2()</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">The square of the euclidean distance of the point to the origin.</div>
+</dd>
+</dl>
+<a name="_O_">
+<!-- -->
+</a>
+<h2 class="title">O</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#offset(double, double, double)">offset(double, double, double)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets the initial transform offsets (used to level a bubble).</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#op">op</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Pitch offset of the bubble in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optBottomCap(boolean)">optBottomCap(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in the missing bottom-section of VR panoramas where the map doesn't go all the way to nadir.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optDescriptorFormat(bigshot.ImagePyramidParameters.DescriptorFormat)">optDescriptorFormat(ImagePyramidParameters.DescriptorFormat)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Outputs a descriptor compatible with Microsoft's Deep Zoom Image format.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optFaceSize(int)">optFaceSize(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The size of each cube map face.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optFolderLayout(bigshot.ImagePyramidParameters.FolderLayout)">optFolderLayout(ImagePyramidParameters.FolderLayout)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Outputs a folder layout compatible with Microsoft's Deep Zoom Image format.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optFormat(bigshot.ImagePyramidParameters.Format)">optFormat(ImagePyramidParameters.Format)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">A folder structure.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optFov(float)">optFov(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output field of view when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optImageFormat(bigshot.ImagePyramidParameters.ImageFormat)">optImageFormat(ImagePyramidParameters.ImageFormat)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Create PNG files.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optInputHeight(int)">optInputHeight(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Height of the source image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optInputHfov(float)">optInputHfov(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the horizontal field of view of the map image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optInputHorizon(int)">optInputHorizon(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the y-coordinate of the horizon in the map image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optInputVfov(float)">optInputVfov(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, the vertical field of view of the map image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optInputWidth(int)">optInputWidth(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Width of the source image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optJitter(float)">optJitter(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The random sampling jitter to use when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optJpegQuality(float)">optJpegQuality(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Jpeg output quality, between 0.0 and 1.0.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optLevelNumbering(bigshot.ImagePyramidParameters.LevelNumbering)">optLevelNumbering(ImagePyramidParameters.LevelNumbering)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Inverts the level numbering.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optLevels(int)">optLevels(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Number of levels in the image pyramid.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optOutputHeight(int)">optOutputHeight(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output image width when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optOutputWidth(int)">optOutputWidth(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output image width when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optOverlap(int)">optOverlap(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Number of pixels overlap between tiles.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optOversampling(int)">optOversampling(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optPitch(float)">optPitch(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optPitchOffset(float)">optPitchOffset(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optPosterSize(int)">optPosterSize(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optPreset(bigshot.ImagePyramidParameters.Preset)">optPreset(ImagePyramidParameters.Preset)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optRoll(float)">optRoll(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optRollOffset(float)">optRollOffset(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optTileSize(int)">optTileSize(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Size in pixels of an image tile.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optTopCap(boolean)">optTopCap(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optTransform(bigshot.ImagePyramidParameters.Transform)">optTransform(ImagePyramidParameters.Transform)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Output a single rectilinear image</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optTransformPto(java.lang.String)">optTransformPto(String)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, sets the input-vfov, input-hfov and input-horizon parameters from a Hugin .pto file.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optWrapX(boolean)">optWrapX(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optYaw(float)">optYaw(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#optYawOffset(float)">optYawOffset(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#or">or</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Roll offset of the bubble in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#OUTPUT_HEIGHT">OUTPUT_HEIGHT</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>output-height</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#OUTPUT_WIDTH">OUTPUT_WIDTH</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>output-width</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#outputHeight(java.lang.Integer)">outputHeight(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output image width when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#outputHeight(int)">outputHeight(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output image width when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#outputHeight()">outputHeight()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output image width when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#outputWidth(java.lang.Integer)">outputWidth(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output image width when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#outputWidth(int)">outputWidth(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output image width when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#outputWidth()">outputWidth()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The output image width when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#OVERLAP">OVERLAP</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>overlap</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#overlap(java.lang.Integer)">overlap(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Number of pixels overlap between tiles.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#overlap(int)">overlap(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Number of pixels overlap between tiles.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#overlap()">overlap()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Number of pixels overlap between tiles.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#oversampling">oversampling</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">The amount of oversampling done.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#oversampling(int)">oversampling(int)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">If greater than one, oversamples each output pixel using a
+ grid of <code>oversampling * oversampling</code> samples.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#OVERSAMPLING">OVERSAMPLING</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>oversampling</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#oversampling(java.lang.Integer)">oversampling(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#oversampling(int)">oversampling(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#oversampling()">oversampling()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The resolution, along each axis, of the oversampling grid when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#oy">oy</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Yaw offset of the bubble in degrees.</div>
+</dd>
+</dl>
+<a name="_P_">
+<!-- -->
+</a>
+<h2 class="title">P</h2>
+<dl>
+<dt><a href="./bigshot/mp/ParallelFor.html" title="interface in bigshot.mp"><span class="strong">ParallelFor</span></a>&lt;<a href="./bigshot/mp/ParallelFor.html" title="type parameter in ParallelFor">Result</a>&gt; - Interface in <a href="./bigshot/mp/package-summary.html">bigshot.mp</a></dt>
+<dd>
+<div class="block">Interface for parallel for-loops.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSet.html#parallelFor(int, int, bigshot.mp.ParallelFor)">parallelFor(int, int, ParallelFor&lt;Result&gt;)</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a></dt>
+<dd>
+<div class="block">Executes a parallel for in this work set.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#parseAngles(java.lang.String)">parseAngles(String)</a></span> - Static method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Parses a command-line parameter describing the image
+ insert.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#parseVectors(java.lang.String)">parseVectors(String)</a></span> - Static method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Parses a command-line parameter describing the image
+ insert.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSet.html#pfor(int, int, bigshot.mp.ParallelFor)">pfor(int, int, ParallelFor&lt;Result&gt;)</a></span> - Static method in class bigshot.mp.<a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a></dt>
+<dd>
+<div class="block">Convenience method to execute a parallel for in a work set.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#pitch">pitch</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Pitch of the center point of the output image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#pitch()">pitch()</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Gets the pitch of the center point of the image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#pitch(double)">pitch(double)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets the pitch of the center point of the image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#PITCH">PITCH</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>pitch</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#pitch(java.lang.Float)">pitch(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#pitch(float)">pitch(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#pitch()">pitch()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The pitch angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#PITCH_OFFSET">PITCH_OFFSET</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>pitch-offset</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#pitchOffset(java.lang.Float)">pitchOffset(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#pitchOffset(float)">pitchOffset(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#pitchOffset()">pitchOffset()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial pitch offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><a href="./bigshot/Point2D.html" title="class in bigshot"><span class="strong">Point2D</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">A mutable 2D point</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point2D.html#Point2D()">Point2D()</a></span> - Constructor for class bigshot.<a href="./bigshot/Point2D.html" title="class in bigshot">Point2D</a></dt>
+<dd>
+<div class="block">Creates a new 2d point with coordinates (0, 0).</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point2D.html#Point2D(double, double)">Point2D(double, double)</a></span> - Constructor for class bigshot.<a href="./bigshot/Point2D.html" title="class in bigshot">Point2D</a></dt>
+<dd>
+<div class="block">Creates a new 2d point with the given coordinates.</div>
+</dd>
+<dt><a href="./bigshot/Point3D.html" title="class in bigshot"><span class="strong">Point3D</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">A 3D point</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#Point3D()">Point3D()</a></span> - Constructor for class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Creates a new 3d point with coordinates (0, 0, 0).</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#Point3D(double, double, double)">Point3D(double, double, double)</a></span> - Constructor for class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Creates a new 3d point with the given coordinates.</div>
+</dd>
+<dt><a href="./bigshot/Point3DTransform.html" title="class in bigshot"><span class="strong">Point3DTransform</span></a> - Class in <a href="./bigshot/package-summary.html">bigshot</a></dt>
+<dd>
+<div class="block">A 3x3 matrix transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3DTransform.html#Point3DTransform()">Point3DTransform()</a></span> - Constructor for class bigshot.<a href="./bigshot/Point3DTransform.html" title="class in bigshot">Point3DTransform</a></dt>
+<dd>
+<div class="block">Creates a new transform and initializes it to the identity
+ transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#POSTER_SIZE">POSTER_SIZE</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>poster-size</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#posterSize(java.lang.Integer)">posterSize(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#posterSize(int)">posterSize(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#posterSize()">posterSize()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Size of the low-resolution preview image along the longest image dimension (width or height).</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3DTransform.html#prepend(double[][])">prepend(double[][])</a></span> - Method in class bigshot.<a href="./bigshot/Point3DTransform.html" title="class in bigshot">Point3DTransform</a></dt>
+<dd>
+<div class="block">Multiplies this transform from the left with another transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#PRESET">PRESET</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>preset</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#preset(bigshot.ImagePyramidParameters.Preset)">preset(ImagePyramidParameters.Preset)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#preset()">preset()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Preset for Deep Zoom cubemaps</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/MakeImagePyramid.html#process(java.io.File, java.io.File, bigshot.ImagePyramidParameters)">process(File, File, ImagePyramidParameters)</a></span> - Static method in class bigshot.<a href="./bigshot/MakeImagePyramid.html" title="class in bigshot">MakeImagePyramid</a></dt>
+<dd>
+<div class="block">Creates an image pyramid.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/MakeImagePyramid.html#process(java.io.File, java.io.File, bigshot.ImagePyramidParameters, java.util.Collection)">process(File, File, ImagePyramidParameters, Collection&lt;ImageInsert&gt;)</a></span> - Static method in class bigshot.<a href="./bigshot/MakeImagePyramid.html" title="class in bigshot">MakeImagePyramid</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#project(double)">project(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Projects the point by dividing the x and y coordinates by <code>z / f</code>.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#putIfEmpty(java.lang.String, java.lang.String)">putIfEmpty(String, String)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Sets the given parameter if it is not set.</div>
+</dd>
+</dl>
+<a name="_R_">
+<!-- -->
+</a>
+<h2 class="title">R</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/Image.html#read(java.io.File)">read(File)</a></span> - Static method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Reads an image without alpha from a file using java ImageIO.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#read(java.io.File, boolean)">read(File, boolean)</a></span> - Static method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Reads an image from a file using java ImageIO.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#readImage(java.io.File)">readImage(File)</a></span> - Static method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Convenience function to load an image from a file.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/CylindricalToCubic.html#readImage(java.io.File)">readImage(File)</a></span> - Static method in class bigshot.<a href="./bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></dt>
+<dd>
+<div class="block">Convenience function to load an image from a file.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/EquirectangularToCubic.html#readImage(java.io.File)">readImage(File)</a></span> - Static method in class bigshot.<a href="./bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></dt>
+<dd>
+<div class="block">Convenience function to load an image from a file.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#removeAlpha()">removeAlpha()</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Removes the alpha channel from this image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#roll">roll</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Roll of the output image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#roll()">roll()</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Gets the roll around the view axis (yaw and pitch)
+ of the image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#roll(double)">roll(double)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets the roll around the view axis (yaw and pitch)
+ of the image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#ROLL">ROLL</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>roll</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#roll(java.lang.Float)">roll(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#roll(float)">roll(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#roll()">roll()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The roll angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#ROLL_OFFSET">ROLL_OFFSET</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>roll-offset</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#rollOffset(java.lang.Float)">rollOffset(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#rollOffset(float)">rollOffset(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#rollOffset()">rollOffset()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial roll offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point2D.html#rotate(double)">rotate(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point2D.html" title="class in bigshot">Point2D</a></dt>
+<dd>
+<div class="block">Rotates the point around the origin.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#rotateX(double)">rotateX(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Rotates the point around the X-axis.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3DTransform.html#rotateX(double)">rotateX(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3DTransform.html" title="class in bigshot">Point3DTransform</a></dt>
+<dd>
+<div class="block">Prepends a rotation around the X axis.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#rotateY(double)">rotateY(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Rotates the point around the Y-axis.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3DTransform.html#rotateY(double)">rotateY(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3DTransform.html" title="class in bigshot">Point3DTransform</a></dt>
+<dd>
+<div class="block">Prepends a rotation around the Y axis.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#rotateZ(double)">rotateZ(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Rotates the point around the Z-axis.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3DTransform.html#rotateZ(double)">rotateZ(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3DTransform.html" title="class in bigshot">Point3DTransform</a></dt>
+<dd>
+<div class="block">Prepends a rotation around the Z axis.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/DefaultWorkSetFactory.html#run()">run()</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp">DefaultWorkSetFactory</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="_S_">
+<!-- -->
+</a>
+<h2 class="title">S</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/Image.html#sample(double, double, int)">sample(double, double, int)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Samples a linearly interpolated channel value.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#sample(double, double)">sample(double, double)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Computes a packed 30-bit interpolated value for all channels at a given point</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#sampleAlpha(double, double)">sampleAlpha(double, double)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Samples a linearly interpolated alpha value.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#sampleComponents(double, double, int[])">sampleComponents(double, double, int[])</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Computes a linearly interpolated value for all channels at a given point</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point2D.html#scale(double)">scale(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point2D.html" title="class in bigshot">Point2D</a></dt>
+<dd>
+<div class="block">Scales the point relative to the origin.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#scale(double)">scale(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Scales the point relative to the origin.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSet.html#setFactory(bigshot.mp.WorkSetFactory)">setFactory(WorkSetFactory)</a></span> - Static method in class bigshot.mp.<a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a></dt>
+<dd>
+<div class="block">Set the factory implementation to use.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#setName(java.lang.String)">setName(String)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Sets the name of the image, which can be the file name or other
+ identifying key.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#size(int, int)">size(int, int)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets the output image size in pixels.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/FastTrigInverse.html#step">step</a></span> - Variable in class bigshot.<a href="./bigshot/FastTrigInverse.html" title="class in bigshot">FastTrigInverse</a></dt>
+<dd>
+<div class="block">The interval between two input values in the lookup table.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/DefaultWorkSetFactory.html#submit(java.util.concurrent.Callable)">submit(Callable&lt;T&gt;)</a></span> - Method in class bigshot.mp.<a href="./bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp">DefaultWorkSetFactory</a></dt>
+<dd>&nbsp;</dd>
+</dl>
+<a name="_T_">
+<!-- -->
+</a>
+<h2 class="title">T</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#TILE_SIZE">TILE_SIZE</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>tile-size</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#tileSize(java.lang.Integer)">tileSize(Integer)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Size in pixels of an image tile.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#tileSize(int)">tileSize(int)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Size in pixels of an image tile.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#tileSize()">tileSize()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Size in pixels of an image tile.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#toBuffered()">toBuffered()</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Converts this image to a 24-bit per pixel <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true" title="class or interface in java.awt.image"><code>BufferedImage</code></a> with type
+ <a href="http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html?is-external=true#TYPE_INT_RGB" title="class or interface in java.awt.image"><code>BufferedImage.TYPE_INT_RGB</code></a>.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/MathUtil.html#toDeg(double)">toDeg(double)</a></span> - Static method in class bigshot.<a href="./bigshot/MathUtil.html" title="class in bigshot">MathUtil</a></dt>
+<dd>
+<div class="block">Converts radians to degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#TOP_CAP">TOP_CAP</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>top-cap</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#topCap">topCap</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in any missing top-section.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#topCap(boolean)">topCap(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#topCap(java.lang.Boolean)">topCap(Boolean)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#topCap(boolean)">topCap(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#topCap()">topCap()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Set to true to attempt to fill in the missing top-section of VR panoramas where the map doesn't go all the way to zenith.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#topLeft()">topLeft()</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Gets the <i>topLeft</i> vector, which is the bubble-space coordinate
+ of the top left corner of the image to be inserted.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#topLeft(bigshot.Point3D)">topLeft(Point3D)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets the <i>topLeft</i> vector, which is the bubble-space coordinate
+ of the top left corner of the image to be inserted.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/MathUtil.html#toRad(double)">toRad(double)</a></span> - Static method in class bigshot.<a href="./bigshot/MathUtil.html" title="class in bigshot">MathUtil</a></dt>
+<dd>
+<div class="block">Converts degrees to radians.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.DescriptorFormat.html#toString()">toString()</a></span> - Method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.FolderLayout.html#toString()">toString()</a></span> - Method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Format.html#toString()">toString()</a></span> - Method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.ImageFormat.html#toString()">toString()</a></span> - Method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.LevelNumbering.html#toString()">toString()</a></span> - Method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Preset.html#toString()">toString()</a></span> - Method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Transform.html#toString()">toString()</a></span> - Method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/Point2D.html#toString()">toString()</a></span> - Method in class bigshot.<a href="./bigshot/Point2D.html" title="class in bigshot">Point2D</a></dt>
+<dd>
+<div class="block">Formats the point on the form <code>[<i>x</i>, <i>y</i>]</code>.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#toString()">toString()</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Formats the point on the form <code>[<i>x</i>, <i>y</i>, <i>z</i>]</code>.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#transform()">transform()</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Performs the transformation.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractSphericalCubicTransform.html#transform()">transform()</a></span> - Method in class bigshot.<a href="./bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></dt>
+<dd>
+<div class="block">Performs the transformation.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#TRANSFORM">TRANSFORM</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>transform</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#transform(bigshot.ImagePyramidParameters.Transform)">transform(ImagePyramidParameters.Transform)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Output a single rectilinear image</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#transform()">transform()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Output a single rectilinear image</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3DTransform.html#transform(bigshot.Point3D)">transform(Point3D)</a></span> - Method in class bigshot.<a href="./bigshot/Point3DTransform.html" title="class in bigshot">Point3DTransform</a></dt>
+<dd>
+<div class="block">In-place transforms a 3d point.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#TRANSFORM_PTO">TRANSFORM_PTO</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>transform-pto</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractSphericalCubicTransform.html#transformPoint(double, double, bigshot.Point2D)">transformPoint(double, double, Point2D)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot">AbstractSphericalCubicTransform</a></dt>
+<dd>
+<div class="block">Transforms a ray in 3d-space, given by <code>theta</code> and <code>phi</code> to
+ image map coordinates.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/CylindricalToCubic.html#transformPoint(double, double, bigshot.Point2D)">transformPoint(double, double, Point2D)</a></span> - Method in class bigshot.<a href="./bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/EquirectangularToCubic.html#transformPoint(double, double, bigshot.Point2D)">transformPoint(double, double, Point2D)</a></span> - Method in class bigshot.<a href="./bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#transformPto(java.lang.String)">transformPto(String)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, sets the input-vfov, input-hfov and input-horizon parameters from a Hugin .pto file.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#transformPto()">transformPto()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">For the "*-facemap" transforms, sets the input-vfov, input-hfov and input-horizon parameters from a Hugin .pto file.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/CylindricalToCubic.html#transformToFace(bigshot.Image, int, double, double, double, double, double, double, double)">transformToFace(Image, int, double, double, double, double, double, double, double)</a></span> - Static method in class bigshot.<a href="./bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></dt>
+<dd>
+<div class="block">Transforms a cylindrical map to a rectilinear image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/CylindricalToCubic.html#transformToFace(java.io.File, java.io.File, int, double, double, double, double, double, double, double)">transformToFace(File, File, int, double, double, double, double, double, double, double)</a></span> - Static method in class bigshot.<a href="./bigshot/CylindricalToCubic.html" title="class in bigshot">CylindricalToCubic</a></dt>
+<dd>
+<div class="block">Transforms an cylindrical map to a rectilinear image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/EquirectangularToCubic.html#transformToFace(bigshot.Image, int, double, double, double, double, double, double, double)">transformToFace(Image, int, double, double, double, double, double, double, double)</a></span> - Static method in class bigshot.<a href="./bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></dt>
+<dd>
+<div class="block">Transforms an equirectangular map to a rectilinear image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/EquirectangularToCubic.html#transformToFace(java.io.File, java.io.File, int, double, double, double, double, double, double, double)">transformToFace(File, File, int, double, double, double, double, double, double, double)</a></span> - Static method in class bigshot.<a href="./bigshot/EquirectangularToCubic.html" title="class in bigshot">EquirectangularToCubic</a></dt>
+<dd>
+<div class="block">Transforms an equirectangular map to a rectilinear image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#transformToFaces()">transformToFaces()</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Transforms an image map to six VR cube faces.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#transformToFaces(bigshot.AbstractCubicTransform, java.io.File, int, double, double, double)">transformToFaces(AbstractCubicTransform, File, int, double, double, double)</a></span> - Static method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Executes a transformation six times to produce six VR cube faces.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point2D.html#translate2D(double, double)">translate2D(double, double)</a></span> - Method in class bigshot.<a href="./bigshot/Point2D.html" title="class in bigshot">Point2D</a></dt>
+<dd>
+<div class="block">Translates the point.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#translate3D(double, double, double)">translate3D(double, double, double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Translates the point.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#translateZ(double)">translateZ(double)</a></span> - Method in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">Translates the point along the z axis.</div>
+</dd>
+</dl>
+<a name="_U_">
+<!-- -->
+</a>
+<h2 class="title">U</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#u()">u()</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Gets the <i>u</i> vector, going from the top left corner to
+ the top right corner of the image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#u(bigshot.Point3D)">u(Point3D)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets the <i>u</i> vector, going from the top left corner to
+ the top right corner of the image.</div>
+</dd>
+</dl>
+<a name="_V_">
+<!-- -->
+</a>
+<h2 class="title">V</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#v()">v()</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Gets the <i>v</i> vector, going from the top left corner to
+ the bottom left corner of the image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#v(bigshot.Point3D)">v(Point3D)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets the <i>v</i> vector, going from the top left corner to
+ the bottom left corner of the image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#value(int, int)">value(int, int)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Gets the packed pixel color value for a given pixel.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#value(int, int, int)">value(int, int, int)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Sets the packed 30-bit value at a given point</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.DescriptorFormat.html#valueOf(java.lang.String)">valueOf(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.FolderLayout.html#valueOf(java.lang.String)">valueOf(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Format.html#valueOf(java.lang.String)">valueOf(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.ImageFormat.html#valueOf(java.lang.String)">valueOf(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.LevelNumbering.html#valueOf(java.lang.String)">valueOf(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Preset.html#valueOf(java.lang.String)">valueOf(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Transform.html#valueOf(java.lang.String)">valueOf(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.DescriptorFormat.html#valueOfKey(java.lang.String)">valueOfKey(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.FolderLayout.html#valueOfKey(java.lang.String)">valueOfKey(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Format.html#valueOfKey(java.lang.String)">valueOfKey(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.ImageFormat.html#valueOfKey(java.lang.String)">valueOfKey(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.LevelNumbering.html#valueOfKey(java.lang.String)">valueOfKey(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Preset.html#valueOfKey(java.lang.String)">valueOfKey(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Transform.html#valueOfKey(java.lang.String)">valueOfKey(String)</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.DescriptorFormat.html#values()">values()</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot">ImagePyramidParameters.DescriptorFormat</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.FolderLayout.html#values()">values()</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot">ImagePyramidParameters.FolderLayout</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Format.html#values()">values()</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot">ImagePyramidParameters.Format</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.ImageFormat.html#values()">values()</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot">ImagePyramidParameters.ImageFormat</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.LevelNumbering.html#values()">values()</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot">ImagePyramidParameters.LevelNumbering</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Preset.html#values()">values()</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot">ImagePyramidParameters.Preset</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.Transform.html#values()">values()</a></span> - Static method in enum bigshot.<a href="./bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot">ImagePyramidParameters.Transform</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#vfov">vfov</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Vertical field of view of the output image, in radians.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#vfov(double)">vfov(double)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets the vertical field of view.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#vfov()">vfov()</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Gets the number of vertical degrees the image occupies.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#vfov(double)">vfov(double)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets the number of degrees the image occupies.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#view(double, double, double)">view(double, double, double)</a></span> - Method in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Sets the view direction.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#view(double, double, double)">view(double, double, double)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets all view parameters at once.</div>
+</dd>
+</dl>
+<a name="_W_">
+<!-- -->
+</a>
+<h2 class="title">W</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#width">width</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Width in pixels of the output image.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#width()">width()</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Image width in pixels.</div>
+</dd>
+<dt><a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp"><span class="strong">WorkSet</span></a>&lt;<a href="./bigshot/mp/WorkSet.html" title="type parameter in WorkSet">Result</a>&gt; - Class in <a href="./bigshot/mp/package-summary.html">bigshot.mp</a></dt>
+<dd>
+<div class="block">A work set abstraction.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/mp/WorkSet.html#WorkSet()">WorkSet()</a></span> - Constructor for class bigshot.mp.<a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp">WorkSet</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="./bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp"><span class="strong">WorkSetFactory</span></a> - Interface in <a href="./bigshot/mp/package-summary.html">bigshot.mp</a></dt>
+<dd>
+<div class="block">Pluggable factory for <a href="./bigshot/mp/WorkSet.html" title="class in bigshot.mp"><code>WorkSet</code></a>s.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#WRAP_X">WRAP_X</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>wrap-x</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#wrapX(java.lang.Boolean)">wrapX(Boolean)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#wrapX(boolean)">wrapX(boolean)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#wrapX()">wrapX()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The number of levels in the pyramid to the number of times the image can be reduced by a factor of 2 before it no longer falls on tile boundaries.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/Image.html#write(java.io.File)">write(File)</a></span> - Method in class bigshot.<a href="./bigshot/Image.html" title="class in bigshot">Image</a></dt>
+<dd>
+<div class="block">Writes the image to a PNG file.</div>
+</dd>
+</dl>
+<a name="_X_">
+<!-- -->
+</a>
+<h2 class="title">X</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/Point2D.html#x">x</a></span> - Variable in class bigshot.<a href="./bigshot/Point2D.html" title="class in bigshot">Point2D</a></dt>
+<dd>
+<div class="block">The x-coordinate.</div>
+</dd>
+</dl>
+<a name="_Y_">
+<!-- -->
+</a>
+<h2 class="title">Y</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/Point2D.html#y">y</a></span> - Variable in class bigshot.<a href="./bigshot/Point2D.html" title="class in bigshot">Point2D</a></dt>
+<dd>
+<div class="block">The y-coordinate.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/AbstractCubicTransform.html#yaw">yaw</a></span> - Variable in class bigshot.<a href="./bigshot/AbstractCubicTransform.html" title="class in bigshot">AbstractCubicTransform</a></dt>
+<dd>
+<div class="block">Yaw of the center point of the output image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#yaw()">yaw()</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Gets the yaw of the center point of the image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImageInsert.html#yaw(double)">yaw(double)</a></span> - Method in class bigshot.<a href="./bigshot/ImageInsert.html" title="class in bigshot">ImageInsert</a></dt>
+<dd>
+<div class="block">Sets the yaw of the center point of the image, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#YAW">YAW</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>yaw</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#yaw(java.lang.Float)">yaw(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#yaw(float)">yaw(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#yaw()">yaw()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The yaw angle, in degrees, of the viewer when using the "face" transform.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#YAW_OFFSET">YAW_OFFSET</a></span> - Static variable in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">Lookup key for the <code>yaw-offset</code> parameter.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#yawOffset(java.lang.Float)">yawOffset(Float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#yawOffset(float)">yawOffset(float)</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+<dt><span class="strong"><a href="./bigshot/ImagePyramidParameters.html#yawOffset()">yawOffset()</a></span> - Method in class bigshot.<a href="./bigshot/ImagePyramidParameters.html" title="class in bigshot">ImagePyramidParameters</a></dt>
+<dd>
+<div class="block">The initial yaw offset to apply when using the "face" or "*-facemap" transforms, in degrees.</div>
+</dd>
+</dl>
+<a name="_Z_">
+<!-- -->
+</a>
+<h2 class="title">Z</h2>
+<dl>
+<dt><span class="strong"><a href="./bigshot/Point3D.html#z">z</a></span> - Variable in class bigshot.<a href="./bigshot/Point3D.html" title="class in bigshot">Point3D</a></dt>
+<dd>
+<div class="block">The z-coordinate.</div>
+</dd>
+</dl>
+<a href="#_A_">A</a>&nbsp;<a href="#_B_">B</a>&nbsp;<a href="#_C_">C</a>&nbsp;<a href="#_D_">D</a>&nbsp;<a href="#_E_">E</a>&nbsp;<a href="#_F_">F</a>&nbsp;<a href="#_G_">G</a>&nbsp;<a href="#_H_">H</a>&nbsp;<a href="#_I_">I</a>&nbsp;<a href="#_J_">J</a>&nbsp;<a href="#_L_">L</a>&nbsp;<a href="#_M_">M</a>&nbsp;<a href="#_N_">N</a>&nbsp;<a href="#_O_">O</a>&nbsp;<a href="#_P_">P</a>&nbsp;<a href="#_R_">R</a>&nbsp;<a href="#_S_">S</a>&nbsp;<a href="#_T_">T</a>&nbsp;<a href="#_U_">U</a>&nbsp;<a href="#_V_">V</a>&nbsp;<a href="#_W_">W</a>&nbsp;<a href="#_X_">X</a>&nbsp;<a href="#_Y_">Y</a>&nbsp;<a href="#_Z_">Z</a>&nbsp;</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="./overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="./overview-tree.html">Tree</a></li>
+<li><a href="./deprecated-list.html">Deprecated</a></li>
+<li class="navBarCell1Rev">Index</li>
+<li><a href="./help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="./index.html?index-all.html" target="_top">Frames</a></li>
+<li><a href="index-all.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="./allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/index.html b/js/vendor/bigshot/doc/java/index.html
new file mode 100644
index 00000000..fe558706
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/index.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Bigshot 2.0</title>
+<script type="text/javascript">
+ targetPage = "" + window.location.search;
+ if (targetPage != "" && targetPage != "undefined")
+ targetPage = targetPage.substring(1);
+ if (targetPage.indexOf(":") != -1)
+ targetPage = "undefined";
+ function loadFrames() {
+ if (targetPage != "" && targetPage != "undefined")
+ top.classFrame.location = top.targetPage;
+ }
+</script>
+</head>
+<frameset cols="20%,80%" title="Documentation frame" onload="top.loadFrames()">
+<frameset rows="30%,70%" title="Left frames" onload="top.loadFrames()">
+<frame src="overview-frame.html" name="packageListFrame" title="All Packages">
+<frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
+</frameset>
+<frame src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
+<noframes>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<h2>Frame Alert</h2>
+<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p>
+</noframes>
+</frameset>
+</html>
diff --git a/js/vendor/bigshot/doc/java/overview-frame.html b/js/vendor/bigshot/doc/java/overview-frame.html
new file mode 100644
index 00000000..51c27ef7
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/overview-frame.html
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Overview List (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+<body>
+<div class="indexHeader"><a href="allclasses-frame.html" target="packageFrame">All Classes</a></div>
+<div class="indexContainer">
+<h2 title="Packages">Packages</h2>
+<ul title="Packages">
+<li><a href="bigshot/package-frame.html" target="packageFrame">bigshot</a></li>
+<li><a href="bigshot/mp/package-frame.html" target="packageFrame">bigshot.mp</a></li>
+</ul>
+</div>
+<p>&nbsp;</p>
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/overview-summary.html b/js/vendor/bigshot/doc/java/overview-summary.html
new file mode 100644
index 00000000..9a28638b
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/overview-summary.html
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Overview (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Overview (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li class="navBarCell1Rev">Overview</li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
+<li><a href="overview-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Bigshot 2.0</h1>
+</div>
+<div class="header">
+<div class="subTitle">
+<div class="block">Bigshot is a library for zoomable images and zoomable VR panoramas in Javascript.</div>
+</div>
+<p>See: <a href="#overview_description">Description</a></p>
+</div>
+<div class="contentContainer">
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Packages table, listing packages, and an explanation">
+<caption><span>Packages</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="bigshot/package-summary.html">bigshot</a></td>
+<td class="colLast">
+<div class="block">Contains classes for image transformation, as well as image pyramid and VR cube generation.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="bigshot/mp/package-summary.html">bigshot.mp</a></td>
+<td class="colLast">
+<div class="block">Contains classes for multi core processing.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="footer"><a name="overview_description">
+<!-- -->
+</a>
+<div class="subTitle">
+<div class="block">Bigshot is a library for zoomable images and zoomable VR panoramas in Javascript.</div>
+</div>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li class="navBarCell1Rev">Overview</li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
+<li><a href="overview-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/overview-tree.html b/js/vendor/bigshot/doc/java/overview-tree.html
new file mode 100644
index 00000000..37d22f86
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/overview-tree.html
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Class Hierarchy (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Class Hierarchy (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
+<li><a href="overview-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For All Packages</h1>
+<span class="strong">Package Hierarchies:</span>
+<ul class="horizontal">
+<li><a href="bigshot/package-tree.html">bigshot</a>, </li>
+<li><a href="bigshot/mp/package-tree.html">bigshot.mp</a></li>
+</ul>
+</div>
+<div class="contentContainer">
+<h2 title="Class Hierarchy">Class Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="strong">Object</span></a>
+<ul>
+<li type="circle">bigshot.<a href="bigshot/AbstractCubicTransform.html" title="class in bigshot"><span class="strong">AbstractCubicTransform</span></a>&lt;Derived&gt;
+<ul>
+<li type="circle">bigshot.<a href="bigshot/AbstractSphericalCubicTransform.html" title="class in bigshot"><span class="strong">AbstractSphericalCubicTransform</span></a>&lt;Derived&gt;
+<ul>
+<li type="circle">bigshot.<a href="bigshot/CylindricalToCubic.html" title="class in bigshot"><span class="strong">CylindricalToCubic</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/EquirectangularToCubic.html" title="class in bigshot"><span class="strong">EquirectangularToCubic</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li type="circle">bigshot.<a href="bigshot/AbstractCubicTransform.TransformedFace.html" title="class in bigshot"><span class="strong">AbstractCubicTransform.TransformedFace</span></a> (implements java.util.concurrent.<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;V&gt;)</li>
+<li type="circle">java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/AbstractMap.html?is-external=true" title="class or interface in java.util"><span class="strong">AbstractMap</span></a>&lt;K,V&gt; (implements java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;K,V&gt;)
+<ul>
+<li type="circle">java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util"><span class="strong">TreeMap</span></a>&lt;K,V&gt; (implements java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, java.util.<a href="http://java.sun.com/javase/6/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;K,V&gt;, java.io.<a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<ul>
+<li type="circle">bigshot.<a href="bigshot/ImagePyramidParameters.html" title="class in bigshot"><span class="strong">ImagePyramidParameters</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li type="circle">bigshot.mp.<a href="bigshot/mp/ChildCallable.html" title="class in bigshot.mp"><span class="strong">ChildCallable</span></a>&lt;T&gt; (implements java.util.concurrent.<a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;)</li>
+<li type="circle">bigshot.mp.<a href="bigshot/mp/DefaultWorkSetFactory.html" title="class in bigshot.mp"><span class="strong">DefaultWorkSetFactory</span></a> (implements java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>, bigshot.mp.<a href="bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp">WorkSetFactory</a>)</li>
+<li type="circle">bigshot.<a href="bigshot/FastTrigInverse.html" title="class in bigshot"><span class="strong">FastTrigInverse</span></a>
+<ul>
+<li type="circle">bigshot.<a href="bigshot/FastTrigInverse.FastAcos.html" title="class in bigshot"><span class="strong">FastTrigInverse.FastAcos</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/FastTrigInverse.FastAtan.html" title="class in bigshot"><span class="strong">FastTrigInverse.FastAtan</span></a></li>
+</ul>
+</li>
+<li type="circle">bigshot.<a href="bigshot/Image.html" title="class in bigshot"><span class="strong">Image</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/ImageInsert.html" title="class in bigshot"><span class="strong">ImageInsert</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/MakeImagePyramid.html" title="class in bigshot"><span class="strong">MakeImagePyramid</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/MathUtil.html" title="class in bigshot"><span class="strong">MathUtil</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/Point2D.html" title="class in bigshot"><span class="strong">Point2D</span></a>
+<ul>
+<li type="circle">bigshot.<a href="bigshot/Point3D.html" title="class in bigshot"><span class="strong">Point3D</span></a></li>
+</ul>
+</li>
+<li type="circle">bigshot.<a href="bigshot/Point3DTransform.html" title="class in bigshot"><span class="strong">Point3DTransform</span></a></li>
+<li type="circle">bigshot.mp.<a href="bigshot/mp/WorkSet.html" title="class in bigshot.mp"><span class="strong">WorkSet</span></a>&lt;Result&gt;</li>
+</ul>
+</li>
+</ul>
+<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
+<ul>
+<li type="circle">bigshot.mp.<a href="bigshot/mp/ParallelFor.html" title="interface in bigshot.mp"><span class="strong">ParallelFor</span></a>&lt;Result&gt;</li>
+<li type="circle">bigshot.mp.<a href="bigshot/mp/WorkSetFactory.html" title="interface in bigshot.mp"><span class="strong">WorkSetFactory</span></a></li>
+</ul>
+<h2 title="Enum Hierarchy">Enum Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="strong">Object</span></a>
+<ul>
+<li type="circle">java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<ul>
+<li type="circle">bigshot.<a href="bigshot/ImagePyramidParameters.Preset.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.Preset</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/ImagePyramidParameters.Format.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.Format</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/ImagePyramidParameters.Transform.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.Transform</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/ImagePyramidParameters.ImageFormat.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.ImageFormat</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/ImagePyramidParameters.FolderLayout.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.FolderLayout</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/ImagePyramidParameters.DescriptorFormat.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.DescriptorFormat</span></a></li>
+<li type="circle">bigshot.<a href="bigshot/ImagePyramidParameters.LevelNumbering.html" title="enum in bigshot"><span class="strong">ImagePyramidParameters.LevelNumbering</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
+<li><a href="overview-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/package-list b/js/vendor/bigshot/doc/java/package-list
new file mode 100644
index 00000000..49fdd5ef
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/package-list
@@ -0,0 +1,2 @@
+bigshot
+bigshot.mp
diff --git a/js/vendor/bigshot/doc/java/resources/background.gif b/js/vendor/bigshot/doc/java/resources/background.gif
new file mode 100644
index 00000000..f471940f
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/resources/background.gif
Binary files differ
diff --git a/js/vendor/bigshot/doc/java/resources/tab.gif b/js/vendor/bigshot/doc/java/resources/tab.gif
new file mode 100644
index 00000000..1a73a83b
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/resources/tab.gif
Binary files differ
diff --git a/js/vendor/bigshot/doc/java/resources/titlebar.gif b/js/vendor/bigshot/doc/java/resources/titlebar.gif
new file mode 100644
index 00000000..17443b3e
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/resources/titlebar.gif
Binary files differ
diff --git a/js/vendor/bigshot/doc/java/resources/titlebar_end.gif b/js/vendor/bigshot/doc/java/resources/titlebar_end.gif
new file mode 100644
index 00000000..3ad78d46
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/resources/titlebar_end.gif
Binary files differ
diff --git a/js/vendor/bigshot/doc/java/serialized-form.html b/js/vendor/bigshot/doc/java/serialized-form.html
new file mode 100644
index 00000000..9fbc570e
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/serialized-form.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc (version 1.7.0_09) on Wed Oct 02 11:24:12 CEST 2013 -->
+<title>Serialized Form (Bigshot 2.0)</title>
+<meta name="date" content="2013-10-02">
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Serialized Form (Bigshot 2.0)";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?serialized-form.html" target="_top">Frames</a></li>
+<li><a href="serialized-form.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Serialized Form" class="title">Serialized Form</h1>
+</div>
+<div class="serializedFormContainer">
+<ul class="blockList">
+<li class="blockList">
+<h2 title="Package">Package&nbsp;bigshot</h2>
+<ul class="blockList">
+<li class="blockList"><a name="bigshot.ImagePyramidParameters">
+<!-- -->
+</a>
+<h3>Class <a href="bigshot/ImagePyramidParameters.html" title="class in bigshot">bigshot.ImagePyramidParameters</a> extends <a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; implements Serializable</h3>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="overview-summary.html">Overview</a></li>
+<li>Package</li>
+<li>Class</li>
+<li><a href="overview-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?serialized-form.html" target="_top">Frames</a></li>
+<li><a href="serialized-form.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/js/vendor/bigshot/doc/java/stylesheet.css b/js/vendor/bigshot/doc/java/stylesheet.css
new file mode 100644
index 00000000..0aeaa97f
--- /dev/null
+++ b/js/vendor/bigshot/doc/java/stylesheet.css
@@ -0,0 +1,474 @@
+/* Javadoc style sheet */
+/*
+Overall document style
+*/
+body {
+ background-color:#ffffff;
+ color:#353833;
+ font-family:Arial, Helvetica, sans-serif;
+ font-size:76%;
+ margin:0;
+}
+a:link, a:visited {
+ text-decoration:none;
+ color:#4c6b87;
+}
+a:hover, a:focus {
+ text-decoration:none;
+ color:#bb7a2a;
+}
+a:active {
+ text-decoration:none;
+ color:#4c6b87;
+}
+a[name] {
+ color:#353833;
+}
+a[name]:hover {
+ text-decoration:none;
+ color:#353833;
+}
+pre {
+ font-size:1.3em;
+}
+h1 {
+ font-size:1.8em;
+}
+h2 {
+ font-size:1.5em;
+}
+h3 {
+ font-size:1.4em;
+}
+h4 {
+ font-size:1.3em;
+}
+h5 {
+ font-size:1.2em;
+}
+h6 {
+ font-size:1.1em;
+}
+ul {
+ list-style-type:disc;
+}
+code, tt {
+ font-size:1.2em;
+}
+dt code {
+ font-size:1.2em;
+}
+table tr td dt code {
+ font-size:1.2em;
+ vertical-align:top;
+}
+sup {
+ font-size:.6em;
+}
+/*
+Document title and Copyright styles
+*/
+.clear {
+ clear:both;
+ height:0px;
+ overflow:hidden;
+}
+.aboutLanguage {
+ float:right;
+ padding:0px 21px;
+ font-size:.8em;
+ z-index:200;
+ margin-top:-7px;
+}
+.legalCopy {
+ margin-left:.5em;
+}
+.bar a, .bar a:link, .bar a:visited, .bar a:active {
+ color:#FFFFFF;
+ text-decoration:none;
+}
+.bar a:hover, .bar a:focus {
+ color:#bb7a2a;
+}
+.tab {
+ background-color:#0066FF;
+ background-image:url(resources/titlebar.gif);
+ background-position:left top;
+ background-repeat:no-repeat;
+ color:#ffffff;
+ padding:8px;
+ width:5em;
+ font-weight:bold;
+}
+/*
+Navigation bar styles
+*/
+.bar {
+ background-image:url(resources/background.gif);
+ background-repeat:repeat-x;
+ color:#FFFFFF;
+ padding:.8em .5em .4em .8em;
+ height:auto;/*height:1.8em;*/
+ font-size:1em;
+ margin:0;
+}
+.topNav {
+ background-image:url(resources/background.gif);
+ background-repeat:repeat-x;
+ color:#FFFFFF;
+ float:left;
+ padding:0;
+ width:100%;
+ clear:right;
+ height:2.8em;
+ padding-top:10px;
+ overflow:hidden;
+}
+.bottomNav {
+ margin-top:10px;
+ background-image:url(resources/background.gif);
+ background-repeat:repeat-x;
+ color:#FFFFFF;
+ float:left;
+ padding:0;
+ width:100%;
+ clear:right;
+ height:2.8em;
+ padding-top:10px;
+ overflow:hidden;
+}
+.subNav {
+ background-color:#dee3e9;
+ border-bottom:1px solid #9eadc0;
+ float:left;
+ width:100%;
+ overflow:hidden;
+}
+.subNav div {
+ clear:left;
+ float:left;
+ padding:0 0 5px 6px;
+}
+ul.navList, ul.subNavList {
+ float:left;
+ margin:0 25px 0 0;
+ padding:0;
+}
+ul.navList li{
+ list-style:none;
+ float:left;
+ padding:3px 6px;
+}
+ul.subNavList li{
+ list-style:none;
+ float:left;
+ font-size:90%;
+}
+.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
+ color:#FFFFFF;
+ text-decoration:none;
+}
+.topNav a:hover, .bottomNav a:hover {
+ text-decoration:none;
+ color:#bb7a2a;
+}
+.navBarCell1Rev {
+ background-image:url(resources/tab.gif);
+ background-color:#a88834;
+ color:#FFFFFF;
+ margin: auto 5px;
+ border:1px solid #c9aa44;
+}
+/*
+Page header and footer styles
+*/
+.header, .footer {
+ clear:both;
+ margin:0 20px;
+ padding:5px 0 0 0;
+}
+.indexHeader {
+ margin:10px;
+ position:relative;
+}
+.indexHeader h1 {
+ font-size:1.3em;
+}
+.title {
+ color:#2c4557;
+ margin:10px 0;
+}
+.subTitle {
+ margin:5px 0 0 0;
+}
+.header ul {
+ margin:0 0 25px 0;
+ padding:0;
+}
+.footer ul {
+ margin:20px 0 5px 0;
+}
+.header ul li, .footer ul li {
+ list-style:none;
+ font-size:1.2em;
+}
+/*
+Heading styles
+*/
+div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
+ background-color:#dee3e9;
+ border-top:1px solid #9eadc0;
+ border-bottom:1px solid #9eadc0;
+ margin:0 0 6px -8px;
+ padding:2px 5px;
+}
+ul.blockList ul.blockList ul.blockList li.blockList h3 {
+ background-color:#dee3e9;
+ border-top:1px solid #9eadc0;
+ border-bottom:1px solid #9eadc0;
+ margin:0 0 6px -8px;
+ padding:2px 5px;
+}
+ul.blockList ul.blockList li.blockList h3 {
+ padding:0;
+ margin:15px 0;
+}
+ul.blockList li.blockList h2 {
+ padding:0px 0 20px 0;
+}
+/*
+Page layout container styles
+*/
+.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {
+ clear:both;
+ padding:10px 20px;
+ position:relative;
+}
+.indexContainer {
+ margin:10px;
+ position:relative;
+ font-size:1.0em;
+}
+.indexContainer h2 {
+ font-size:1.1em;
+ padding:0 0 3px 0;
+}
+.indexContainer ul {
+ margin:0;
+ padding:0;
+}
+.indexContainer ul li {
+ list-style:none;
+}
+.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
+ font-size:1.1em;
+ font-weight:bold;
+ margin:10px 0 0 0;
+ color:#4E4E4E;
+}
+.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
+ margin:10px 0 10px 20px;
+}
+.serializedFormContainer dl.nameValue dt {
+ margin-left:1px;
+ font-size:1.1em;
+ display:inline;
+ font-weight:bold;
+}
+.serializedFormContainer dl.nameValue dd {
+ margin:0 0 0 1px;
+ font-size:1.1em;
+ display:inline;
+}
+/*
+List styles
+*/
+ul.horizontal li {
+ display:inline;
+ font-size:0.9em;
+}
+ul.inheritance {
+ margin:0;
+ padding:0;
+}
+ul.inheritance li {
+ display:inline;
+ list-style:none;
+}
+ul.inheritance li ul.inheritance {
+ margin-left:15px;
+ padding-left:15px;
+ padding-top:1px;
+}
+ul.blockList, ul.blockListLast {
+ margin:10px 0 10px 0;
+ padding:0;
+}
+ul.blockList li.blockList, ul.blockListLast li.blockList {
+ list-style:none;
+ margin-bottom:25px;
+}
+ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {
+ padding:0px 20px 5px 10px;
+ border:1px solid #9eadc0;
+ background-color:#f9f9f9;
+}
+ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {
+ padding:0 0 5px 8px;
+ background-color:#ffffff;
+ border:1px solid #9eadc0;
+ border-top:none;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
+ margin-left:0;
+ padding-left:0;
+ padding-bottom:15px;
+ border:none;
+ border-bottom:1px solid #9eadc0;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
+ list-style:none;
+ border-bottom:none;
+ padding-bottom:0;
+}
+table tr td dl, table tr td dl dt, table tr td dl dd {
+ margin-top:0;
+ margin-bottom:1px;
+}
+/*
+Table styles
+*/
+.contentContainer table, .classUseContainer table, .constantValuesContainer table {
+ border-bottom:1px solid #9eadc0;
+ width:100%;
+}
+.contentContainer ul li table, .classUseContainer ul li table, .constantValuesContainer ul li table {
+ width:100%;
+}
+.contentContainer .description table, .contentContainer .details table {
+ border-bottom:none;
+}
+.contentContainer ul li table th.colOne, .contentContainer ul li table th.colFirst, .contentContainer ul li table th.colLast, .classUseContainer ul li table th, .constantValuesContainer ul li table th, .contentContainer ul li table td.colOne, .contentContainer ul li table td.colFirst, .contentContainer ul li table td.colLast, .classUseContainer ul li table td, .constantValuesContainer ul li table td{
+ vertical-align:top;
+ padding-right:20px;
+}
+.contentContainer ul li table th.colLast, .classUseContainer ul li table th.colLast,.constantValuesContainer ul li table th.colLast,
+.contentContainer ul li table td.colLast, .classUseContainer ul li table td.colLast,.constantValuesContainer ul li table td.colLast,
+.contentContainer ul li table th.colOne, .classUseContainer ul li table th.colOne,
+.contentContainer ul li table td.colOne, .classUseContainer ul li table td.colOne {
+ padding-right:3px;
+}
+.overviewSummary caption, .packageSummary caption, .contentContainer ul.blockList li.blockList caption, .summary caption, .classUseContainer caption, .constantValuesContainer caption {
+ position:relative;
+ text-align:left;
+ background-repeat:no-repeat;
+ color:#FFFFFF;
+ font-weight:bold;
+ clear:none;
+ overflow:hidden;
+ padding:0px;
+ margin:0px;
+}
+caption a:link, caption a:hover, caption a:active, caption a:visited {
+ color:#FFFFFF;
+}
+.overviewSummary caption span, .packageSummary caption span, .contentContainer ul.blockList li.blockList caption span, .summary caption span, .classUseContainer caption span, .constantValuesContainer caption span {
+ white-space:nowrap;
+ padding-top:8px;
+ padding-left:8px;
+ display:block;
+ float:left;
+ background-image:url(resources/titlebar.gif);
+ height:18px;
+}
+.overviewSummary .tabEnd, .packageSummary .tabEnd, .contentContainer ul.blockList li.blockList .tabEnd, .summary .tabEnd, .classUseContainer .tabEnd, .constantValuesContainer .tabEnd {
+ width:10px;
+ background-image:url(resources/titlebar_end.gif);
+ background-repeat:no-repeat;
+ background-position:top right;
+ position:relative;
+ float:left;
+}
+ul.blockList ul.blockList li.blockList table {
+ margin:0 0 12px 0px;
+ width:100%;
+}
+.tableSubHeadingColor {
+ background-color: #EEEEFF;
+}
+.altColor {
+ background-color:#eeeeef;
+}
+.rowColor {
+ background-color:#ffffff;
+}
+.overviewSummary td, .packageSummary td, .contentContainer ul.blockList li.blockList td, .summary td, .classUseContainer td, .constantValuesContainer td {
+ text-align:left;
+ padding:3px 3px 3px 7px;
+}
+th.colFirst, th.colLast, th.colOne, .constantValuesContainer th {
+ background:#dee3e9;
+ border-top:1px solid #9eadc0;
+ border-bottom:1px solid #9eadc0;
+ text-align:left;
+ padding:3px 3px 3px 7px;
+}
+td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
+ font-weight:bold;
+}
+td.colFirst, th.colFirst {
+ border-left:1px solid #9eadc0;
+ white-space:nowrap;
+}
+td.colLast, th.colLast {
+ border-right:1px solid #9eadc0;
+}
+td.colOne, th.colOne {
+ border-right:1px solid #9eadc0;
+ border-left:1px solid #9eadc0;
+}
+table.overviewSummary {
+ padding:0px;
+ margin-left:0px;
+}
+table.overviewSummary td.colFirst, table.overviewSummary th.colFirst,
+table.overviewSummary td.colOne, table.overviewSummary th.colOne {
+ width:25%;
+ vertical-align:middle;
+}
+table.packageSummary td.colFirst, table.overviewSummary th.colFirst {
+ width:25%;
+ vertical-align:middle;
+}
+/*
+Content styles
+*/
+.description pre {
+ margin-top:0;
+}
+.deprecatedContent {
+ margin:0;
+ padding:10px 0;
+}
+.docSummary {
+ padding:0;
+}
+/*
+Formatting effect styles
+*/
+.sourceLineNo {
+ color:green;
+ padding:0 30px 0 0;
+}
+h1.hidden {
+ visibility:hidden;
+ overflow:hidden;
+ font-size:.9em;
+}
+.block {
+ display:block;
+ margin:3px 0 0 0;
+}
+.strong {
+ font-weight:bold;
+}
diff --git a/js/vendor/bigshot/doc/js/files.html b/js/vendor/bigshot/doc/js/files.html
new file mode 100644
index 00000000..5f669d1f
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/files.html
@@ -0,0 +1,1018 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+ <title>File Index - Bigshot 2.0</title>
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+ <div id="header">
+</div>
+
+ <div id="index">
+ <div align="center"><a href="index.html">Class Index</a>
+| <a href="files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ </div>
+
+ <div id="content">
+ <h1 class="classTitle">File Index</h1>
+
+
+ <div>
+ <h2><a href="symbols/src/src__js__AbstractVRRenderer.js.html">src//js/\AbstractVRRenderer.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__AdaptiveLODMonitor.js.html">src//js/\AdaptiveLODMonitor.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__AdaptiveLODMonitorParameters.js.html">src//js/\AdaptiveLODMonitorParameters.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__ArchiveFileSystem.js.html">src//js/\ArchiveFileSystem.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__bigshot.js.html">src//js/\bigshot.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__Browser.js.html">src//js/\Browser.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__CachingDataLoader.js.html">src//js/\CachingDataLoader.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__CSS3DTexturedQuad.js.html">src//js/\CSS3DTexturedQuad.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__CSS3DTexturedQuadScene.js.html">src//js/\CSS3DTexturedQuadScene.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__CSS3DVRRenderer.js.html">src//js/\CSS3DVRRenderer.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__DataLoader.js.html">src//js/\DataLoader.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__DeepZoomImageFileSystem.js.html">src//js/\DeepZoomImageFileSystem.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__DefaultDataLoader.js.html">src//js/\DefaultDataLoader.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__Event.js.html">src//js/\Event.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__EventDispatcher.js.html">src//js/\EventDispatcher.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__FileSystem.js.html">src//js/\FileSystem.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__FolderFileSystem.js.html">src//js/\FolderFileSystem.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__FullScreen.js.html">src//js/\FullScreen.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__Hotspot.js.html">src//js/\Hotspot.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__HotspotLayer.js.html">src//js/\HotspotLayer.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__HTMLDivElementLayer.js.html">src//js/\HTMLDivElementLayer.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__HTMLElementLayer.js.html">src//js/\HTMLElementLayer.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__Image.js.html">src//js/\Image.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__ImageBase.js.html">src//js/\ImageBase.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__ImageEvent.js.html">src//js/\ImageEvent.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__ImageParameters.js.html">src//js/\ImageParameters.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__ImageTileCache.js.html">src//js/\ImageTileCache.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__ImageVRTileCache.js.html">src//js/\ImageVRTileCache.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__LabeledHotspot.js.html">src//js/\LabeledHotspot.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__Layer.js.html">src//js/\Layer.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__LinkHotspot.js.html">src//js/\LinkHotspot.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__LRUMap.js.html">src//js/\LRUMap.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__Object.js.html">src//js/\Object.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__PointHotspot.js.html">src//js/\PointHotspot.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__SimpleFileSystem.js.html">src//js/\SimpleFileSystem.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__SimpleImage.js.html">src//js/\SimpleImage.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__TexturedQuad.js.html">src//js/\TexturedQuad.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__TexturedQuadScene.js.html">src//js/\TexturedQuadScene.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__TextureTileCache.js.html">src//js/\TextureTileCache.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__TileLayer.js.html">src//js/\TileLayer.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__TimedWeakReference.js.html">src//js/\TimedWeakReference.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__TransformStack.js.html">src//js/\TransformStack.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__types.js.html">src//js/\types.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__VREvent.js.html">src//js/\VREvent.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__VRFace.js.html">src//js/\VRFace.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__VRHotspot.js.html">src//js/\VRHotspot.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__VRPanorama.js.html">src//js/\VRPanorama.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__VRPanoramaParameters.js.html">src//js/\VRPanoramaParameters.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__VRPointHotspot.js.html">src//js/\VRPointHotspot.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__VRRectangleHotspot.js.html">src//js/\VRRectangleHotspot.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__VRRenderer.js.html">src//js/\VRRenderer.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__VRTileCache.js.html">src//js/\VRTileCache.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__WebGL.js.html">src//js/\WebGL.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__WebGLTexturedQuad.js.html">src//js/\WebGLTexturedQuad.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__WebGLTexturedQuadScene.js.html">src//js/\WebGLTexturedQuadScene.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__WebGLUtil.js.html">src//js/\WebGLUtil.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/src/src__js__WebGLVRRenderer.js.html">src//js/\WebGLVRRenderer.js</a></h2>
+
+ <dl>
+
+
+
+
+ </dl>
+ </div>
+ <hr />
+
+
+ </div>
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/images/touch-ui.png b/js/vendor/bigshot/doc/js/images/touch-ui.png
new file mode 100644
index 00000000..5fe2a9d6
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/images/touch-ui.png
Binary files differ
diff --git a/js/vendor/bigshot/doc/js/index.html b/js/vendor/bigshot/doc/js/index.html
new file mode 100644
index 00000000..9b31bfe2
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/index.html
@@ -0,0 +1,712 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+ <title>Bigshot 2.0 Reference</title>
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+ <div id="header">
+</div>
+
+ <div id="index">
+ <div align="center"><a href="index.html">Class Index</a>
+| <a href="files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ </div>
+
+ <div id="content">
+ <h1 class="classTitle">Class Index</h1>
+
+
+ <div>
+ <h2><a href="symbols/_global_.html">_global_</a></h2>
+
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.html">bigshot</a></h2>
+ Bigshot namespace.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.AbstractVRRenderer.html">bigshot.AbstractVRRenderer</a></h2>
+ Abstract VR renderer base class.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.AdaptiveLODMonitor.html">bigshot.AdaptiveLODMonitor</a></h2>
+ An adaptive LOD monitor that adjusts the level of detail of a VR panorama to achieve a desired frame rate.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.AdaptiveLODMonitorParameters.html">bigshot.AdaptiveLODMonitorParameters</a></h2>
+ Parameters for the adaptive LOD monitor.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.ArchiveFileSystem.html">bigshot.ArchiveFileSystem</a></h2>
+ Bigshot archive filesystem.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.Browser.html">bigshot.Browser</a></h2>
+ Encapsulates common browser functions for cross-browser portability and convenience.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.CachingDataLoader.html">bigshot.CachingDataLoader</a></h2>
+ Data loader using standard browser functions that maintains an in-memory cache of everything loaded.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.CSS3DTexturedQuad.html">bigshot.CSS3DTexturedQuad</a></h2>
+ An abstraction for textured quads.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.CSS3DTexturedQuadScene.html">bigshot.CSS3DTexturedQuadScene</a></h2>
+ A scene consisting of a number of quads, all with a unique texture.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.CSS3DVRRenderer.html">bigshot.CSS3DVRRenderer</a></h2>
+ CSS 3D Transform-based renderer.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.DataLoader.html">bigshot.DataLoader</a></h2>
+ Loads image and XML data.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.DeepZoomImageFileSystem.html">bigshot.DeepZoomImageFileSystem</a></h2>
+ A Deep Zoom Image filesystem.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.DefaultDataLoader.html">bigshot.DefaultDataLoader</a></h2>
+ Data loader using standard browser functions.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.Event.html">bigshot.Event</a></h2>
+ Base class for events.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a></h2>
+ Base class for objects that dispatch events.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.FileSystem.html">bigshot.FileSystem</a></h2>
+ Abstract filesystem definition.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.FolderFileSystem.html">bigshot.FolderFileSystem</a></h2>
+ Folder-based filesystem.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.FullScreen.html">bigshot.FullScreen</a></h2>
+ A utility class for making an element "full screen", or as close to that as browser security allows.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.HomogeneousPoint3D.html">bigshot.HomogeneousPoint3D</a></h2>
+ A 3d homogenous point.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.Hotspot.html">bigshot.Hotspot</a></h2>
+ Base class for hotspots in a <a href="symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a>.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a></h2>
+ A hotspot layer.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.HTMLDivElementLayer.html">bigshot.HTMLDivElementLayer</a></h2>
+ A layer consisting of a single HTML element that is moved and scaled to cover the layer.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.HTMLElementLayer.html">bigshot.HTMLElementLayer</a></h2>
+ A layer consisting of a single HTML element that is moved and scaled to cover the layer.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.Image.html">bigshot.Image</a></h2>
+ A tiled, zoomable image viewer.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.ImageBase.html">bigshot.ImageBase</a></h2>
+ Base class for image viewers.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.ImageEvent.html">bigshot.ImageEvent</a></h2>
+ Base class for events dispatched by bigshot.ImageBase.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a></h2>
+ ImageParameters parameter object.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.ImageTileCache.html">bigshot.ImageTileCache</a></h2>
+ Tile cache for the <a href="symbols/bigshot.TileLayer.html">bigshot.TileLayer</a>.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.ImageVRTileCache.html">bigshot.ImageVRTileCache</a></h2>
+ A VR tile cache backed by a <a href="symbols/bigshot.ImageTileCache.html">bigshot.ImageTileCache</a>.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.LabeledHotspot.html">bigshot.LabeledHotspot</a></h2>
+ A hotspot with a label under it.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.Layer.html">bigshot.Layer</a></h2>
+ Abstract interface description for a layer.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.LinkHotspot.html">bigshot.LinkHotspot</a></h2>
+ A labeled hotspot that takes the user to another location when it is clicked on.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.LRUMap.html">bigshot.LRUMap</a></h2>
+ Implementation of a Least-Recently-Used cache map.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.Object.html">bigshot.Object</a></h2>
+ Object-oriented support functions, used to make JavaScript a bit more palatable to a Java-head.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.Point2D.html">bigshot.Point2D</a></h2>
+ A 2d point.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.Point3D.html">bigshot.Point3D</a></h2>
+ A 3d point.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.PointHotspot.html">bigshot.PointHotspot</a></h2>
+ A point hotspot consisting of an image.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.Rotation.html">bigshot.Rotation</a></h2>
+ A rotation specified as a yaw-pitch-roll triplet.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.SimpleFileSystem.html">bigshot.SimpleFileSystem</a></h2>
+ Filesystem adapter for bigshot.SimpleImage.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.SimpleImage.html">bigshot.SimpleImage</a></h2>
+ A zoomable image viewer.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.TexturedQuad.html">bigshot.TexturedQuad</a></h2>
+ Abstract base for textured quads.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.TexturedQuadScene.html">bigshot.TexturedQuadScene</a></h2>
+ Abstract base for textured quad scenes.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.TextureTileCache.html">bigshot.TextureTileCache</a></h2>
+ Tile texture cache for a <a href="symbols/bigshot.VRFace.html">bigshot.VRFace</a>.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.TileLayer.html">bigshot.TileLayer</a></h2>
+ A tiled, zoomable image layer.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.TimedWeakReference.html">bigshot.TimedWeakReference</a></h2>
+ Caches a lazy-created resource for a given time before disposing it.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.TransformStack.html">bigshot.TransformStack</a></h2>
+ A 3D transformation stack.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VREvent.html">bigshot.VREvent</a></h2>
+ Base class for events dispatched by bigshot.VRPanorama.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRFace.html">bigshot.VRFace</a></h2>
+ a VR cube face.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRHotspot.html">bigshot.VRHotspot</a></h2>
+ Abstract base class for panorama hotspots.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a></h2>
+ A cube-map VR panorama.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRPanorama.RenderCause.html">bigshot.VRPanorama.RenderCause</a></h2>
+ The reason why the <a href="symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a> is being rendered.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRPanorama.RenderState.html">bigshot.VRPanorama.RenderState</a></h2>
+ The state the renderer is in when a <a href="symbols/bigshot.VRPanorama.html#.RenderListener">bigshot.VRPanorama.RenderListener</a> is called.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a></h2>
+ VRPanoramaParameters parameter object.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRPointHotspot.html">bigshot.VRPointHotspot</a></h2>
+ A VR panorama point-hotspot.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRRectangleHotspot.html">bigshot.VRRectangleHotspot</a></h2>
+ A rectangular VR panorama hotspot.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRRenderer.html">bigshot.VRRenderer</a></h2>
+ Abstract base for 3d rendering system.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.VRTileCache.html">bigshot.VRTileCache</a></h2>
+ Abstract base class.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.WebGL.html">bigshot.WebGL</a></h2>
+ WebGL wrapper for common <a href="symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a> uses.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.WebGLTexturedQuad.html">bigshot.WebGLTexturedQuad</a></h2>
+ An abstraction for textured quads.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.WebGLTexturedQuadScene.html">bigshot.WebGLTexturedQuadScene</a></h2>
+ A "scene" consisting of a number of quads, all with a unique texture.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.WebGLUtil.html">bigshot.WebGLUtil</a></h2>
+ WebGL utility functions.
+ </div>
+ <hr />
+
+ <div>
+ <h2><a href="symbols/bigshot.WebGLVRRenderer.html">bigshot.WebGLVRRenderer</a></h2>
+ WebGL renderer.
+ </div>
+ <hr />
+
+
+ </div>
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/_global_.html b/js/vendor/bigshot/doc/js/symbols/_global_.html
new file mode 100644
index 00000000..0ebe6ec5
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/_global_.html
@@ -0,0 +1,380 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>_global_ - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Built-In Namespace _global_
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+
+
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.AbstractVRRenderer.html b/js/vendor/bigshot/doc/js/symbols/bigshot.AbstractVRRenderer.html
new file mode 100644
index 00000000..ec5fc616
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.AbstractVRRenderer.html
@@ -0,0 +1,595 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.AbstractVRRenderer - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.AbstractVRRenderer
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Abstract VR renderer base class.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__AbstractVRRenderer.js.html">AbstractVRRenderer.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.AbstractVRRenderer.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AbstractVRRenderer.html#constructor">bigshot.AbstractVRRenderer</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.AbstractVRRenderer.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.AbstractVRRenderer.html#transformToScreen">transformToScreen</a></b>(vector)
+ </div>
+ <div class="description">Transforms a vector to screen coordinates.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.AbstractVRRenderer.html#transformToWorld">transformToWorld</a></b>(vector)
+ </div>
+ <div class="description">Transforms a vector to world coordinates.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.AbstractVRRenderer.html#transformWorldToScreen">transformWorldToScreen</a></b>(world)
+ </div>
+ <div class="description">Transforms a world vector to screen coordinates.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.AbstractVRRenderer</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="transformToScreen"> </a>
+ <div class="fixedFont">
+
+
+ <b>transformToScreen</b>(vector)
+
+ </div>
+ <div class="description">
+ Transforms a vector to screen coordinates.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>vector</b>
+
+ </dt>
+ <dd>the vector to transform</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the transformed vector, or null if the vector is nearer than the near-z plane.</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="transformToWorld"> </a>
+ <div class="fixedFont">
+
+
+ <b>transformToWorld</b>(vector)
+
+ </div>
+ <div class="description">
+ Transforms a vector to world coordinates.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>vector</b>
+
+ </dt>
+ <dd>the vector to transform</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="transformWorldToScreen"> </a>
+ <div class="fixedFont">
+
+
+ <b>transformWorldToScreen</b>(world)
+
+ </div>
+ <div class="description">
+ Transforms a world vector to screen coordinates.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>world</b>
+
+ </dt>
+ <dd>the world-vector to transform</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.AdaptiveLODMonitor.html b/js/vendor/bigshot/doc/js/symbols/bigshot.AdaptiveLODMonitor.html
new file mode 100644
index 00000000..ac684d16
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.AdaptiveLODMonitor.html
@@ -0,0 +1,520 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.AdaptiveLODMonitor - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.AdaptiveLODMonitor
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ An adaptive LOD monitor that adjusts the level of detail of a VR panorama to achieve a desired frame rate. To connect it to a VR panorama, use the bigshot.AdaptiveLODMonitor#getListener method to get a render listener that can be passed to <a href="../symbols/bigshot.VRPanorama.html#addRenderListener">bigshot.VRPanorama#addRenderListener</a>. <p>The monitor maintains two render modes - a high quality one with a fixed level of detail, and a low(er) quality one with variable level of detail. If the panorama is idle for more than a set interval, a high-quality render is performed.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__AdaptiveLODMonitor.js.html">AdaptiveLODMonitor.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.AdaptiveLODMonitor.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitor.html#constructor">bigshot.AdaptiveLODMonitor</a></b>(parameters)
+ </div>
+ <div class="description">Creates a new adaptive level-of-detail monitor.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.AdaptiveLODMonitor.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.AdaptiveLODMonitor.html#setParameters">setParameters</a></b>(parameters)
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.AdaptiveLODMonitor</b>(parameters)
+ </div>
+
+ <div class="description">
+ Creates a new adaptive level-of-detail monitor.
+
+ </div>
+
+
+
+ <pre class="code">var bvr = new bigshot.VRPanorama ( ... ); var lodMonitor = new bigshot.AdaptiveLODMonitor ( new bigshot.AdaptiveLODMonitorParameters ({ vrPanorama : bvr, targetFps : 30, tolerance : 0.3, rate : 0.1, minMag : 1.5, maxMag : 16 })); bvr.addRenderListener (lodMonitor.getListener ());</pre>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">bigshot.AdaptiveLODMonitorParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>parameters for the LOD monitor.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">bigshot.AdaptiveLODMonitorParameters</a> for a list of parameters</dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="setParameters"> </a>
+ <div class="fixedFont">
+
+
+ <b>setParameters</b>(parameters)
+
+ </div>
+ <div class="description">
+
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">bigshot.AdaptiveLODMonitorParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.AdaptiveLODMonitorParameters.html b/js/vendor/bigshot/doc/js/symbols/bigshot.AdaptiveLODMonitorParameters.html
new file mode 100644
index 00000000..187fd6a6
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.AdaptiveLODMonitorParameters.html
@@ -0,0 +1,808 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.AdaptiveLODMonitorParameters - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.AdaptiveLODMonitorParameters
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Parameters for the adaptive LOD monitor.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__AdaptiveLODMonitorParameters.js.html">AdaptiveLODMonitorParameters.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.AdaptiveLODMonitorParameters.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#constructor">bigshot.AdaptiveLODMonitorParameters</a></b>(values)
+ </div>
+ <div class="description">Creates a new parameter block.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.AdaptiveLODMonitorParameters.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#hqRenderDelay">hqRenderDelay</a></b>
+ </div>
+ <div class="description">Delay in milliseconds before executing a HQ render pass.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#hqRenderInterval">hqRenderInterval</a></b>
+ </div>
+ <div class="description">Interval in milliseconds for the HQ render pass timer.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#hqRenderMag">hqRenderMag</a></b>
+ </div>
+ <div class="description">Texture magnification for HQ render passes.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#maxMag">maxMag</a></b>
+ </div>
+ <div class="description">Maximum texture magnification.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#minMag">minMag</a></b>
+ </div>
+ <div class="description">Minimum texture magnification.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#rate">rate</a></b>
+ </div>
+ <div class="description">The rate at which the level of detail is adjusted.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#targetFps">targetFps</a></b>
+ </div>
+ <div class="description">The target framerate in frames per second.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#tolerance">tolerance</a></b>
+ </div>
+ <div class="description">The tolerance for the rendering time.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html#vrPanorama">vrPanorama</a></b>
+ </div>
+ <div class="description">The VR panorama to adjust.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.AdaptiveLODMonitorParameters</b>(values)
+ </div>
+
+ <div class="description">
+ Creates a new parameter block.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>values</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="hqRenderDelay"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>hqRenderDelay</b>
+
+ </div>
+ <div class="description">
+ Delay in milliseconds before executing a HQ render pass.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 2000
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="hqRenderInterval"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>hqRenderInterval</b>
+
+ </div>
+ <div class="description">
+ Interval in milliseconds for the HQ render pass timer.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 1000
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="hqRenderMag"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{float}</span>
+ <b>hqRenderMag</b>
+
+ </div>
+ <div class="description">
+ Texture magnification for HQ render passes.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 1.5
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="maxMag"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{float}</span>
+ <b>maxMag</b>
+
+ </div>
+ <div class="description">
+ Maximum texture magnification.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 16
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="minMag"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{float}</span>
+ <b>minMag</b>
+
+ </div>
+ <div class="description">
+ Minimum texture magnification.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 1.5
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="rate"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{float}</span>
+ <b>rate</b>
+
+ </div>
+ <div class="description">
+ The rate at which the level of detail is adjusted. For detail increase, the detail is multiplied with (1.0 + rate), for decrease divided.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 0.1
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="targetFps"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{float}</span>
+ <b>targetFps</b>
+
+ </div>
+ <div class="description">
+ The target framerate in frames per second. The monitor will try to achieve an average frame render time of <i>1 / targetFps</i> seconds.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 30
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="tolerance"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{float}</span>
+ <b>tolerance</b>
+
+ </div>
+ <div class="description">
+ The tolerance for the rendering time. The monitor will adjust the level of detail if the average frame render time rises above <i>target frame render time * (1.0 + tolerance)</i> or falls below <i>target frame render time / (1.0 + tolerance)</i>.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 0.3
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="vrPanorama"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>}</span>
+ <b>vrPanorama</b>
+
+ </div>
+ <div class="description">
+ The VR panorama to adjust.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.ArchiveFileSystem.html b/js/vendor/bigshot/doc/js/symbols/bigshot.ArchiveFileSystem.html
new file mode 100644
index 00000000..f3e81c7c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.ArchiveFileSystem.html
@@ -0,0 +1,452 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.ArchiveFileSystem - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.ArchiveFileSystem
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>.</p>
+
+ <p class="description">
+ Bigshot archive filesystem.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__ArchiveFileSystem.js.html">ArchiveFileSystem.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.ArchiveFileSystem.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ArchiveFileSystem.html#constructor">bigshot.ArchiveFileSystem</a></b>(parameters)
+ </div>
+ <div class="description">Creates a new instance of a <code>.bigshot</code> archive filesystem adapter.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>: </dt><dd><a href="../symbols/bigshot.FileSystem.html#getDescriptor">getDescriptor</a>, <a href="../symbols/bigshot.FileSystem.html#getFilename">getFilename</a>, <a href="../symbols/bigshot.FileSystem.html#getImageFilename">getImageFilename</a>, <a href="../symbols/bigshot.FileSystem.html#getPosterFilename">getPosterFilename</a>, <a href="../symbols/bigshot.FileSystem.html#setPrefix">setPrefix</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.ArchiveFileSystem</b>(parameters)
+ </div>
+
+ <div class="description">
+ Creates a new instance of a <code>.bigshot</code> archive filesystem adapter.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>|<a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the associated image parameters</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.Browser.html b/js/vendor/bigshot/doc/js/symbols/bigshot.Browser.html
new file mode 100644
index 00000000..c354f447
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.Browser.html
@@ -0,0 +1,1081 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.Browser - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.Browser
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Encapsulates common browser functions for cross-browser portability and convenience.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__Browser.js.html">Browser.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.Browser.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Browser.html#constructor">bigshot.Browser</a></b>()
+ </div>
+ <div class="description">Creates a new browser helper object.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.Browser.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#browserIsViewporting">browserIsViewporting</a></b>()
+ </div>
+ <div class="description">Returns true if the browser is scaling the window, such as on Mobile Safari.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#createXMLHttpRequest">createXMLHttpRequest</a></b>()
+ </div>
+ <div class="description">Creates an XMLHttpRequest object.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#getDevicePixelScale">getDevicePixelScale</a></b>()
+ </div>
+ <div class="description">Returns the device pixel scale, which is equal to the number of device pixels each css pixel corresponds to.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#getElementPosition">getElementPosition</a></b>(obj)
+ </div>
+ <div class="description">Returns the position in pixels of the element relative to the top left corner of the document.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#getElementSize">getElementSize</a></b>(obj)
+ </div>
+ <div class="description">Returns the size in pixels of the element</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#makeOpacityTransition">makeOpacityTransition</a></b>(element, onComplete)
+ </div>
+ <div class="description">Creates an opacity transition from opaque to transparent.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#registerListener">registerListener</a></b>(elem, eventName, fn, useCapture)
+ </div>
+ <div class="description">Registers a listener to an element.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#removeAllChildren">removeAllChildren</a></b>(element)
+ </div>
+ <div class="description">Removes all children from an element.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#requestAnimationFrame">requestAnimationFrame</a></b>(callback, element)
+ </div>
+ <div class="description">Requests an animation frame, if the API is supported on the browser.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#stopEventBubbling">stopEventBubbling</a></b>(eventObject)
+ </div>
+ <div class="description">Stops an event from bubbling.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#stopEventBubblingHandler">stopEventBubblingHandler</a></b>()
+ </div>
+ <div class="description">Creates a callback function that simply stops the event from bubbling.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#stopMouseEventBubbling">stopMouseEventBubbling</a></b>(element)
+ </div>
+ <div class="description">Stops bubbling for all mouse events on the element.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Browser.html#unregisterListener">unregisterListener</a></b>(elem, eventName, fn, useCapture)
+ </div>
+ <div class="description">Unregisters a listener from an element.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.Browser</b>()
+ </div>
+
+ <div class="description">
+ Creates a new browser helper object.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="browserIsViewporting"> </a>
+ <div class="fixedFont">
+
+
+ <b>browserIsViewporting</b>()
+
+ </div>
+ <div class="description">
+ Returns true if the browser is scaling the window, such as on Mobile Safari. The method used here is far from perfect, but it catches the most important use case: If we are running on an iDevice and the page is zoomed out.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="createXMLHttpRequest"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{XMLHttpRequest}</span>
+ <b>createXMLHttpRequest</b>()
+
+ </div>
+ <div class="description">
+ Creates an XMLHttpRequest object.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>a XMLHttpRequest object.</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="getDevicePixelScale"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getDevicePixelScale</b>()
+
+ </div>
+ <div class="description">
+ Returns the device pixel scale, which is equal to the number of device pixels each css pixel corresponds to. Used to render the proper level of detail on mobile devices, especially when zoomed out and more detailed textures are simply wasted.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>The number of device pixels each css pixel corresponds to. For example, if the browser is zoomed out to 50% and a div with <code>width</code> set to <code>100px</code> occupies 50 physical pixels, the function will return <code>0.5</code>.</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="getElementPosition"> </a>
+ <div class="fixedFont">
+
+
+ <b>getElementPosition</b>(obj)
+
+ </div>
+ <div class="description">
+ Returns the position in pixels of the element relative to the top left corner of the document.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>obj</b>
+
+ </dt>
+ <dd>the element</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>a position object with two integer members, x and y.</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="getElementSize"> </a>
+ <div class="fixedFont">
+
+
+ <b>getElementSize</b>(obj)
+
+ </div>
+ <div class="description">
+ Returns the size in pixels of the element
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>obj</b>
+
+ </dt>
+ <dd>the element</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>a size object with two integer members, w and h, for width and height respectively.</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="makeOpacityTransition"> </a>
+ <div class="fixedFont">
+
+
+ <b>makeOpacityTransition</b>(element, onComplete)
+
+ </div>
+ <div class="description">
+ Creates an opacity transition from opaque to transparent. If CSS transitions aren't supported, the element is immediately made transparent without a transition.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>element</b>
+
+ </dt>
+ <dd>the element to fade out</dd>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>onComplete</b>
+
+ </dt>
+ <dd>function to call when the transition is complete.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="registerListener"> </a>
+ <div class="fixedFont">
+
+
+ <b>registerListener</b>(elem, eventName, fn, useCapture)
+
+ </div>
+ <div class="description">
+ Registers a listener to an element.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>elem</b>
+
+ </dt>
+ <dd>the element</dd>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>eventName</b>
+
+ </dt>
+ <dd>the event name ("click", "mouseover", etc.)</dd>
+
+ <dt>
+ <span class="light fixedFont">{function(e)}</span> <b>fn</b>
+
+ </dt>
+ <dd>the callback function to attach</dd>
+
+ <dt>
+ <span class="light fixedFont">{boolean}</span> <b>useCapture</b>
+
+ </dt>
+ <dd>specifies if we want to initiate capture. See <a href="https://developer.mozilla.org/en/DOM/element.addEventListener">element.addEventListener</a> on MDN for an explanation.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="removeAllChildren"> </a>
+ <div class="fixedFont">
+
+
+ <b>removeAllChildren</b>(element)
+
+ </div>
+ <div class="description">
+ Removes all children from an element.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>element</b>
+
+ </dt>
+ <dd>the element whose children are to be removed.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="requestAnimationFrame"> </a>
+ <div class="fixedFont">
+
+
+ <b>requestAnimationFrame</b>(callback, element)
+
+ </div>
+ <div class="description">
+ Requests an animation frame, if the API is supported on the browser. If not, a <code>setTimeout</code> with a timeout of zero is used.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>callback</b>
+
+ </dt>
+ <dd>the animation frame render function</dd>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>element</b>
+
+ </dt>
+ <dd>the element to use when requesting an animation frame</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="stopEventBubbling"> </a>
+ <div class="fixedFont">
+
+
+ <b>stopEventBubbling</b>(eventObject)
+
+ </div>
+ <div class="description">
+ Stops an event from bubbling.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Event}</span> <b>eventObject</b>
+
+ </dt>
+ <dd>the event object</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="stopEventBubblingHandler"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{function(event)}</span>
+ <b>stopEventBubblingHandler</b>()
+
+ </div>
+ <div class="description">
+ Creates a callback function that simply stops the event from bubbling.
+
+
+ </div>
+
+
+
+ <pre class="code">var browser = new bigshot.Browser (); browser.registerListener (element, "mousedown", browser.stopEventBubblingHandler (), false);</pre>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>a new function that can be used to stop an event from bubbling</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="stopMouseEventBubbling"> </a>
+ <div class="fixedFont">
+
+
+ <b>stopMouseEventBubbling</b>(element)
+
+ </div>
+ <div class="description">
+ Stops bubbling for all mouse events on the element.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>element</b>
+
+ </dt>
+ <dd>the element</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="unregisterListener"> </a>
+ <div class="fixedFont">
+
+
+ <b>unregisterListener</b>(elem, eventName, fn, useCapture)
+
+ </div>
+ <div class="description">
+ Unregisters a listener from an element.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>elem</b>
+
+ </dt>
+ <dd>the element</dd>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>eventName</b>
+
+ </dt>
+ <dd>the event name ("click", "mouseover", etc.)</dd>
+
+ <dt>
+ <span class="light fixedFont">{function(e)}</span> <b>fn</b>
+
+ </dt>
+ <dd>the callback function to detach</dd>
+
+ <dt>
+ <span class="light fixedFont">{boolean}</span> <b>useCapture</b>
+
+ </dt>
+ <dd>specifies if we should unregister a listener from the capture chain.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DTexturedQuad.html b/js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DTexturedQuad.html
new file mode 100644
index 00000000..4d339f87
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DTexturedQuad.html
@@ -0,0 +1,758 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.CSS3DTexturedQuad - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.CSS3DTexturedQuad
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ An abstraction for textured quads. Used in the <a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">bigshot.CSS3DTexturedQuadScene</a>.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__CSS3DTexturedQuad.js.html">CSS3DTexturedQuad.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.CSS3DTexturedQuad.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.CSS3DTexturedQuad.html#constructor">bigshot.CSS3DTexturedQuad</a></b>(p, u, v, the)
+ </div>
+ <div class="description">Creates a textured quad object.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.CSS3DTexturedQuad.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.CSS3DTexturedQuad.html#crossProduct">crossProduct</a></b>(a, b)
+ </div>
+ <div class="description">Computes the cross product of two vectors.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.CSS3DTexturedQuad.html#norm">norm</a></b>(vec)
+ </div>
+ <div class="description">Computes the norm of a vector.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.CSS3DTexturedQuad.html#quadTransform">quadTransform</a></b>(tl, u, y)
+ </div>
+ <div class="description">Creates a CSS3D matrix3d transform from an origin point and two basis vectors</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.CSS3DTexturedQuad.html#render">render</a></b>(world, scale, view)
+ </div>
+ <div class="description">Renders the quad.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.CSS3DTexturedQuad.html#vecToStr">vecToStr</a></b>(u)
+ </div>
+ <div class="description">Stringifies a vector as the x, y, and z components separated by commas.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.CSS3DTexturedQuad</b>(p, u, v, the)
+ </div>
+
+ <div class="description">
+ Creates a textured quad object.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>p</b>
+
+ </dt>
+ <dd>the top-left corner of the quad</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>u</b>
+
+ </dt>
+ <dd>vector pointing from p along the top edge of the quad</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>v</b>
+
+ </dt>
+ <dd>vector pointing from p along the left edge of the quad</dd>
+
+ <dt>
+ <span class="light fixedFont">{HTMLImageElement}</span> <b>the</b>
+
+ </dt>
+ <dd>image to use.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="crossProduct"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span>
+ <b>crossProduct</b>(a, b)
+
+ </div>
+ <div class="description">
+ Computes the cross product of two vectors.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>a</b>
+
+ </dt>
+ <dd>the first vector</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>b</b>
+
+ </dt>
+ <dd>the second vector</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the cross product</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="norm"> </a>
+ <div class="fixedFont">
+
+
+ <b>norm</b>(vec)
+
+ </div>
+ <div class="description">
+ Computes the norm of a vector.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>vec</b>
+
+ </dt>
+ <dd>the vector</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="quadTransform"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>quadTransform</b>(tl, u, y)
+
+ </div>
+ <div class="description">
+ Creates a CSS3D matrix3d transform from an origin point and two basis vectors
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>tl</b>
+
+ </dt>
+ <dd>the top left corner</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>u</b>
+
+ </dt>
+ <dd>the vector pointing along the top edge</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>y</b>
+
+ </dt>
+ <dd>the vector pointing down the left edge</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the matrix3d statement</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="render"> </a>
+ <div class="fixedFont">
+
+
+ <b>render</b>(world, scale, view)
+
+ </div>
+ <div class="description">
+ Renders the quad.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>world</b>
+
+ </dt>
+ <dd>the world element</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>scale</b>
+
+ </dt>
+ <dd>the scale factor to apply to world space to get CSS pixel distances</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>view</b>
+
+ </dt>
+ <dd>the viewer position in world space</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="vecToStr"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>vecToStr</b>(u)
+
+ </div>
+ <div class="description">
+ Stringifies a vector as the x, y, and z components separated by commas.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>u</b>
+
+ </dt>
+ <dd>the vector</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the stringified vector</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DTexturedQuadScene.html b/js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DTexturedQuadScene.html
new file mode 100644
index 00000000..a707d347
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DTexturedQuadScene.html
@@ -0,0 +1,562 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.CSS3DTexturedQuadScene - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.CSS3DTexturedQuadScene
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ A scene consisting of a number of quads, all with a unique texture. Used by the <a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a> to render the VR cube.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__CSS3DTexturedQuadScene.js.html">CSS3DTexturedQuadScene.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.CSS3DTexturedQuadScene.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html#constructor">bigshot.CSS3DTexturedQuadScene</a></b>(world, scale, view)
+ </div>
+ <div class="description">Creates a textured quad scene.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.CSS3DTexturedQuadScene.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html#addQuad">addQuad</a></b>(quad)
+ </div>
+ <div class="description">Adds a new quad to the scene.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html#render">render</a></b>()
+ </div>
+ <div class="description">Renders all quads.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.CSS3DTexturedQuadScene</b>(world, scale, view)
+ </div>
+
+ <div class="description">
+ Creates a textured quad scene.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>world</b>
+
+ </dt>
+ <dd>element used as container for the world coordinate system.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>scale</b>
+
+ </dt>
+ <dd>the scaling factor to use to avoid numeric errors.</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>view</b>
+
+ </dt>
+ <dd>the 3d-coordinates of the viewer</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.CSS3DTexturedQuad.html">bigshot.CSS3DTexturedQuad</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="addQuad"> </a>
+ <div class="fixedFont">
+
+
+ <b>addQuad</b>(quad)
+
+ </div>
+ <div class="description">
+ Adds a new quad to the scene.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.TexturedQuad.html">bigshot.TexturedQuad</a>}</span> <b>quad</b>
+
+ </dt>
+ <dd>the quad to add to the scene</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="render"> </a>
+ <div class="fixedFont">
+
+
+ <b>render</b>()
+
+ </div>
+ <div class="description">
+ Renders all quads.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DVRRenderer.html b/js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DVRRenderer.html
new file mode 100644
index 00000000..70eb1074
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.CSS3DVRRenderer.html
@@ -0,0 +1,504 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.CSS3DVRRenderer - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.CSS3DVRRenderer
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.VRRenderer.html">bigshot.VRRenderer</a>.</p>
+
+ <p class="description">
+ CSS 3D Transform-based renderer.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__CSS3DVRRenderer.js.html">CSS3DVRRenderer.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.CSS3DVRRenderer.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.CSS3DVRRenderer.html#constructor">bigshot.CSS3DVRRenderer</a></b>(_container)
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.CSS3DVRRenderer.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b>onresize</b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.VRRenderer.html">bigshot.VRRenderer</a>: </dt><dd><a href="../symbols/bigshot.VRRenderer.html#beginRender">beginRender</a>, <a href="../symbols/bigshot.VRRenderer.html#createTexturedQuad">createTexturedQuad</a>, <a href="../symbols/bigshot.VRRenderer.html#createTexturedQuadScene">createTexturedQuadScene</a>, <a href="../symbols/bigshot.VRRenderer.html#createTileCache">createTileCache</a>, <a href="../symbols/bigshot.VRRenderer.html#dispose">dispose</a>, <a href="../symbols/bigshot.VRRenderer.html#endRender">endRender</a>, <a href="../symbols/bigshot.VRRenderer.html#getElement">getElement</a>, <a href="../symbols/bigshot.VRRenderer.html#getViewportHeight">getViewportHeight</a>, <a href="../symbols/bigshot.VRRenderer.html#getViewportWidth">getViewportWidth</a>, <a href="../symbols/bigshot.VRRenderer.html#resize">resize</a>, <a href="../symbols/bigshot.VRRenderer.html#transformToScreen">transformToScreen</a>, <a href="../symbols/bigshot.VRRenderer.html#transformToWorld">transformToWorld</a>, <a href="../symbols/bigshot.VRRenderer.html#transformWorldToScreen">transformWorldToScreen</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.CSS3DVRRenderer</b>(_container)
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>_container</b>
+
+ </dt>
+ <dd>the HTML container element for the render viewport</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="onresize"> </a>
+ <div class="fixedFont">
+
+
+ <b>onresize</b>()
+
+ </div>
+ <div class="description">
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.CachingDataLoader.html b/js/vendor/bigshot/doc/js/symbols/bigshot.CachingDataLoader.html
new file mode 100644
index 00000000..02fd92cd
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.CachingDataLoader.html
@@ -0,0 +1,441 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.CachingDataLoader - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.CachingDataLoader
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.DataLoader.html">bigshot.DataLoader</a>.</p>
+
+ <p class="description">
+ Data loader using standard browser functions that maintains an in-memory cache of everything loaded.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__CachingDataLoader.js.html">CachingDataLoader.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.CachingDataLoader.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.CachingDataLoader.html#constructor">bigshot.CachingDataLoader</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.DataLoader.html">bigshot.DataLoader</a>: </dt><dd><a href="../symbols/bigshot.DataLoader.html#loadImage">loadImage</a>, <a href="../symbols/bigshot.DataLoader.html#loadXml">loadXml</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.CachingDataLoader</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.DataLoader.html b/js/vendor/bigshot/doc/js/symbols/bigshot.DataLoader.html
new file mode 100644
index 00000000..e67801a6
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.DataLoader.html
@@ -0,0 +1,568 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.DataLoader - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.DataLoader
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Loads image and XML data.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__DataLoader.js.html">DataLoader.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.DataLoader.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.DataLoader.html#constructor">bigshot.DataLoader</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.DataLoader.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.DataLoader.html#loadImage">loadImage</a></b>(url, onloaded)
+ </div>
+ <div class="description">Loads an image.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.DataLoader.html#loadXml">loadXml</a></b>(url, async, onloaded)
+ </div>
+ <div class="description">Loads XML data.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.DataLoader</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="loadImage"> </a>
+ <div class="fixedFont">
+
+
+ <b>loadImage</b>(url, onloaded)
+
+ </div>
+ <div class="description">
+ Loads an image.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>url</b>
+
+ </dt>
+ <dd>the url to load</dd>
+
+ <dt>
+ <span class="light fixedFont">{function(success|img)}</span> <b>onloaded</b>
+
+ </dt>
+ <dd>called on complete</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="loadXml"> </a>
+ <div class="fixedFont">
+
+
+ <b>loadXml</b>(url, async, onloaded)
+
+ </div>
+ <div class="description">
+ Loads XML data.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>url</b>
+
+ </dt>
+ <dd>the url to load</dd>
+
+ <dt>
+ <span class="light fixedFont">{boolean}</span> <b>async</b>
+
+ </dt>
+ <dd>use async request</dd>
+
+ <dt>
+ <span class="light fixedFont">{function(success|xml)}</span> <b>onloaded</b>
+ <i>Optional</i>
+ </dt>
+ <dd>called on complete for async requests</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the xml for synchronous calls</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.DeepZoomImageFileSystem.html b/js/vendor/bigshot/doc/js/symbols/bigshot.DeepZoomImageFileSystem.html
new file mode 100644
index 00000000..9b228308
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.DeepZoomImageFileSystem.html
@@ -0,0 +1,452 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.DeepZoomImageFileSystem - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.DeepZoomImageFileSystem
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>.</p>
+
+ <p class="description">
+ A Deep Zoom Image filesystem.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__DeepZoomImageFileSystem.js.html">DeepZoomImageFileSystem.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.DeepZoomImageFileSystem.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.DeepZoomImageFileSystem.html#constructor">bigshot.DeepZoomImageFileSystem</a></b>(parameters)
+ </div>
+ <div class="description">Creates a new instance of a Deep Zoom Image folder-based filesystem adapter.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>: </dt><dd><a href="../symbols/bigshot.FileSystem.html#getDescriptor">getDescriptor</a>, <a href="../symbols/bigshot.FileSystem.html#getFilename">getFilename</a>, <a href="../symbols/bigshot.FileSystem.html#getImageFilename">getImageFilename</a>, <a href="../symbols/bigshot.FileSystem.html#getPosterFilename">getPosterFilename</a>, <a href="../symbols/bigshot.FileSystem.html#setPrefix">setPrefix</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.DeepZoomImageFileSystem</b>(parameters)
+ </div>
+
+ <div class="description">
+ Creates a new instance of a Deep Zoom Image folder-based filesystem adapter.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>|<a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the associated image parameters</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.DefaultDataLoader.html b/js/vendor/bigshot/doc/js/symbols/bigshot.DefaultDataLoader.html
new file mode 100644
index 00000000..745d72e0
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.DefaultDataLoader.html
@@ -0,0 +1,458 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.DefaultDataLoader - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.DefaultDataLoader
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.DataLoader.html">bigshot.DataLoader</a>.</p>
+
+ <p class="description">
+ Data loader using standard browser functions.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__DefaultDataLoader.js.html">DefaultDataLoader.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.DefaultDataLoader.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.DefaultDataLoader.html#constructor">bigshot.DefaultDataLoader</a></b>(maxRetries, crossOrigin)
+ </div>
+ <div class="description">Creates a new data loader.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.DataLoader.html">bigshot.DataLoader</a>: </dt><dd><a href="../symbols/bigshot.DataLoader.html#loadImage">loadImage</a>, <a href="../symbols/bigshot.DataLoader.html#loadXml">loadXml</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.DefaultDataLoader</b>(maxRetries, crossOrigin)
+ </div>
+
+ <div class="description">
+ Creates a new data loader.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>maxRetries</b>
+ <i>Optional, Default: 0</i>
+ </dt>
+ <dd>the maximum number of times to retry requests</dd>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>crossOrigin</b>
+ <i>Optional</i>
+ </dt>
+ <dd>the CORS crossOrigin parameter to use when loading images</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.Event.html b/js/vendor/bigshot/doc/js/symbols/bigshot.Event.html
new file mode 100644
index 00000000..369f9b7e
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.Event.html
@@ -0,0 +1,833 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.Event - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.Event
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Base class for events. The interface is supposed to be as similar to standard DOM events as possible.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__Event.js.html">Event.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.Event.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Event.html#constructor">bigshot.Event</a></b>(data)
+ </div>
+ <div class="description">Creates an event.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.Event.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Event.html#bubbles">bubbles</a></b>
+ </div>
+ <div class="description">Indicates whether the event bubbles.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Event.html#cancelable">cancelable</a></b>
+ </div>
+ <div class="description">Indicates whether the event is cancelable.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Event.html#currentTarget">currentTarget</a></b>
+ </div>
+ <div class="description">The current target of the event</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Event.html#defaultPrevented">defaultPrevented</a></b>
+ </div>
+ <div class="description">Set if the preventDefault method has been called.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Event.html#isTrusted">isTrusted</a></b>
+ </div>
+ <div class="description">Flag indicating origin of event.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Event.html#target">target</a></b>
+ </div>
+ <div class="description">The target to which the event is dispatched.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Event.html#timeStamp">timeStamp</a></b>
+ </div>
+ <div class="description">The time the event was created, in milliseconds since the epoch.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Event.html#type">type</a></b>
+ </div>
+ <div class="description">The event type.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.Event.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Event.html#preventDefault">preventDefault</a></b>()
+ </div>
+ <div class="description">Prevents default handling of the event.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.Event</b>(data)
+ </div>
+
+ <div class="description">
+ Creates an event.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>data</b>
+
+ </dt>
+ <dd>a data object whose fields will be used to set the corresponding fields of the event object.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="bubbles"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>bubbles</b>
+
+ </div>
+ <div class="description">
+ Indicates whether the event bubbles.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ false
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="cancelable"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>cancelable</b>
+
+ </div>
+ <div class="description">
+ Indicates whether the event is cancelable.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ false
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="currentTarget"> </a>
+ <div class="fixedFont">
+
+
+ <b>currentTarget</b>
+
+ </div>
+ <div class="description">
+ The current target of the event
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ null
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="defaultPrevented"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>defaultPrevented</b>
+
+ </div>
+ <div class="description">
+ Set if the preventDefault method has been called.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ false
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="isTrusted"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>isTrusted</b>
+
+ </div>
+ <div class="description">
+ Flag indicating origin of event.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ false
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="target"> </a>
+ <div class="fixedFont">
+
+
+ <b>target</b>
+
+ </div>
+ <div class="description">
+ The target to which the event is dispatched.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ null
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="timeStamp"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>timeStamp</b>
+
+ </div>
+ <div class="description">
+ The time the event was created, in milliseconds since the epoch.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ the current time, as given by <code>new Date ().getTime ()</code>
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="type"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>type</b>
+
+ </div>
+ <div class="description">
+ The event type.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ null
+ </dd>
+ </dl>
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="preventDefault"> </a>
+ <div class="fixedFont">
+
+
+ <b>preventDefault</b>()
+
+ </div>
+ <div class="description">
+ Prevents default handling of the event.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.EventDispatcher.html b/js/vendor/bigshot/doc/js/symbols/bigshot.EventDispatcher.html
new file mode 100644
index 00000000..fe124e4f
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.EventDispatcher.html
@@ -0,0 +1,665 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.EventDispatcher - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.EventDispatcher
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Base class for objects that dispatch events.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__EventDispatcher.js.html">EventDispatcher.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.EventDispatcher.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.EventDispatcher.html#constructor">bigshot.EventDispatcher</a></b>()
+ </div>
+ <div class="description">Creates an event dispatcher.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.EventDispatcher.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.EventDispatcher.html#eventListeners">eventListeners</a></b>
+ </div>
+ <div class="description">The event listeners.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.EventDispatcher.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.EventDispatcher.html#addEventListener">addEventListener</a></b>(eventName, handler)
+ </div>
+ <div class="description">Adds an event listener to the specified event.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.EventDispatcher.html#fireEvent">fireEvent</a></b>(eventName, eventObject)
+ </div>
+ <div class="description">Fires an event.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.EventDispatcher.html#removeEventListener">removeEventListener</a></b>(eventName, handler)
+ </div>
+ <div class="description">Removes an event listener.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.EventDispatcher</b>()
+ </div>
+
+ <div class="description">
+ Creates an event dispatcher.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="eventListeners"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{Object}</span>
+ <b>eventListeners</b>
+
+ </div>
+ <div class="description">
+ The event listeners. Each key-value pair in the map is an event name and an <code>Array</code> of listeners.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="addEventListener"> </a>
+ <div class="fixedFont">
+
+
+ <b>addEventListener</b>(eventName, handler)
+
+ </div>
+ <div class="description">
+ Adds an event listener to the specified event.
+
+
+ </div>
+
+
+
+ <pre class="code">image.addEventListener ("click", function (event) { ... });</pre>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>eventName</b>
+
+ </dt>
+ <dd>the name of the event to add a listener for</dd>
+
+ <dt>
+ <span class="light fixedFont">{Function}</span> <b>handler</b>
+
+ </dt>
+ <dd>function that is invoked with an event object when the event is fired</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="fireEvent"> </a>
+ <div class="fixedFont">
+
+
+ <b>fireEvent</b>(eventName, eventObject)
+
+ </div>
+ <div class="description">
+ Fires an event.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>eventName</b>
+
+ </dt>
+ <dd>the name of the event to fire</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Event.html">bigshot.Event</a>}</span> <b>eventObject</b>
+
+ </dt>
+ <dd>the event object to pass to the handlers</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="removeEventListener"> </a>
+ <div class="fixedFont">
+
+
+ <b>removeEventListener</b>(eventName, handler)
+
+ </div>
+ <div class="description">
+ Removes an event listener.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>eventName</b>
+
+ </dt>
+ <dd>the name of the event to remove a listener for</dd>
+
+ <dt>
+ <span class="light fixedFont">{Function}</span> <b>handler</b>
+
+ </dt>
+ <dd>the handler to remove</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.FileSystem.html b/js/vendor/bigshot/doc/js/symbols/bigshot.FileSystem.html
new file mode 100644
index 00000000..59522b68
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.FileSystem.html
@@ -0,0 +1,675 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.FileSystem - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.FileSystem
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Abstract filesystem definition.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__FileSystem.js.html">FileSystem.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.FileSystem.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.FileSystem.html#constructor">bigshot.FileSystem</a></b>()
+ </div>
+ <div class="description">Abstract filesystem definition.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.FileSystem.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.FileSystem.html#getDescriptor">getDescriptor</a></b>()
+ </div>
+ <div class="description">Returns an image descriptor object from the descriptor file.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.FileSystem.html#getFilename">getFilename</a></b>(name)
+ </div>
+ <div class="description">Returns the URL filename for the given filesystem entry.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.FileSystem.html#getImageFilename">getImageFilename</a></b>(tileX, tileY, zoomLevel)
+ </div>
+ <div class="description">Returns the entry filename for the given tile.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.FileSystem.html#getPosterFilename">getPosterFilename</a></b>()
+ </div>
+ <div class="description">Returns the poster URL filename.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.FileSystem.html#setPrefix">setPrefix</a></b>(prefix)
+ </div>
+ <div class="description">Sets an optional prefix that is prepended, along with a forward slash ("/"), to all names.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.FileSystem</b>()
+ </div>
+
+ <div class="description">
+ Abstract filesystem definition.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="getDescriptor"> </a>
+ <div class="fixedFont">
+
+
+ <b>getDescriptor</b>()
+
+ </div>
+ <div class="description">
+ Returns an image descriptor object from the descriptor file.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>a descriptor object</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="getFilename"> </a>
+ <div class="fixedFont">
+
+
+ <b>getFilename</b>(name)
+
+ </div>
+ <div class="description">
+ Returns the URL filename for the given filesystem entry.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>name</b>
+
+ </dt>
+ <dd>the entry name</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getImageFilename"> </a>
+ <div class="fixedFont">
+
+
+ <b>getImageFilename</b>(tileX, tileY, zoomLevel)
+
+ </div>
+ <div class="description">
+ Returns the entry filename for the given tile.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>tileX</b>
+
+ </dt>
+ <dd>the column of the tile</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>tileY</b>
+
+ </dt>
+ <dd>the row of the tile</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>zoomLevel</b>
+
+ </dt>
+ <dd>the zoom level</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getPosterFilename"> </a>
+ <div class="fixedFont">
+
+
+ <b>getPosterFilename</b>()
+
+ </div>
+ <div class="description">
+ Returns the poster URL filename. For Bigshot images this is typically the URL corresponding to the entry "poster.jpg", but for other filesystems it can be different.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setPrefix"> </a>
+ <div class="fixedFont">
+
+
+ <b>setPrefix</b>(prefix)
+
+ </div>
+ <div class="description">
+ Sets an optional prefix that is prepended, along with a forward slash ("/"), to all names.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>prefix</b>
+
+ </dt>
+ <dd>the prefix</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.FolderFileSystem.html b/js/vendor/bigshot/doc/js/symbols/bigshot.FolderFileSystem.html
new file mode 100644
index 00000000..59723748
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.FolderFileSystem.html
@@ -0,0 +1,452 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.FolderFileSystem - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.FolderFileSystem
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>.</p>
+
+ <p class="description">
+ Folder-based filesystem.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__FolderFileSystem.js.html">FolderFileSystem.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.FolderFileSystem.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.FolderFileSystem.html#constructor">bigshot.FolderFileSystem</a></b>(parameters)
+ </div>
+ <div class="description">Creates a new instance of a folder-based filesystem adapter.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>: </dt><dd><a href="../symbols/bigshot.FileSystem.html#getDescriptor">getDescriptor</a>, <a href="../symbols/bigshot.FileSystem.html#getFilename">getFilename</a>, <a href="../symbols/bigshot.FileSystem.html#getImageFilename">getImageFilename</a>, <a href="../symbols/bigshot.FileSystem.html#getPosterFilename">getPosterFilename</a>, <a href="../symbols/bigshot.FileSystem.html#setPrefix">setPrefix</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.FolderFileSystem</b>(parameters)
+ </div>
+
+ <div class="description">
+ Creates a new instance of a folder-based filesystem adapter.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>|<a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the associated image parameters</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.FullScreen.html b/js/vendor/bigshot/doc/js/symbols/bigshot.FullScreen.html
new file mode 100644
index 00000000..fd438414
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.FullScreen.html
@@ -0,0 +1,656 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.FullScreen - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.FullScreen
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ A utility class for making an element "full screen", or as close to that as browser security allows. If the browser supports the <code>requestFullScreen</code> API - as standard or as <code>moz</code>- or <code>webkit</code>- extensions, this will be used.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__FullScreen.js.html">FullScreen.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.FullScreen.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.FullScreen.html#constructor">bigshot.FullScreen</a></b>(container)
+ </div>
+ <div class="description">Creates a new full-screen handler for an element.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.FullScreen.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.FullScreen.html#addOnClose">addOnClose</a></b>(onClose)
+ </div>
+ <div class="description">Adds a function that will run when exiting full screen mode.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.FullScreen.html#addOnResize">addOnResize</a></b>(onResize)
+ </div>
+ <div class="description">Adds a function that will run when the element is resized.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.FullScreen.html#close">close</a></b>()
+ </div>
+ <div class="description">Ends full screen mode.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b>exitFullScreenHandler</b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.FullScreen.html#open">open</a></b>()
+ </div>
+ <div class="description">Begins full screen mode.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.FullScreen</b>(container)
+ </div>
+
+ <div class="description">
+ Creates a new full-screen handler for an element.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>container</b>
+
+ </dt>
+ <dd>the element that is to be made full screen</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="addOnClose"> </a>
+ <div class="fixedFont">
+
+
+ <b>addOnClose</b>(onClose)
+
+ </div>
+ <div class="description">
+ Adds a function that will run when exiting full screen mode.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>onClose</b>
+
+ </dt>
+ <dd>the function to call</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="addOnResize"> </a>
+ <div class="fixedFont">
+
+
+ <b>addOnResize</b>(onResize)
+
+ </div>
+ <div class="description">
+ Adds a function that will run when the element is resized.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>onResize</b>
+
+ </dt>
+ <dd>the function to call</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="close"> </a>
+ <div class="fixedFont">
+
+
+ <b>close</b>()
+
+ </div>
+ <div class="description">
+ Ends full screen mode.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="exitFullScreenHandler"> </a>
+ <div class="fixedFont">
+
+
+ <b>exitFullScreenHandler</b>()
+
+ </div>
+ <div class="description">
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="open"> </a>
+ <div class="fixedFont">
+
+
+ <b>open</b>()
+
+ </div>
+ <div class="description">
+ Begins full screen mode.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.HTMLDivElementLayer.html b/js/vendor/bigshot/doc/js/symbols/bigshot.HTMLDivElementLayer.html
new file mode 100644
index 00000000..c7073a38
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.HTMLDivElementLayer.html
@@ -0,0 +1,486 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.HTMLDivElementLayer - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.HTMLDivElementLayer
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.Layer.html">bigshot.Layer</a>.</p>
+
+ <p class="description">
+ A layer consisting of a single HTML element that is moved and scaled to cover the layer.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__HTMLDivElementLayer.js.html">HTMLDivElementLayer.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.HTMLDivElementLayer.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.HTMLDivElementLayer.html#constructor">bigshot.HTMLDivElementLayer</a></b>(image, element, width, height, wrapX, wrapY)
+ </div>
+ <div class="description">Creates a new HTML element layer.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.Layer.html">bigshot.Layer</a>: </dt><dd><a href="../symbols/bigshot.Layer.html#getContainer">getContainer</a>, <a href="../symbols/bigshot.Layer.html#layout">layout</a>, <a href="../symbols/bigshot.Layer.html#resize">resize</a>, <a href="../symbols/bigshot.Layer.html#setMaxTiles">setMaxTiles</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.HTMLDivElementLayer</b>(image, element, width, height, wrapX, wrapY)
+ </div>
+
+ <div class="description">
+ Creates a new HTML element layer. The layer must be added to the image using <a href="../symbols/bigshot.ImageBase.html#addLayer">bigshot.ImageBase#addLayer</a>.
+
+ </div>
+
+
+
+ <pre class="code">var image = new bigshot.Image (...); image.addLayer ( new bigshot.HTMLElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height) );</pre>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>}</span> <b>image</b>
+
+ </dt>
+ <dd>the image this hotspot layer will be part of</dd>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>element</b>
+
+ </dt>
+ <dd>the element to present in this layer</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>width</b>
+
+ </dt>
+ <dd>the width, in image pixels (display size at zoom level 0), of the HTML element</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>height</b>
+
+ </dt>
+ <dd>the height, in image pixels (display size at zoom level 0), of the HTML element</dd>
+
+ <dt>
+ <b>wrapX</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>wrapY</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.HTMLElementLayer.html b/js/vendor/bigshot/doc/js/symbols/bigshot.HTMLElementLayer.html
new file mode 100644
index 00000000..13e25210
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.HTMLElementLayer.html
@@ -0,0 +1,474 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.HTMLElementLayer - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.HTMLElementLayer
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.Layer.html">bigshot.Layer</a>.</p>
+
+ <p class="description">
+ A layer consisting of a single HTML element that is moved and scaled to cover the layer.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__HTMLElementLayer.js.html">HTMLElementLayer.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.HTMLElementLayer.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.HTMLElementLayer.html#constructor">bigshot.HTMLElementLayer</a></b>(image, element, width, height)
+ </div>
+ <div class="description">Creates a new HTML element layer.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.Layer.html">bigshot.Layer</a>: </dt><dd><a href="../symbols/bigshot.Layer.html#getContainer">getContainer</a>, <a href="../symbols/bigshot.Layer.html#layout">layout</a>, <a href="../symbols/bigshot.Layer.html#resize">resize</a>, <a href="../symbols/bigshot.Layer.html#setMaxTiles">setMaxTiles</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.HTMLElementLayer</b>(image, element, width, height)
+ </div>
+
+ <div class="description">
+ Creates a new HTML element layer. The layer must be added to the image using <a href="../symbols/bigshot.ImageBase.html#addLayer">bigshot.ImageBase#addLayer</a>.
+
+ </div>
+
+
+
+ <pre class="code">var image = new bigshot.Image (...); image.addLayer ( new bigshot.HTMLElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height) );</pre>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>}</span> <b>image</b>
+
+ </dt>
+ <dd>the image this hotspot layer will be part of</dd>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>element</b>
+
+ </dt>
+ <dd>the element to present in this layer</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>width</b>
+
+ </dt>
+ <dd>the width, in image pixels (display size at zoom level 0), of the HTML element</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>height</b>
+
+ </dt>
+ <dd>the height, in image pixels (display size at zoom level 0), of the HTML element</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.HomogeneousPoint3D.html b/js/vendor/bigshot/doc/js/symbols/bigshot.HomogeneousPoint3D.html
new file mode 100644
index 00000000..b281e16a
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.HomogeneousPoint3D.html
@@ -0,0 +1,581 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.HomogeneousPoint3D - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.HomogeneousPoint3D
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ A 3d homogenous point.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__types.js.html">types.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.HomogeneousPoint3D.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.HomogeneousPoint3D.html#constructor">bigshot.HomogeneousPoint3D</a></b>()
+ </div>
+ <div class="description">This class has no constructor, it is created as an object literal.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.HomogeneousPoint3D.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.HomogeneousPoint3D.html#w">w</a></b>
+ </div>
+ <div class="description">the w-coordinate</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.HomogeneousPoint3D.html#x">x</a></b>
+ </div>
+ <div class="description">the x-coordinate</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.HomogeneousPoint3D.html#y">y</a></b>
+ </div>
+ <div class="description">the y-coordinate</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.HomogeneousPoint3D.html#z">z</a></b>
+ </div>
+ <div class="description">the z-coordinate</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.HomogeneousPoint3D</b>()
+ </div>
+
+ <div class="description">
+ This class has no constructor, it is created as an object literal.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="w"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>w</b>
+
+ </div>
+ <div class="description">
+ the w-coordinate
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="x"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>x</b>
+
+ </div>
+ <div class="description">
+ the x-coordinate
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="y"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>y</b>
+
+ </div>
+ <div class="description">
+ the y-coordinate
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="z"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>z</b>
+
+ </div>
+ <div class="description">
+ the z-coordinate
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.Hotspot.html b/js/vendor/bigshot/doc/js/symbols/bigshot.Hotspot.html
new file mode 100644
index 00000000..bc1f737a
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.Hotspot.html
@@ -0,0 +1,584 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.Hotspot - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.Hotspot
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Base class for hotspots in a <a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a>. See <a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a> for examples.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__Hotspot.js.html">Hotspot.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.Hotspot.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Hotspot.html#constructor">bigshot.Hotspot</a></b>(x, y, w, h)
+ </div>
+ <div class="description">Creates a new hotspot instance.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.Hotspot.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Hotspot.html#getElement">getElement</a></b>()
+ </div>
+ <div class="description">Returns the HTMLDivElement used to show the hotspot.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Hotspot.html#layout">layout</a></b>(x0, y0, zoomFactor)
+ </div>
+ <div class="description">Lays out the hotspot in the viewport.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.Hotspot</b>(x, y, w, h)
+ </div>
+
+ <div class="description">
+ Creates a new hotspot instance.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>x</b>
+
+ </dt>
+ <dd>x-coordinate of the top-left corner, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>y</b>
+
+ </dt>
+ <dd>y-coordinate of the top-left corner, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>w</b>
+
+ </dt>
+ <dd>width of the hotspot, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>h</b>
+
+ </dt>
+ <dd>height of the hotspot, given in full image pixels</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a></dd>
+
+ <dd><a href="../symbols/bigshot.LabeledHotspot.html">bigshot.LabeledHotspot</a></dd>
+
+ <dd><a href="../symbols/bigshot.LinkHotspot.html">bigshot.LinkHotspot</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="getElement"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{HTMLDivElement}</span>
+ <b>getElement</b>()
+
+ </div>
+ <div class="description">
+ Returns the HTMLDivElement used to show the hotspot. Clients can access this element in order to style it.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="layout"> </a>
+ <div class="fixedFont">
+
+
+ <b>layout</b>(x0, y0, zoomFactor)
+
+ </div>
+ <div class="description">
+ Lays out the hotspot in the viewport.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>x0</b>
+
+ </dt>
+ <dd>x-coordinate of top-left corner of the full image in css pixels</dd>
+
+ <dt>
+ <b>y0</b>
+
+ </dt>
+ <dd>y-coordinate of top-left corner of the full image in css pixels</dd>
+
+ <dt>
+ <b>zoomFactor</b>
+
+ </dt>
+ <dd>the zoom factor.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.HotspotLayer.html b/js/vendor/bigshot/doc/js/symbols/bigshot.HotspotLayer.html
new file mode 100644
index 00000000..fe2c06e7
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.HotspotLayer.html
@@ -0,0 +1,519 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.HotspotLayer - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.HotspotLayer
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.Layer.html">bigshot.Layer</a>.</p>
+
+ <p class="description">
+ A hotspot layer.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__HotspotLayer.js.html">HotspotLayer.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.HotspotLayer.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.HotspotLayer.html#constructor">bigshot.HotspotLayer</a></b>(image)
+ </div>
+ <div class="description">Creates a new hotspot layer.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.HotspotLayer.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.HotspotLayer.html#addHotspot">addHotspot</a></b>(hotspot)
+ </div>
+ <div class="description">Adds a hotspot to the layer.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.Layer.html">bigshot.Layer</a>: </dt><dd><a href="../symbols/bigshot.Layer.html#getContainer">getContainer</a>, <a href="../symbols/bigshot.Layer.html#layout">layout</a>, <a href="../symbols/bigshot.Layer.html#resize">resize</a>, <a href="../symbols/bigshot.Layer.html#setMaxTiles">setMaxTiles</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.HotspotLayer</b>(image)
+ </div>
+
+ <div class="description">
+ Creates a new hotspot layer. The layer must be added to the image using <a href="../symbols/bigshot.ImageBase.html#addLayer">bigshot.ImageBase#addLayer</a>.
+
+ </div>
+
+
+
+ <pre class="code">var image = new bigshot.Image (...); var hotspotLayer = new bigshot.HotspotLayer (image); var hotspot = new bigshot.LinkHotspot (100, 100, 200, 100, "Bigshot on Google Code", "http://code.google.com/p/bigshot/"); // Style the hotspot a bit hotspot.getElement ().className = "hotspot"; hotspot.getLabel ().className = "label"; hotspotLayer.addHotspot (hotspot); image.addLayer (hotspotLayer);</pre>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>}</span> <b>image</b>
+
+ </dt>
+ <dd>the image this hotspot layer will be part of</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="addHotspot"> </a>
+ <div class="fixedFont">
+
+
+ <b>addHotspot</b>(hotspot)
+
+ </div>
+ <div class="description">
+ Adds a hotspot to the layer.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Hotspot.html">bigshot.Hotspot</a>}</span> <b>hotspot</b>
+
+ </dt>
+ <dd>the hotspot to add.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.Image.html b/js/vendor/bigshot/doc/js/symbols/bigshot.Image.html
new file mode 100644
index 00000000..23b15c8c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.Image.html
@@ -0,0 +1,481 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.Image - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.Image
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>.</p>
+
+ <p class="description">
+ A tiled, zoomable image viewer. <h3 id="creating-a-wrapping-image">Creating a Wrapping Image</h3> <p>If you have set the wrapX or wrapY parameters in the <a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>, the image must be an integer multiple of the tile size at the desired minimum zoom level, otherwise there will be a gap at the wrap point: <p>The way to figure out the proper input size is this: <ol> <li><p>Decide on a tile size and call this <i>tileSize</i>.</p></li> <li><p>Decide on a minimum integer zoom level, and call this <i>minZoom</i>.</p></li> <li><p>Compute <i>tileSize * 2<sup>-minZoom</sup></i>, call this <i>S</i>.</p></li> <li><p>The source image size along the wrapped axis must be evenly divisible by <i>S</i>.</p></li> </ol> <p>An example:</p> <ol> <li><p>I have an image that is 23148x3242 pixels.</p></li> <li><p>I chose 256x256 pixel tiles: <i>tileSize = 256</i>.</p></li> <li><p>When displaying the image, I want the user to be able to zoom out so that the whole image is less than or equal to 600 pixels tall. Since the image is 3242 pixels tall originally, I will need a <i>minZoom</i> of -3. A <i>minZoom</i> of -2 would only let me zoom out to 1/4 (2<sup>-2</sup>), or an image that is 810 pixels tall. A <i>minZoom</i> of -3, however lets me zoom out to 1/8 (2<sup>-3</sup>), or an image that is 405 pixels tall. Thus: <i>minZoom = -3</i></p></li> <li><p>Computing <i>S</i> gives: <i>S = 256 * 2<sup>3</sup> = 256 * 8 = 2048</i></p></li> <li><p>I want it to wrap along the X axis. Therefore I may have to adjust the width, currently 23148 pixels.</p></li> <li><p>Rounding 23148 down to the nearest multiple of 2048 gives 22528. (23148 divided by 2048 is 11.3, and 11 times 2048 is 22528.)</p></li> <li><p>I will shrink my source image to be 22528 pixels wide before building the image pyramid, and I will set the <code>minZoom</code> parameter to -3 in the <a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a> when creating the image. (I will also set <code>wrapX</code> to <code>true</code>.)</p></li> </ol>
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__Image.js.html">Image.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.Image.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Image.html#constructor">bigshot.Image</a></b>(parameters)
+ </div>
+ <div class="description">Creates a new tiled image viewer.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Fields borrowed from class <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>: </dt><dd><a href="../symbols/bigshot.EventDispatcher.html#eventListeners">eventListeners</a></dd>
+ </dl>
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>: </dt><dd><a href="../symbols/bigshot.ImageBase.html#addLayer">addLayer</a>, <a href="../symbols/bigshot.ImageBase.html#adjustCoordinateForZoom">adjustCoordinateForZoom</a>, <a href="../symbols/bigshot.ImageBase.html#clampXY">clampXY</a>, <a href="../symbols/bigshot.ImageBase.html#clampZoom">clampZoom</a>, <a href="../symbols/bigshot.ImageBase.html#clientToImage">clientToImage</a>, <a href="../symbols/bigshot.ImageBase.html#createImageEventData">createImageEventData</a>, <a href="../symbols/bigshot.ImageBase.html#createLayerContainer">createLayerContainer</a>, <a href="../symbols/bigshot.ImageBase.html#dispose">dispose</a>, <a href="../symbols/bigshot.ImageBase.html#exitFullScreen">exitFullScreen</a>, <a href="../symbols/bigshot.ImageBase.html#fitZoom">fitZoom</a>, <a href="../symbols/bigshot.ImageBase.html#flyTo">flyTo</a>, <a href="../symbols/bigshot.ImageBase.html#flyZoomToFit">flyZoomToFit</a>, <a href="../symbols/bigshot.ImageBase.html#flyZoomToFitHeight">flyZoomToFitHeight</a>, <a href="../symbols/bigshot.ImageBase.html#flyZoomToFitWidth">flyZoomToFitWidth</a>, <a href="../symbols/bigshot.ImageBase.html#fullScreen">fullScreen</a>, <a href="../symbols/bigshot.ImageBase.html#getContainer">getContainer</a>, <a href="../symbols/bigshot.ImageBase.html#getMaxZoom">getMaxZoom</a>, <a href="../symbols/bigshot.ImageBase.html#getMinZoom">getMinZoom</a>, <a href="../symbols/bigshot.ImageBase.html#getTouchAreaBaseSize">getTouchAreaBaseSize</a>, <a href="../symbols/bigshot.ImageBase.html#getX">getX</a>, <a href="../symbols/bigshot.ImageBase.html#getY">getY</a>, <a href="../symbols/bigshot.ImageBase.html#getZoom">getZoom</a>, <a href="../symbols/bigshot.ImageBase.html#getZoomToFillValue">getZoomToFillValue</a>, <a href="../symbols/bigshot.ImageBase.html#getZoomToFitValue">getZoomToFitValue</a>, <a href="../symbols/bigshot.ImageBase.html#layout">layout</a>, <a href="../symbols/bigshot.ImageBase.html#moveTo">moveTo</a>, <a href="../symbols/bigshot.ImageBase.html#onresize">onresize</a>, <a href="../symbols/bigshot.ImageBase.html#rectVisibleAtZoomLevel">rectVisibleAtZoomLevel</a>, <a href="../symbols/bigshot.ImageBase.html#resize">resize</a>, <a href="../symbols/bigshot.ImageBase.html#setMaxZoom">setMaxZoom</a>, <a href="../symbols/bigshot.ImageBase.html#setMinZoom">setMinZoom</a>, <a href="../symbols/bigshot.ImageBase.html#setupLayers">setupLayers</a>, <a href="../symbols/bigshot.ImageBase.html#showTouchUI">showTouchUI</a>, <a href="../symbols/bigshot.ImageBase.html#stopFlying">stopFlying</a>, <a href="../symbols/bigshot.ImageBase.html#zoomToFill">zoomToFill</a>, <a href="../symbols/bigshot.ImageBase.html#zoomToFit">zoomToFit</a>, <a href="../symbols/bigshot.ImageBase.html#zoomToFitHeight">zoomToFitHeight</a>, <a href="../symbols/bigshot.ImageBase.html#zoomToFitWidth">zoomToFitWidth</a></dd><dt>Methods borrowed from class <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>: </dt><dd><a href="../symbols/bigshot.EventDispatcher.html#addEventListener">addEventListener</a>, <a href="../symbols/bigshot.EventDispatcher.html#fireEvent">fireEvent</a>, <a href="../symbols/bigshot.EventDispatcher.html#removeEventListener">removeEventListener</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Events borrowed from class <a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>: </dt><dd><a href="../symbols/bigshot.ImageBase.html#event:click">click</a>, <a href="../symbols/bigshot.ImageBase.html#event:dblclick">dblclick</a></dd>
+ </dl>
+
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.Image</b>(parameters)
+ </div>
+
+ <div class="description">
+ Creates a new tiled image viewer. (Note: See <a href="../symbols/bigshot.ImageBase.html#dispose">bigshot.ImageBase#dispose</a> for important information.)
+
+ </div>
+
+
+
+ <pre class="code">var bsi = new bigshot.Image ( new bigshot.ImageParameters ({ basePath : "/bigshot.php?file=myshot.bigshot", fileSystemType : "archive", container : document.getElementById ("bigshot_div") }));</pre>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the image parameters. Required fields are: <code>basePath</code> and <code>container</code>. If you intend to use the archive filesystem, you need to set the <code>fileSystemType</code> to <code>"archive"</code> as well.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.ImageBase.html#dispose">bigshot.ImageBase#dispose</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.ImageBase.html b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageBase.html
new file mode 100644
index 00000000..96c571fa
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageBase.html
@@ -0,0 +1,2209 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.ImageBase - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.ImageBase
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>.</p>
+
+ <p class="description">
+ Base class for image viewers.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__ImageBase.js.html">ImageBase.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.ImageBase.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageBase.html#constructor">bigshot.ImageBase</a></b>(parameters)
+ </div>
+ <div class="description">Sets up base image functionality.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Fields borrowed from class <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>: </dt><dd><a href="../symbols/bigshot.EventDispatcher.html#eventListeners">eventListeners</a></dd>
+ </dl>
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.ImageBase.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#addLayer">addLayer</a></b>(layer)
+ </div>
+ <div class="description">Adds a new layer to the image.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#adjustCoordinateForZoom">adjustCoordinateForZoom</a></b>(current, centerOfZoom, oldZoom, oldZoom)
+ </div>
+ <div class="description">Adjusts a coordinate so that the center of zoom remains constant during zooming operations.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#clampXY">clampXY</a></b>(x, y)
+ </div>
+ <div class="description">Constrains the x and y coordinates to allowed values</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#clampZoom">clampZoom</a></b>(zoom)
+ </div>
+ <div class="description">Clamps the zoom value to be between minZoom and maxZoom.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#clientToImage">clientToImage</a></b>(clientX, clientY)
+ </div>
+ <div class="description">Converts client-relative screen coordinates to image coordinates.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#createImageEventData">createImageEventData</a></b>(data)
+ </div>
+ <div class="description">Creates a new <a href="../symbols/bigshot.ImageEvent.html">bigshot.ImageEvent</a> using the supplied data object, transforming the client x- and y-coordinates to local and image coordinates.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#createLayerContainer">createLayerContainer</a></b>()
+ </div>
+ <div class="description">Creates a HTML div container for a layer.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#dispose">dispose</a></b>()
+ </div>
+ <div class="description">Unregisters event handlers and other page-level hooks.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#exitFullScreen">exitFullScreen</a></b>()
+ </div>
+ <div class="description">Forces exit from full screen mode, if we're there.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#fitZoom">fitZoom</a></b>(imageDimension, containerDimension)
+ </div>
+ <div class="description">Helper function for calculating zoom levels.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#flyTo">flyTo</a></b>(x, y, zoom, uniformApproach)
+ </div>
+ <div class="description">Smoothly flies to the specified position.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#flyZoomToFit">flyZoomToFit</a></b>()
+ </div>
+ <div class="description">Smoothly adjust the zoom level to fit the full image in the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#flyZoomToFitHeight">flyZoomToFitHeight</a></b>()
+ </div>
+ <div class="description">Smoothly adjust the zoom level to fit the image height in the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#flyZoomToFitWidth">flyZoomToFitWidth</a></b>()
+ </div>
+ <div class="description">Smoothly adjust the zoom level to fit the image width in the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#fullScreen">fullScreen</a></b>(onClose)
+ </div>
+ <div class="description">Maximizes the image to cover the browser viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#getContainer">getContainer</a></b>()
+ </div>
+ <div class="description">Returns the div element used as viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#getMaxZoom">getMaxZoom</a></b>()
+ </div>
+ <div class="description">Gets the maximum zoom value.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#getMinZoom">getMinZoom</a></b>()
+ </div>
+ <div class="description">Gets the minimum zoom value.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#getTouchAreaBaseSize">getTouchAreaBaseSize</a></b>()
+ </div>
+ <div class="description">Returns the base size in screen pixels of the two zoom touch areas.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#getX">getX</a></b>()
+ </div>
+ <div class="description">Returns the current x-coordinate, which is the full-image x coordinate in the center of the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#getY">getY</a></b>()
+ </div>
+ <div class="description">Returns the current y-coordinate, which is the full-image x coordinate in the center of the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#getZoom">getZoom</a></b>()
+ </div>
+ <div class="description">Returns the current zoom level.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#getZoomToFillValue">getZoomToFillValue</a></b>()
+ </div>
+ <div class="description">Returns the zoom level at which the image fills the whole viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#getZoomToFitValue">getZoomToFitValue</a></b>()
+ </div>
+ <div class="description">Returns the maximum zoom level at which the full image is visible in the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#layout">layout</a></b>()
+ </div>
+ <div class="description">Lays out all layers according to the current x, y and zoom values.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#moveTo">moveTo</a></b>(x, y, zoom, updateViewport)
+ </div>
+ <div class="description">Stops any current flyTo operation and sets the current position.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#onresize">onresize</a></b>()
+ </div>
+ <div class="description">Triggers a right-sizing of all layers.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#rectVisibleAtZoomLevel">rectVisibleAtZoomLevel</a></b>(w, h)
+ </div>
+ <div class="description">Returns the maximum zoom level at which a rectangle with the given dimensions fit into the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#resize">resize</a></b>()
+ </div>
+ <div class="description">Resizes the layers of this image.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#setMaxZoom">setMaxZoom</a></b>(maxZoom)
+ </div>
+ <div class="description">Sets the maximum zoom value.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#setMinZoom">setMinZoom</a></b>(minZoom)
+ </div>
+ <div class="description">Sets the minimum zoom value.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#setupLayers">setupLayers</a></b>()
+ </div>
+ <div class="description">Sets up the initial layers of the image.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#showTouchUI">showTouchUI</a></b>(delay, fadeOut)
+ </div>
+ <div class="description">Briefly shows the touch ui zones.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#stopFlying">stopFlying</a></b>()
+ </div>
+ <div class="description">Interrupts the current #flyTo, if one is active.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#zoomToFill">zoomToFill</a></b>()
+ </div>
+ <div class="description">Adjust the zoom level to fit the image in the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#zoomToFit">zoomToFit</a></b>()
+ </div>
+ <div class="description">Adjust the zoom level to fit the image in the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#zoomToFitHeight">zoomToFitHeight</a></b>()
+ </div>
+ <div class="description">Adjust the zoom level to fit the image height in the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#zoomToFitWidth">zoomToFitWidth</a></b>()
+ </div>
+ <div class="description">Adjust the zoom level to fit the image width in the viewport.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>: </dt><dd><a href="../symbols/bigshot.EventDispatcher.html#addEventListener">addEventListener</a>, <a href="../symbols/bigshot.EventDispatcher.html#fireEvent">fireEvent</a>, <a href="../symbols/bigshot.EventDispatcher.html#removeEventListener">removeEventListener</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the events documented in the class bigshot.ImageBase.">
+ <caption>Event Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Event Attributes</th>
+ <th scope="col">Event Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#event:click">click</a></b>(event)
+ </div>
+ <div class="description">Fired when the user clicks on (but does not drag) the image</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageBase.html#event:dblclick">dblclick</a></b>(event)
+ </div>
+ <div class="description">Fired when the user double-clicks on the image</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+
+ </dl>
+
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.ImageBase</b>(parameters)
+ </div>
+
+ <div class="description">
+ Sets up base image functionality.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the image parameters</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="addLayer"> </a>
+ <div class="fixedFont">
+
+
+ <b>addLayer</b>(layer)
+
+ </div>
+ <div class="description">
+ Adds a new layer to the image.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Layer.html">bigshot.Layer</a>}</span> <b>layer</b>
+
+ </dt>
+ <dd>the layer to add.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a> for usage example</dd>
+
+ </dl>
+
+
+ <hr />
+
+ <a name="adjustCoordinateForZoom"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>adjustCoordinateForZoom</b>(current, centerOfZoom, oldZoom, oldZoom)
+
+ </div>
+ <div class="description">
+ Adjusts a coordinate so that the center of zoom remains constant during zooming operations. The method is intended to be called twice, once for x and once for y. The <code>current</code> and <code>centerOfZoom</code> values will be the current and the center for the x and y, respectively.
+
+
+ </div>
+
+
+
+ <pre class="code">this.x = this.adjustCoordinateForZoom (this.x, zoomCenterX, oldZoom, newZoom); this.y = this.adjustCoordinateForZoom (this.y, zoomCenterY, oldZoom, newZoom);</pre>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>current</b>
+
+ </dt>
+ <dd>the current value of the coordinate</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>centerOfZoom</b>
+
+ </dt>
+ <dd>the center of zoom along the coordinate axis</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>oldZoom</b>
+
+ </dt>
+ <dd>the old zoom value</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>oldZoom</b>
+
+ </dt>
+ <dd>the new zoom value</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the new value for the coordinate</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="clampXY"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number, number}</span>
+ <b>clampXY</b>(x, y)
+
+ </div>
+ <div class="description">
+ Constrains the x and y coordinates to allowed values
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>x</b>
+
+ </dt>
+ <dd>the initial x coordinate</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>y</b>
+
+ </dt>
+ <dd>the initial y coordinate</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd><span class="light fixedFont">{number}</span> .x the constrained x coordinate</dd>
+
+ <dd><span class="light fixedFont">{number}</span> .y the constrained y coordinate</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="clampZoom"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>clampZoom</b>(zoom)
+
+ </div>
+ <div class="description">
+ Clamps the zoom value to be between minZoom and maxZoom.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>zoom</b>
+
+ </dt>
+ <dd>the zoom value</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="clientToImage"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{Object}</span>
+ <b>clientToImage</b>(clientX, clientY)
+
+ </div>
+ <div class="description">
+ Converts client-relative screen coordinates to image coordinates.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>clientX</b>
+
+ </dt>
+ <dd>the client x-coordinate</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>clientY</b>
+
+ </dt>
+ <dd>the client y-coordinate</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd><span class="light fixedFont">{number}</span> .x the image x-coordinate</dd>
+
+ <dd><span class="light fixedFont">{number}</span> .y the image y-coordinate</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="createImageEventData"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.ImageEvent.html">bigshot.ImageEvent</a>}</span>
+ <b>createImageEventData</b>(data)
+
+ </div>
+ <div class="description">
+ Creates a new <a href="../symbols/bigshot.ImageEvent.html">bigshot.ImageEvent</a> using the supplied data object, transforming the client x- and y-coordinates to local and image coordinates. The returned event object will have the <a href="../symbols/bigshot.ImageEvent.html#localX">bigshot.ImageEvent#localX</a>, <a href="../symbols/bigshot.ImageEvent.html#localY">bigshot.ImageEvent#localY</a>, <a href="../symbols/bigshot.ImageEvent.html#imageX">bigshot.ImageEvent#imageX</a>, <a href="../symbols/bigshot.ImageEvent.html#imageY">bigshot.ImageEvent#imageY</a>, <a href="../symbols/bigshot.Event.html#target">bigshot.Event#target</a> and <a href="../symbols/bigshot.Event.html#currentTarget">bigshot.Event#currentTarget</a> fields set.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>data</b>
+
+ </dt>
+ <dd>data object with initial values for the event object</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>data.clientX</b>
+
+ </dt>
+ <dd>the clientX of the event</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>data.clientY</b>
+
+ </dt>
+ <dd>the clientY of the event</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the new event object</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="createLayerContainer"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{HTMLDivElement}</span>
+ <b>createLayerContainer</b>()
+
+ </div>
+ <div class="description">
+ Creates a HTML div container for a layer. This method is called by the layer's constructor to obtain a container.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="dispose"> </a>
+ <div class="fixedFont">
+
+
+ <b>dispose</b>()
+
+ </div>
+ <div class="description">
+ Unregisters event handlers and other page-level hooks. The client need not call this method unless bigshot images are created and removed from the page dynamically. In that case, this method must be called when the client wishes to free the resources allocated by the image. Otherwise the browser will garbage-collect all resources automatically.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="exitFullScreen"> </a>
+ <div class="fixedFont">
+
+
+ <b>exitFullScreen</b>()
+
+ </div>
+ <div class="description">
+ Forces exit from full screen mode, if we're there.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="fitZoom"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>fitZoom</b>(imageDimension, containerDimension)
+
+ </div>
+ <div class="description">
+ Helper function for calculating zoom levels.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>imageDimension</b>
+
+ </dt>
+ <dd>the image dimension in full-image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>containerDimension</b>
+
+ </dt>
+ <dd>the container dimension in screen pixels</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the zoom level at which the given number of full-image pixels occupy the given number of screen pixels.</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="flyTo"> </a>
+ <div class="fixedFont">
+
+
+ <b>flyTo</b>(x, y, zoom, uniformApproach)
+
+ </div>
+ <div class="description">
+ Smoothly flies to the specified position.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>x</b>
+ <i>Optional, Default: current x</i>
+ </dt>
+ <dd>the new x-coordinate</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>y</b>
+ <i>Optional, Default: current y</i>
+ </dt>
+ <dd>the new y-coordinate</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>zoom</b>
+ <i>Optional, Default: current zoom</i>
+ </dt>
+ <dd>the new zoom level</dd>
+
+ <dt>
+ <span class="light fixedFont">{boolean}</span> <b>uniformApproach</b>
+ <i>Optional, Default: false</i>
+ </dt>
+ <dd>if true, uses the same interpolation curve for x, y and zoom.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="flyZoomToFit"> </a>
+ <div class="fixedFont">
+
+
+ <b>flyZoomToFit</b>()
+
+ </div>
+ <div class="description">
+ Smoothly adjust the zoom level to fit the full image in the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="flyZoomToFitHeight"> </a>
+ <div class="fixedFont">
+
+
+ <b>flyZoomToFitHeight</b>()
+
+ </div>
+ <div class="description">
+ Smoothly adjust the zoom level to fit the image height in the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="flyZoomToFitWidth"> </a>
+ <div class="fixedFont">
+
+
+ <b>flyZoomToFitWidth</b>()
+
+ </div>
+ <div class="description">
+ Smoothly adjust the zoom level to fit the image width in the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="fullScreen"> </a>
+ <div class="fixedFont">
+
+
+ <b>fullScreen</b>(onClose)
+
+ </div>
+ <div class="description">
+ Maximizes the image to cover the browser viewport. The container div is removed from its parent node upon entering full screen mode. When leaving full screen mode, the container is appended to its old parent node. To avoid rearranging the nodes, wrap the container in an extra div. <p>For unknown reasons (probably security), browsers will not let you open a window that covers the entire screen. Even when specifying "fullscreen=yes", all you get is a window that has a title bar and only covers the desktop (not any task bars or the like). For now, this is the best that I can do, but should the situation change I'll update this to be full-screen<i>-ier</i>.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>onClose</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getContainer"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{HTMLDivElement}</span>
+ <b>getContainer</b>()
+
+ </div>
+ <div class="description">
+ Returns the div element used as viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getMaxZoom"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getMaxZoom</b>()
+
+ </div>
+ <div class="description">
+ Gets the maximum zoom value. The maximum magnification (of the full-size image) is 2<sup>maxZoom</sup>.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getMinZoom"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getMinZoom</b>()
+
+ </div>
+ <div class="description">
+ Gets the minimum zoom value. The minimum magnification (of the full-size image) is 2<sup>minZoom</sup>, so a minZoom of <code>-3</code> means that the smallest image shown will be one-eighth of the full-size image.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getTouchAreaBaseSize"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getTouchAreaBaseSize</b>()
+
+ </div>
+ <div class="description">
+ Returns the base size in screen pixels of the two zoom touch areas. The zoom out border will be getTouchAreaBaseSize() pixels wide, and the center zoom in hotspot will be 2*getTouchAreaBaseSize() pixels wide and tall.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getX"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getX</b>()
+
+ </div>
+ <div class="description">
+ Returns the current x-coordinate, which is the full-image x coordinate in the center of the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getY"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getY</b>()
+
+ </div>
+ <div class="description">
+ Returns the current y-coordinate, which is the full-image x coordinate in the center of the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getZoom"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getZoom</b>()
+
+ </div>
+ <div class="description">
+ Returns the current zoom level.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getZoomToFillValue"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getZoomToFillValue</b>()
+
+ </div>
+ <div class="description">
+ Returns the zoom level at which the image fills the whole viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getZoomToFitValue"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getZoomToFitValue</b>()
+
+ </div>
+ <div class="description">
+ Returns the maximum zoom level at which the full image is visible in the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="layout"> </a>
+ <div class="fixedFont">
+
+
+ <b>layout</b>()
+
+ </div>
+ <div class="description">
+ Lays out all layers according to the current x, y and zoom values.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="moveTo"> </a>
+ <div class="fixedFont">
+
+
+ <b>moveTo</b>(x, y, zoom, updateViewport)
+
+ </div>
+ <div class="description">
+ Stops any current flyTo operation and sets the current position.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>x</b>
+ <i>Optional</i>
+ </dt>
+ <dd>the new x-coordinate</dd>
+
+ <dt>
+ <b>y</b>
+ <i>Optional</i>
+ </dt>
+ <dd>the new y-coordinate</dd>
+
+ <dt>
+ <b>zoom</b>
+ <i>Optional</i>
+ </dt>
+ <dd>the new zoom level</dd>
+
+ <dt>
+ <b>updateViewport</b>
+ <i>Optional, Default: true</i>
+ </dt>
+ <dd>updates the viewport</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="onresize"> </a>
+ <div class="fixedFont">
+
+
+ <b>onresize</b>()
+
+ </div>
+ <div class="description">
+ Triggers a right-sizing of all layers. Called on window resize via the bigshot.ImageBase#onresizeHandler stub.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="rectVisibleAtZoomLevel"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>rectVisibleAtZoomLevel</b>(w, h)
+
+ </div>
+ <div class="description">
+ Returns the maximum zoom level at which a rectangle with the given dimensions fit into the viewport.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>w</b>
+
+ </dt>
+ <dd>the width of the rectangle, given in full-image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>h</b>
+
+ </dt>
+ <dd>the height of the rectangle, given in full-image pixels</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the zoom level that will precisely fit the given rectangle</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="resize"> </a>
+ <div class="fixedFont">
+
+
+ <b>resize</b>()
+
+ </div>
+ <div class="description">
+ Resizes the layers of this image.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setMaxZoom"> </a>
+ <div class="fixedFont">
+
+
+ <b>setMaxZoom</b>(maxZoom)
+
+ </div>
+ <div class="description">
+ Sets the maximum zoom value. The maximum magnification (of the full-size image) is 2<sup>maxZoom</sup>. Set to 0.0 to avoid pixelation.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>maxZoom</b>
+
+ </dt>
+ <dd>the maximum zoom value</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setMinZoom"> </a>
+ <div class="fixedFont">
+
+
+ <b>setMinZoom</b>(minZoom)
+
+ </div>
+ <div class="description">
+ Sets the minimum zoom value. The minimum magnification (of the full-size image) is 2<sup>minZoom</sup>, so a minZoom of <code>-3</code> means that the smallest image shown will be one-eighth of the full-size image.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>minZoom</b>
+
+ </dt>
+ <dd>the minimum zoom value for this image</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setupLayers"> </a>
+ <div class="fixedFont">
+
+
+ <b>setupLayers</b>()
+
+ </div>
+ <div class="description">
+ Sets up the initial layers of the image. Override in subclass.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="showTouchUI"> </a>
+ <div class="fixedFont">
+
+
+ <b>showTouchUI</b>(delay, fadeOut)
+
+ </div>
+ <div class="description">
+ Briefly shows the touch ui zones. See the <a href="../symbols/bigshot.ImageParameters.html#touchUI">bigshot.ImageParameters#touchUI</a> documentation for an explanation of the touch ui.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>delay</b>
+ <i>Optional</i>
+ </dt>
+ <dd>milliseconds before fading out</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>fadeOut</b>
+ <i>Optional</i>
+ </dt>
+ <dd>milliseconds to fade out the zone overlays in</dd>
+
+ </dl>
+
+
+ <dl class="detailList">
+ <dt class="heading">Deprecated:</dt>
+ <dt>
+ All common touch gestures are supported by default.
+ </dt>
+ </dl>
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.ImageParameters.html#touchUI">bigshot.ImageParameters#touchUI</a></dd>
+
+ </dl>
+
+
+ <hr />
+
+ <a name="stopFlying"> </a>
+ <div class="fixedFont">
+
+
+ <b>stopFlying</b>()
+
+ </div>
+ <div class="description">
+ Interrupts the current #flyTo, if one is active.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="zoomToFill"> </a>
+ <div class="fixedFont">
+
+
+ <b>zoomToFill</b>()
+
+ </div>
+ <div class="description">
+ Adjust the zoom level to fit the image in the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="zoomToFit"> </a>
+ <div class="fixedFont">
+
+
+ <b>zoomToFit</b>()
+
+ </div>
+ <div class="description">
+ Adjust the zoom level to fit the image in the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="zoomToFitHeight"> </a>
+ <div class="fixedFont">
+
+
+ <b>zoomToFitHeight</b>()
+
+ </div>
+ <div class="description">
+ Adjust the zoom level to fit the image height in the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="zoomToFitWidth"> </a>
+ <div class="fixedFont">
+
+
+ <b>zoomToFitWidth</b>()
+
+ </div>
+ <div class="description">
+ Adjust the zoom level to fit the image width in the viewport.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+ <div class="sectionTitle">
+ Event Detail
+ </div>
+
+ <a name="event:click"> </a>
+ <div class="fixedFont">
+
+
+ <b>click</b>(event)
+
+ </div>
+ <div class="description">
+ Fired when the user clicks on (but does not drag) the image
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageEvent.html">bigshot.ImageEvent</a>}</span> <b>event</b>
+
+ </dt>
+ <dd>the event object</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="event:dblclick"> </a>
+ <div class="fixedFont">
+
+
+ <b>dblclick</b>(event)
+
+ </div>
+ <div class="description">
+ Fired when the user double-clicks on the image
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageEvent.html">bigshot.ImageEvent</a>}</span> <b>event</b>
+
+ </dt>
+ <dd>the event object</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.ImageEvent.html b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageEvent.html
new file mode 100644
index 00000000..25cd9503
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageEvent.html
@@ -0,0 +1,678 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.ImageEvent - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.ImageEvent
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.Event.html">bigshot.Event</a>.</p>
+
+ <p class="description">
+ Base class for events dispatched by bigshot.ImageBase.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__ImageEvent.js.html">ImageEvent.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.ImageEvent.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageEvent.html#constructor">bigshot.ImageEvent</a></b>(data)
+ </div>
+ <div class="description">Creates an image event.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.ImageEvent.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageEvent.html#clientX">clientX</a></b>
+ </div>
+ <div class="description">The client X coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageEvent.html#clientY">clientY</a></b>
+ </div>
+ <div class="description">The client Y coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageEvent.html#imageX">imageX</a></b>
+ </div>
+ <div class="description">The image X coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageEvent.html#imageY">imageY</a></b>
+ </div>
+ <div class="description">The image Y coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageEvent.html#localX">localX</a></b>
+ </div>
+ <div class="description">The local X coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageEvent.html#localY">localY</a></b>
+ </div>
+ <div class="description">The local Y coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+ <dt>Fields borrowed from class <a href="../symbols/bigshot.Event.html">bigshot.Event</a>: </dt><dd><a href="../symbols/bigshot.Event.html#bubbles">bubbles</a>, <a href="../symbols/bigshot.Event.html#cancelable">cancelable</a>, <a href="../symbols/bigshot.Event.html#currentTarget">currentTarget</a>, <a href="../symbols/bigshot.Event.html#defaultPrevented">defaultPrevented</a>, <a href="../symbols/bigshot.Event.html#isTrusted">isTrusted</a>, <a href="../symbols/bigshot.Event.html#target">target</a>, <a href="../symbols/bigshot.Event.html#timeStamp">timeStamp</a>, <a href="../symbols/bigshot.Event.html#type">type</a></dd>
+ </dl>
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.Event.html">bigshot.Event</a>: </dt><dd><a href="../symbols/bigshot.Event.html#preventDefault">preventDefault</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.ImageEvent</b>(data)
+ </div>
+
+ <div class="description">
+ Creates an image event.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>data</b>
+
+ </dt>
+ <dd>a data object whose fields will be used to set the corresponding fields of the event object.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="clientX"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>clientX</b>
+
+ </div>
+ <div class="description">
+ The client X coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="clientY"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>clientY</b>
+
+ </div>
+ <div class="description">
+ The client Y coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="imageX"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>imageX</b>
+
+ </div>
+ <div class="description">
+ The image X coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="imageY"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>imageY</b>
+
+ </div>
+ <div class="description">
+ The image Y coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="localX"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>localX</b>
+
+ </div>
+ <div class="description">
+ The local X coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="localY"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>localY</b>
+
+ </div>
+ <div class="description">
+ The local Y coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.ImageParameters.html b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageParameters.html
new file mode 100644
index 00000000..85d97ae8
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageParameters.html
@@ -0,0 +1,1220 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.ImageParameters - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.ImageParameters
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ ImageParameters parameter object. You need not set any fields that can be read from the image descriptor that MakeImagePyramid creates. See the <a href="../symbols/bigshot.Image.html">bigshot.Image</a> documentation for required parameters. <p>Usage:
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__ImageParameters.js.html">ImageParameters.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.ImageParameters.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#constructor">bigshot.ImageParameters</a></b>(values)
+ </div>
+ <div class="description">Creates a new image parameter object and populates it with default values for all values not explicitly given.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.ImageParameters.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#basePath">basePath</a></b>
+ </div>
+ <div class="description">Base path for the image.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#container">container</a></b>
+ </div>
+ <div class="description">For <a href="../symbols/bigshot.Image.html">bigshot.Image</a> and <a href="../symbols/bigshot.SimpleImage.html">bigshot.SimpleImage</a>, the <code>div</code> to use as a container for the image.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#dataLoader">dataLoader</a></b>
+ </div>
+ <div class="description">Object used to load data files.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#emptyImage">emptyImage</a></b>
+ </div>
+ <div class="description">Url for the image tile to show while the tile is loading and no low-resolution preview is available.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#fileSystem">fileSystem</a></b>
+ </div>
+ <div class="description">A reference to a filesystem implementation.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#fileSystemType">fileSystemType</a></b>
+ </div>
+ <div class="description">The file system type.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#fling">fling</a></b>
+ </div>
+ <div class="description">Lets you "fling" the image.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#height">height</a></b>
+ </div>
+ <div class="description">The height of the full image; in pixels.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#maxTextureMagnification">maxTextureMagnification</a></b>
+ </div>
+ <div class="description">The maximum amount that a tile will be stretched until we try to show the next more detailed level.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#maxZoom">maxZoom</a></b>
+ </div>
+ <div class="description">The maximum zoom value.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#minZoom">minZoom</a></b>
+ </div>
+ <div class="description">The minimum zoom value.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#overlap">overlap</a></b>
+ </div>
+ <div class="description">Tile overlap.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#posterSize">posterSize</a></b>
+ </div>
+ <div class="description">Size of low resolution preview image along the longest image dimension.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#suffix">suffix</a></b>
+ </div>
+ <div class="description">Suffix to append to the tile filenames.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#tileSize">tileSize</a></b>
+ </div>
+ <div class="description">Size of one tile in pixels.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#touchUI">touchUI</a></b>
+ </div>
+ <div class="description">Enable the touch-friendly ui.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#width">width</a></b>
+ </div>
+ <div class="description">The width of the full image; in pixels.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#wrapX">wrapX</a></b>
+ </div>
+ <div class="description">Flag indicating that the image should wrap horizontally.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageParameters.html#wrapY">wrapY</a></b>
+ </div>
+ <div class="description">Flag indicating that the image should wrap vertically.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.ImageParameters</b>(values)
+ </div>
+
+ <div class="description">
+ Creates a new image parameter object and populates it with default values for all values not explicitly given.
+
+ </div>
+
+
+
+ <pre class="code">var bsi = new bigshot.Image ( new bigshot.ImageParameters ({ basePath : "/bigshot.php?file=myshot.bigshot", fileSystemType : "archive", container : document.getElementById ("bigshot_div") }));</pre>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>values</b>
+
+ </dt>
+ <dd>named parameter map, see the fields below for parameter names and types.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.Image.html">bigshot.Image</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="basePath"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>basePath</b>
+
+ </div>
+ <div class="description">
+ Base path for the image. This is filesystem dependent; but for the two most common cases the following should be set <ul> <li><b>archive</b>= The basePath is <code>"&lt;path&gt;/bigshot.php?file=&lt;path-to-bigshot-archive-relative-to-bigshot.php&gt;"</code>; for example; <code>"/bigshot.php?file=images/bigshot-sample.bigshot"</code>. <li><b>folder</b>= The basePath is <code>"&lt;path-to-image-folder&gt;"</code>; for example; <code>"/images/bigshot-sample"</code>. </ul>
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="container"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{HTMLDivElement}</span>
+ <b>container</b>
+
+ </div>
+ <div class="description">
+ For <a href="../symbols/bigshot.Image.html">bigshot.Image</a> and <a href="../symbols/bigshot.SimpleImage.html">bigshot.SimpleImage</a>, the <code>div</code> to use as a container for the image.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="dataLoader"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.DataLoader.html">bigshot.DataLoader</a>}</span>
+ <b>dataLoader</b>
+
+ </div>
+ <div class="description">
+ Object used to load data files.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ bigshot.DefaultDataLoader
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="emptyImage"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>emptyImage</b>
+
+ </div>
+ <div class="description">
+ Url for the image tile to show while the tile is loading and no low-resolution preview is available.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <code>null</code>, which results in an all-black image
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="fileSystem"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>}</span>
+ <b>fileSystem</b>
+
+ </div>
+ <div class="description">
+ A reference to a filesystem implementation. If set; it overrides the fileSystemType field.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ set depending on value of bigshot.ImageParameters.fileSystemType
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="fileSystemType"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>fileSystemType</b>
+
+ </div>
+ <div class="description">
+ The file system type. Used to create a filesystem instance unless the fileSystem field is set. Possible values are <code>"archive"</code>, <code>"folder"</code> or <code>"dzi"</code>.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ "folder"
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="fling"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>fling</b>
+
+ </div>
+ <div class="description">
+ Lets you "fling" the image.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ true
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="height"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>height</b>
+
+ </div>
+ <div class="description">
+ The height of the full image; in pixels.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="maxTextureMagnification"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{float}</span>
+ <b>maxTextureMagnification</b>
+
+ </div>
+ <div class="description">
+ The maximum amount that a tile will be stretched until we try to show the next more detailed level.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 1.0
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="maxZoom"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>maxZoom</b>
+
+ </div>
+ <div class="description">
+ The maximum zoom value. Zoom values are specified as a magnification; where 2<sup>n</sup> is the magnification and n is the zoom value. So a zoom value of 2 means a 4x magnification of the full image. -3 means showing an image that is a eighth (1/8 or 1/2<sup>3</sup>) of the full size.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 0.0
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="minZoom"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>minZoom</b>
+
+ </div>
+ <div class="description">
+ The minimum zoom value. Zoom values are specified as a magnification; where 2<sup>n</sup> is the magnification and n is the zoom value. So a zoom value of 2 means a 4x magnification of the full image. -3 means showing an image that is a eighth (1/8 or 1/2<sup>3</sup>) of the full size.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="overlap"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>overlap</b>
+
+ </div>
+ <div class="description">
+ Tile overlap. Not implemented.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="posterSize"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>posterSize</b>
+
+ </div>
+ <div class="description">
+ Size of low resolution preview image along the longest image dimension. The preview is assumed to have the same aspect ratio as the full image (specified by width and height).
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="suffix"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>suffix</b>
+
+ </div>
+ <div class="description">
+ Suffix to append to the tile filenames. Typically <code>".jpg"</code> or <code>".png"</code>.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="tileSize"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>tileSize</b>
+
+ </div>
+ <div class="description">
+ Size of one tile in pixels.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="touchUI"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>touchUI</b>
+
+ </div>
+ <div class="description">
+ Enable the touch-friendly ui. The touch-friendly UI splits the viewport into three click-sensitive regions: <p style="text-align:center"><img src="../images/touch-ui.png"/></p> <p>Clicking (or tapping with a finger) on the outer region causes the viewport to zoom out. Clicking anywhere within the middle, "pan", region centers the image on the spot clicked. Finally, clicking in the center hotspot will center the image on the spot clicked and zoom in half a zoom level. <p>As before, you can drag to pan anywhere. <p>If you have navigation tools for mouse users that hover over the image container, it is recommended that any click events on them are kept from bubbling, otherwise the click will propagate to the touch ui. One way is to use the <a href="../symbols/bigshot.Browser.html#stopMouseEventBubbling">bigshot.Browser#stopMouseEventBubbling</a> method:
+
+
+ </div>
+
+
+
+ <pre class="code">var browser = new bigshot.Browser (); browser.stopMouseEventBubbling (document.getElementById ("myBigshotControlDiv"));</pre>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Deprecated:</dt>
+ <dt>
+ Bigshot supports all common touch-gestures.
+ </dt>
+ </dl>
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.ImageBase.html#showTouchUI">bigshot.ImageBase#showTouchUI</a></dd>
+
+ </dl>
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ true
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="width"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>width</b>
+
+ </div>
+ <div class="description">
+ The width of the full image; in pixels.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="wrapX"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>wrapX</b>
+
+ </div>
+ <div class="description">
+ Flag indicating that the image should wrap horizontally. The image wraps on tile boundaries; so in order to get a seamless wrap at zoom level -n; the image width must be evenly divisible by <code>tileSize * 2^n</code>. Set the minZoom value appropriately.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ false
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="wrapY"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>wrapY</b>
+
+ </div>
+ <div class="description">
+ Flag indicating that the image should wrap vertically. The image wraps on tile boundaries; so in order to get a seamless wrap at zoom level -n; the image height must be evenly divisible by <code>tileSize * 2^n</code>. Set the minZoom value appropriately.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ false
+ </dd>
+ </dl>
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.ImageTileCache.html b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageTileCache.html
new file mode 100644
index 00000000..25f7398c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageTileCache.html
@@ -0,0 +1,510 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.ImageTileCache - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.ImageTileCache
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Tile cache for the <a href="../symbols/bigshot.TileLayer.html">bigshot.TileLayer</a>.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__ImageTileCache.js.html">ImageTileCache.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.ImageTileCache.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageTileCache.html#constructor">bigshot.ImageTileCache</a></b>(onLoaded, onCacheInit, parameters)
+ </div>
+ <div class="description">Creates a new cache instance.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.ImageTileCache.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.ImageTileCache.html#fireOnLoad">fireOnLoad</a></b>()
+ </div>
+ <div class="description">Fires the onload event, if it hasn't been fired for at least 50 ms</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.ImageTileCache</b>(onLoaded, onCacheInit, parameters)
+ </div>
+
+ <div class="description">
+ Creates a new cache instance.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>onLoaded</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>onCacheInit</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>parameters</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="fireOnLoad"> </a>
+ <div class="fixedFont">
+
+
+ <b>fireOnLoad</b>()
+
+ </div>
+ <div class="description">
+ Fires the onload event, if it hasn't been fired for at least 50 ms
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.ImageVRTileCache.html b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageVRTileCache.html
new file mode 100644
index 00000000..65c4fc6e
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.ImageVRTileCache.html
@@ -0,0 +1,464 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.ImageVRTileCache - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.ImageVRTileCache
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.VRTileCache.html">bigshot.VRTileCache</a>.</p>
+
+ <p class="description">
+ A VR tile cache backed by a <a href="../symbols/bigshot.ImageTileCache.html">bigshot.ImageTileCache</a>.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__ImageVRTileCache.js.html">ImageVRTileCache.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.ImageVRTileCache.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.ImageVRTileCache.html#constructor">bigshot.ImageVRTileCache</a></b>(onloaded, onCacheInit, parameters)
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.VRTileCache.html">bigshot.VRTileCache</a>: </dt><dd><a href="../symbols/bigshot.VRTileCache.html#dispose">dispose</a>, <a href="../symbols/bigshot.VRTileCache.html#getTexture">getTexture</a>, <a href="../symbols/bigshot.VRTileCache.html#purge">purge</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.ImageVRTileCache</b>(onloaded, onCacheInit, parameters)
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>onloaded</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>onCacheInit</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>parameters</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.LRUMap.html b/js/vendor/bigshot/doc/js/symbols/bigshot.LRUMap.html
new file mode 100644
index 00000000..e4fc234c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.LRUMap.html
@@ -0,0 +1,737 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.LRUMap - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.LRUMap
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Implementation of a Least-Recently-Used cache map. Used by the ImageTileCache to keep track of cache entries.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__LRUMap.js.html">LRUMap.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.LRUMap.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.LRUMap.html#constructor">bigshot.LRUMap</a></b>()
+ </div>
+ <div class="description">Creates a new, empty, LRUMap instance.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.LRUMap.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.LRUMap.html#counter">counter</a></b>
+ </div>
+ <div class="description">Current time counter.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.LRUMap.html#keyToTime">keyToTime</a></b>
+ </div>
+ <div class="description">Key to last-accessed time mapping.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.LRUMap.html#size">size</a></b>
+ </div>
+ <div class="description">Current size of the map.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.LRUMap.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.LRUMap.html#access">access</a></b>(key)
+ </div>
+ <div class="description">Marks access to an item, represented by its key in the map.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.LRUMap.html#getSize">getSize</a></b>()
+ </div>
+ <div class="description">Returns the current number of keys in the map.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.LRUMap.html#leastUsed">leastUsed</a></b>()
+ </div>
+ <div class="description">Returns the key in the map with the lowest last-accessed time.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.LRUMap.html#remove">remove</a></b>(key)
+ </div>
+ <div class="description">Removes a key from the map.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.LRUMap</b>()
+ </div>
+
+ <div class="description">
+ Creates a new, empty, LRUMap instance.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="counter"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>counter</b>
+
+ </div>
+ <div class="description">
+ Current time counter. Incremented for each access of a key in the map.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="keyToTime"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{Object}</span>
+ <b>keyToTime</b>
+
+ </div>
+ <div class="description">
+ Key to last-accessed time mapping.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="size"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>size</b>
+
+ </div>
+ <div class="description">
+ Current size of the map.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="access"> </a>
+ <div class="fixedFont">
+
+
+ <b>access</b>(key)
+
+ </div>
+ <div class="description">
+ Marks access to an item, represented by its key in the map. The key's last-accessed time is updated to the current time and the current time is incremented by one step.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>key</b>
+
+ </dt>
+ <dd>the key associated with the accessed item</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getSize"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>getSize</b>()
+
+ </div>
+ <div class="description">
+ Returns the current number of keys in the map.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="leastUsed"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>leastUsed</b>()
+
+ </div>
+ <div class="description">
+ Returns the key in the map with the lowest last-accessed time. This is done as a linear search through the map. It could be done much faster with a sorted map, but unless this becomes a bottleneck it is just not worth the effort.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="remove"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>remove</b>(key)
+
+ </div>
+ <div class="description">
+ Removes a key from the map.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>key</b>
+
+ </dt>
+ <dd>the key to remove</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>true iff the key existed in the map.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.LabeledHotspot.html b/js/vendor/bigshot/doc/js/symbols/bigshot.LabeledHotspot.html
new file mode 100644
index 00000000..29581aa6
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.LabeledHotspot.html
@@ -0,0 +1,535 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.LabeledHotspot - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.LabeledHotspot
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.Hotspot.html">bigshot.Hotspot</a>.</p>
+
+ <p class="description">
+ A hotspot with a label under it. The label element can be accessed using the getLabel method and styled as any HTMLElement. See <a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a> for examples.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__LabeledHotspot.js.html">LabeledHotspot.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.LabeledHotspot.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.LabeledHotspot.html#constructor">bigshot.LabeledHotspot</a></b>(x, y, w, h, labelText)
+ </div>
+ <div class="description">Creates a new labeled hotspot instance.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.LabeledHotspot.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.LabeledHotspot.html#getLabel">getLabel</a></b>()
+ </div>
+ <div class="description">Returns the label element.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.Hotspot.html">bigshot.Hotspot</a>: </dt><dd><a href="../symbols/bigshot.Hotspot.html#getElement">getElement</a>, <a href="../symbols/bigshot.Hotspot.html#layout">layout</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.LabeledHotspot</b>(x, y, w, h, labelText)
+ </div>
+
+ <div class="description">
+ Creates a new labeled hotspot instance.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>x</b>
+
+ </dt>
+ <dd>x-coordinate of the top-left corner, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>y</b>
+
+ </dt>
+ <dd>y-coordinate of the top-left corner, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>w</b>
+
+ </dt>
+ <dd>width of the hotspot, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>h</b>
+
+ </dt>
+ <dd>height of the hotspot, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>labelText</b>
+
+ </dt>
+ <dd>text of the label</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="getLabel"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{HTMLDivElement}</span>
+ <b>getLabel</b>()
+
+ </div>
+ <div class="description">
+ Returns the label element.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.Layer.html b/js/vendor/bigshot/doc/js/symbols/bigshot.Layer.html
new file mode 100644
index 00000000..31dd8ec8
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.Layer.html
@@ -0,0 +1,676 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.Layer - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.Layer
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Abstract interface description for a layer.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__Layer.js.html">Layer.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.Layer.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Layer.html#constructor">bigshot.Layer</a></b>()
+ </div>
+ <div class="description">Abstract interface description for a Layer.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.Layer.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Layer.html#getContainer">getContainer</a></b>()
+ </div>
+ <div class="description">Returns the layer container.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Layer.html#layout">layout</a></b>(zoom, x0, y0, tx0, ty0, size, stride, opacity)
+ </div>
+ <div class="description">Lays out the layer.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Layer.html#resize">resize</a></b>(w, h)
+ </div>
+ <div class="description">Called when the image's viewport is resized.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.Layer.html#setMaxTiles">setMaxTiles</a></b>(x, y)
+ </div>
+ <div class="description">Sets the maximum number of image tiles that will be visible in the image.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.Layer</b>()
+ </div>
+
+ <div class="description">
+ Abstract interface description for a Layer.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="getContainer"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{HTMLDivElement}</span>
+ <b>getContainer</b>()
+
+ </div>
+ <div class="description">
+ Returns the layer container.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="layout"> </a>
+ <div class="fixedFont">
+
+
+ <b>layout</b>(zoom, x0, y0, tx0, ty0, size, stride, opacity)
+
+ </div>
+ <div class="description">
+ Lays out the layer.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>zoom</b>
+
+ </dt>
+ <dd>the zoom level, adjusted for texture stretching</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>x0</b>
+
+ </dt>
+ <dd>the x-coordinate of the top-left corner of the top-left tile in css pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>y0</b>
+
+ </dt>
+ <dd>the y-coordinate of the top-left corner of the top-left tile in css pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>tx0</b>
+
+ </dt>
+ <dd>column number (starting at zero) of the top-left tile</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>ty0</b>
+
+ </dt>
+ <dd>row number (starting at zero) of the top-left tile</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>size</b>
+
+ </dt>
+ <dd>the <a href="../symbols/bigshot.ImageParameters.html#tileSize">bigshot.ImageParameters#tileSize</a> - width of each image tile in pixels - of the image</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>stride</b>
+
+ </dt>
+ <dd>offset (vertical and horizontal) from the top-left corner of a tile to the next tile's top-left corner.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>opacity</b>
+
+ </dt>
+ <dd>the opacity of the layer as a CSS opacity value.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="resize"> </a>
+ <div class="fixedFont">
+
+
+ <b>resize</b>(w, h)
+
+ </div>
+ <div class="description">
+ Called when the image's viewport is resized.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>w</b>
+
+ </dt>
+ <dd>the new width of the viewport, in css pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>h</b>
+
+ </dt>
+ <dd>the new height of the viewport, in css pixels</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setMaxTiles"> </a>
+ <div class="fixedFont">
+
+
+ <b>setMaxTiles</b>(x, y)
+
+ </div>
+ <div class="description">
+ Sets the maximum number of image tiles that will be visible in the image.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>x</b>
+
+ </dt>
+ <dd>the number of tiles horizontally</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>y</b>
+
+ </dt>
+ <dd>the number of tiles vertically</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.LinkHotspot.html b/js/vendor/bigshot/doc/js/symbols/bigshot.LinkHotspot.html
new file mode 100644
index 00000000..ba7c003c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.LinkHotspot.html
@@ -0,0 +1,489 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.LinkHotspot - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.LinkHotspot
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.LabeledHotspot.html">bigshot.LabeledHotspot</a>.</p>
+
+ <p class="description">
+ A labeled hotspot that takes the user to another location when it is clicked on. See <a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a> for examples.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__LinkHotspot.js.html">LinkHotspot.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.LinkHotspot.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.LinkHotspot.html#constructor">bigshot.LinkHotspot</a></b>(x, y, w, h, labelText, url)
+ </div>
+ <div class="description">Creates a new link-hotspot instance.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.LabeledHotspot.html">bigshot.LabeledHotspot</a>: </dt><dd><a href="../symbols/bigshot.LabeledHotspot.html#getLabel">getLabel</a></dd><dt>Methods borrowed from class <a href="../symbols/bigshot.Hotspot.html">bigshot.Hotspot</a>: </dt><dd><a href="../symbols/bigshot.Hotspot.html#getElement">getElement</a>, <a href="../symbols/bigshot.Hotspot.html#layout">layout</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.LinkHotspot</b>(x, y, w, h, labelText, url)
+ </div>
+
+ <div class="description">
+ Creates a new link-hotspot instance.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>x</b>
+
+ </dt>
+ <dd>x-coordinate of the top-left corner, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>y</b>
+
+ </dt>
+ <dd>y-coordinate of the top-left corner, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>w</b>
+
+ </dt>
+ <dd>width of the hotspot, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>h</b>
+
+ </dt>
+ <dd>height of the hotspot, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>labelText</b>
+
+ </dt>
+ <dd>text of the label</dd>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>url</b>
+
+ </dt>
+ <dd>url to go to on click</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.Object.html b/js/vendor/bigshot/doc/js/symbols/bigshot.Object.html
new file mode 100644
index 00000000..bbd2f9f7
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.Object.html
@@ -0,0 +1,639 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.Object - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.Object
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Object-oriented support functions, used to make JavaScript a bit more palatable to a Java-head.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__Object.js.html">Object.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.Object.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Object.html#constructor">bigshot.Object</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.Object.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.Object.<b><a href="../symbols/bigshot.Object.html#.alertr">alertr</a></b>(o)
+ </div>
+ <div class="description">Utility function to show an object's fields in a message box.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.Object.<b><a href="../symbols/bigshot.Object.html#.extend">extend</a></b>(derived, base)
+ </div>
+ <div class="description">Extends a base class with a derived class.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.Object.<b><a href="../symbols/bigshot.Object.html#.logr">logr</a></b>(o)
+ </div>
+ <div class="description">Utility function to show an object's fields in the console log.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.Object.<b><a href="../symbols/bigshot.Object.html#.resolve">resolve</a></b>(name)
+ </div>
+ <div class="description">Resolves a name relative to <code>self</code>.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.Object</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name=".alertr"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.Object.</span><b>alertr</b>(o)
+
+ </div>
+ <div class="description">
+ Utility function to show an object's fields in a message box.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>o</b>
+
+ </dt>
+ <dd>the object</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".extend"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.Object.</span><b>extend</b>(derived, base)
+
+ </div>
+ <div class="description">
+ Extends a base class with a derived class.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Function}</span> <b>derived</b>
+
+ </dt>
+ <dd>the derived-class</dd>
+
+ <dt>
+ <span class="light fixedFont">{Function}</span> <b>base</b>
+
+ </dt>
+ <dd>the base-class</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".logr"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.Object.</span><b>logr</b>(o)
+
+ </div>
+ <div class="description">
+ Utility function to show an object's fields in the console log.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>o</b>
+
+ </dt>
+ <dd>the object</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".resolve"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.Object.</span><b>resolve</b>(name)
+
+ </div>
+ <div class="description">
+ Resolves a name relative to <code>self</code>.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>name</b>
+
+ </dt>
+ <dd>the name to resolve</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.Point2D.html b/js/vendor/bigshot/doc/js/symbols/bigshot.Point2D.html
new file mode 100644
index 00000000..1ed58148
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.Point2D.html
@@ -0,0 +1,517 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.Point2D - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.Point2D
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ A 2d point.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__types.js.html">types.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.Point2D.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Point2D.html#constructor">bigshot.Point2D</a></b>()
+ </div>
+ <div class="description">This class has no constructor, it is created as an object literal.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.Point2D.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Point2D.html#x">x</a></b>
+ </div>
+ <div class="description">the x-coordinate</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Point2D.html#y">y</a></b>
+ </div>
+ <div class="description">the y-coordinate</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.Point2D</b>()
+ </div>
+
+ <div class="description">
+ This class has no constructor, it is created as an object literal.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="x"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>x</b>
+
+ </div>
+ <div class="description">
+ the x-coordinate
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="y"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>y</b>
+
+ </div>
+ <div class="description">
+ the y-coordinate
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.Point3D.html b/js/vendor/bigshot/doc/js/symbols/bigshot.Point3D.html
new file mode 100644
index 00000000..ebd1ae8b
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.Point3D.html
@@ -0,0 +1,549 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.Point3D - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.Point3D
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ A 3d point.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__types.js.html">types.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.Point3D.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Point3D.html#constructor">bigshot.Point3D</a></b>()
+ </div>
+ <div class="description">This class has no constructor, it is created as an object literal.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.Point3D.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Point3D.html#x">x</a></b>
+ </div>
+ <div class="description">the x-coordinate</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Point3D.html#y">y</a></b>
+ </div>
+ <div class="description">the y-coordinate</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Point3D.html#z">z</a></b>
+ </div>
+ <div class="description">the z-coordinate</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.Point3D</b>()
+ </div>
+
+ <div class="description">
+ This class has no constructor, it is created as an object literal.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="x"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>x</b>
+
+ </div>
+ <div class="description">
+ the x-coordinate
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="y"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>y</b>
+
+ </div>
+ <div class="description">
+ the y-coordinate
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="z"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>z</b>
+
+ </div>
+ <div class="description">
+ the z-coordinate
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.PointHotspot.html b/js/vendor/bigshot/doc/js/symbols/bigshot.PointHotspot.html
new file mode 100644
index 00000000..199d4026
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.PointHotspot.html
@@ -0,0 +1,553 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.PointHotspot - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.PointHotspot
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.Hotspot.html">bigshot.Hotspot</a>.</p>
+
+ <p class="description">
+ A point hotspot consisting of an image.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__PointHotspot.js.html">PointHotspot.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.PointHotspot.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.PointHotspot.html#constructor">bigshot.PointHotspot</a></b>(x, y, w, h, xo, yo, element, imageUrl)
+ </div>
+ <div class="description">Creates a new labeled hotspot instance.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.PointHotspot.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.PointHotspot.html#getLabel">getLabel</a></b>()
+ </div>
+ <div class="description">Returns the label element.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.Hotspot.html">bigshot.Hotspot</a>: </dt><dd><a href="../symbols/bigshot.Hotspot.html#getElement">getElement</a>, <a href="../symbols/bigshot.Hotspot.html#layout">layout</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.PointHotspot</b>(x, y, w, h, xo, yo, element, imageUrl)
+ </div>
+
+ <div class="description">
+ Creates a new labeled hotspot instance.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>x</b>
+
+ </dt>
+ <dd>x-coordinate of the center corner, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>y</b>
+
+ </dt>
+ <dd>y-coordinate of the center corner, given in full image pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>w</b>
+
+ </dt>
+ <dd>width of the hotspot, given in screen pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>h</b>
+
+ </dt>
+ <dd>height of the hotspot, given in screen pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>xo</b>
+
+ </dt>
+ <dd>x-offset, given in screen pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>yo</b>
+
+ </dt>
+ <dd>y-offset, given in screen pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>element</b>
+
+ </dt>
+ <dd>the HTML element to position</dd>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>imageUrl</b>
+ <i>Optional</i>
+ </dt>
+ <dd>the image to use as hotspot sprite</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="getLabel"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{HTMLDivElement}</span>
+ <b>getLabel</b>()
+
+ </div>
+ <div class="description">
+ Returns the label element.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.Rotation.html b/js/vendor/bigshot/doc/js/symbols/bigshot.Rotation.html
new file mode 100644
index 00000000..582faec2
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.Rotation.html
@@ -0,0 +1,549 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.Rotation - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.Rotation
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ A rotation specified as a yaw-pitch-roll triplet.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__types.js.html">types.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.Rotation.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Rotation.html#constructor">bigshot.Rotation</a></b>()
+ </div>
+ <div class="description">This class has no constructor, it is created as an object literal.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.Rotation.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Rotation.html#p">p</a></b>
+ </div>
+ <div class="description">the rotation around the pitch (x) axis</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Rotation.html#r">r</a></b>
+ </div>
+ <div class="description">the rotation around the roll (z) axis</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.Rotation.html#y">y</a></b>
+ </div>
+ <div class="description">the rotation around the yaw (y) axis</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.Rotation</b>()
+ </div>
+
+ <div class="description">
+ This class has no constructor, it is created as an object literal.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="p"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>p</b>
+
+ </div>
+ <div class="description">
+ the rotation around the pitch (x) axis
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="r"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>r</b>
+
+ </div>
+ <div class="description">
+ the rotation around the roll (z) axis
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="y"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>y</b>
+
+ </div>
+ <div class="description">
+ the rotation around the yaw (y) axis
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.SimpleFileSystem.html b/js/vendor/bigshot/doc/js/symbols/bigshot.SimpleFileSystem.html
new file mode 100644
index 00000000..478dd1ee
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.SimpleFileSystem.html
@@ -0,0 +1,459 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.SimpleFileSystem - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.SimpleFileSystem
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>.</p>
+
+ <p class="description">
+ Filesystem adapter for bigshot.SimpleImage. This class is not supposed to be used outside of the <a href="../symbols/bigshot.SimpleImage.html">bigshot.SimpleImage</a> class.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__SimpleFileSystem.js.html">SimpleFileSystem.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.SimpleFileSystem.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.SimpleFileSystem.html#constructor">bigshot.SimpleFileSystem</a></b>(parameters)
+ </div>
+ <div class="description">Creates a new instance of a filesystem adapter for the SimpleImage class.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>: </dt><dd><a href="../symbols/bigshot.FileSystem.html#getDescriptor">getDescriptor</a>, <a href="../symbols/bigshot.FileSystem.html#getFilename">getFilename</a>, <a href="../symbols/bigshot.FileSystem.html#getImageFilename">getImageFilename</a>, <a href="../symbols/bigshot.FileSystem.html#getPosterFilename">getPosterFilename</a>, <a href="../symbols/bigshot.FileSystem.html#setPrefix">setPrefix</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.SimpleFileSystem</b>(parameters)
+ </div>
+
+ <div class="description">
+ Creates a new instance of a filesystem adapter for the SimpleImage class.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the associated image parameters</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.SimpleImage.html">bigshot.SimpleImage</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.SimpleImage.html b/js/vendor/bigshot/doc/js/symbols/bigshot.SimpleImage.html
new file mode 100644
index 00000000..70c28b58
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.SimpleImage.html
@@ -0,0 +1,487 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.SimpleImage - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.SimpleImage
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>.</p>
+
+ <p class="description">
+ A zoomable image viewer.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__SimpleImage.js.html">SimpleImage.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.SimpleImage.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.SimpleImage.html#constructor">bigshot.SimpleImage</a></b>(parameters, imgElement)
+ </div>
+ <div class="description">Creates a new image viewer.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Fields borrowed from class <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>: </dt><dd><a href="../symbols/bigshot.EventDispatcher.html#eventListeners">eventListeners</a></dd>
+ </dl>
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>: </dt><dd><a href="../symbols/bigshot.ImageBase.html#addLayer">addLayer</a>, <a href="../symbols/bigshot.ImageBase.html#adjustCoordinateForZoom">adjustCoordinateForZoom</a>, <a href="../symbols/bigshot.ImageBase.html#clampXY">clampXY</a>, <a href="../symbols/bigshot.ImageBase.html#clampZoom">clampZoom</a>, <a href="../symbols/bigshot.ImageBase.html#clientToImage">clientToImage</a>, <a href="../symbols/bigshot.ImageBase.html#createImageEventData">createImageEventData</a>, <a href="../symbols/bigshot.ImageBase.html#createLayerContainer">createLayerContainer</a>, <a href="../symbols/bigshot.ImageBase.html#dispose">dispose</a>, <a href="../symbols/bigshot.ImageBase.html#exitFullScreen">exitFullScreen</a>, <a href="../symbols/bigshot.ImageBase.html#fitZoom">fitZoom</a>, <a href="../symbols/bigshot.ImageBase.html#flyTo">flyTo</a>, <a href="../symbols/bigshot.ImageBase.html#flyZoomToFit">flyZoomToFit</a>, <a href="../symbols/bigshot.ImageBase.html#flyZoomToFitHeight">flyZoomToFitHeight</a>, <a href="../symbols/bigshot.ImageBase.html#flyZoomToFitWidth">flyZoomToFitWidth</a>, <a href="../symbols/bigshot.ImageBase.html#fullScreen">fullScreen</a>, <a href="../symbols/bigshot.ImageBase.html#getContainer">getContainer</a>, <a href="../symbols/bigshot.ImageBase.html#getMaxZoom">getMaxZoom</a>, <a href="../symbols/bigshot.ImageBase.html#getMinZoom">getMinZoom</a>, <a href="../symbols/bigshot.ImageBase.html#getTouchAreaBaseSize">getTouchAreaBaseSize</a>, <a href="../symbols/bigshot.ImageBase.html#getX">getX</a>, <a href="../symbols/bigshot.ImageBase.html#getY">getY</a>, <a href="../symbols/bigshot.ImageBase.html#getZoom">getZoom</a>, <a href="../symbols/bigshot.ImageBase.html#getZoomToFillValue">getZoomToFillValue</a>, <a href="../symbols/bigshot.ImageBase.html#getZoomToFitValue">getZoomToFitValue</a>, <a href="../symbols/bigshot.ImageBase.html#layout">layout</a>, <a href="../symbols/bigshot.ImageBase.html#moveTo">moveTo</a>, <a href="../symbols/bigshot.ImageBase.html#onresize">onresize</a>, <a href="../symbols/bigshot.ImageBase.html#rectVisibleAtZoomLevel">rectVisibleAtZoomLevel</a>, <a href="../symbols/bigshot.ImageBase.html#resize">resize</a>, <a href="../symbols/bigshot.ImageBase.html#setMaxZoom">setMaxZoom</a>, <a href="../symbols/bigshot.ImageBase.html#setMinZoom">setMinZoom</a>, <a href="../symbols/bigshot.ImageBase.html#setupLayers">setupLayers</a>, <a href="../symbols/bigshot.ImageBase.html#showTouchUI">showTouchUI</a>, <a href="../symbols/bigshot.ImageBase.html#stopFlying">stopFlying</a>, <a href="../symbols/bigshot.ImageBase.html#zoomToFill">zoomToFill</a>, <a href="../symbols/bigshot.ImageBase.html#zoomToFit">zoomToFit</a>, <a href="../symbols/bigshot.ImageBase.html#zoomToFitHeight">zoomToFitHeight</a>, <a href="../symbols/bigshot.ImageBase.html#zoomToFitWidth">zoomToFitWidth</a></dd><dt>Methods borrowed from class <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>: </dt><dd><a href="../symbols/bigshot.EventDispatcher.html#addEventListener">addEventListener</a>, <a href="../symbols/bigshot.EventDispatcher.html#fireEvent">fireEvent</a>, <a href="../symbols/bigshot.EventDispatcher.html#removeEventListener">removeEventListener</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Events borrowed from class <a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>: </dt><dd><a href="../symbols/bigshot.ImageBase.html#event:click">click</a>, <a href="../symbols/bigshot.ImageBase.html#event:dblclick">dblclick</a></dd>
+ </dl>
+
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.SimpleImage</b>(parameters, imgElement)
+ </div>
+
+ <div class="description">
+ Creates a new image viewer. (Note: See bigshot.SimpleImage#dispose for important information.)
+
+ </div>
+
+
+
+ <pre class="code">var bsi = new bigshot.SimpleImage ( new bigshot.ImageParameters ({ basePath : "myimage.jpg", width : 681, height : 1024, container : document.getElementById ("bigshot_div") }));</pre>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the image parameters. Required fields are: <code>container</code>. If the <code>imgElement</code> parameter is not given, then <code>basePath</code>, <code>width</code> and <code>height</code> are also required. The following parameters are not supported and should be left as defaults: <code>fileSystem</code>, <code>fileSystemType</code>, <code>maxTextureMagnification</code> and <code>tileSize</code>. <code>wrapX</code> and <code>wrapY</code> may only be used if the imgElement is <b>not</b> set.</dd>
+
+ <dt>
+ <span class="light fixedFont">{HTMLImageElement}</span> <b>imgElement</b>
+ <i>Optional</i>
+ </dt>
+ <dd>an img element to use. The element should have <code>style.position = "absolute"</code>.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.ImageBase.html#dispose">bigshot.ImageBase#dispose</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.TextureTileCache.html b/js/vendor/bigshot/doc/js/symbols/bigshot.TextureTileCache.html
new file mode 100644
index 00000000..5734a914
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.TextureTileCache.html
@@ -0,0 +1,470 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.TextureTileCache - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.TextureTileCache
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.VRTileCache.html">bigshot.VRTileCache</a>.</p>
+
+ <p class="description">
+ Tile texture cache for a <a href="../symbols/bigshot.VRFace.html">bigshot.VRFace</a>.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__TextureTileCache.js.html">TextureTileCache.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.TextureTileCache.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.TextureTileCache.html#constructor">bigshot.TextureTileCache</a></b>(onLoaded, onCacheInit, parameters, _webGl)
+ </div>
+ <div class="description">Creates a new cache instance.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.VRTileCache.html">bigshot.VRTileCache</a>: </dt><dd><a href="../symbols/bigshot.VRTileCache.html#dispose">dispose</a>, <a href="../symbols/bigshot.VRTileCache.html#getTexture">getTexture</a>, <a href="../symbols/bigshot.VRTileCache.html#purge">purge</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.TextureTileCache</b>(onLoaded, onCacheInit, parameters, _webGl)
+ </div>
+
+ <div class="description">
+ Creates a new cache instance.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>onLoaded</b>
+
+ </dt>
+ <dd>function that is called whenever a texture tile has been loaded</dd>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>onCacheInit</b>
+
+ </dt>
+ <dd>function that is called when the texture cache is fully initialized</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>image parameters</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.WebGL.html">bigshot.WebGL</a>}</span> <b>_webGl</b>
+
+ </dt>
+ <dd>WebGL instance to use</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.TexturedQuad.html b/js/vendor/bigshot/doc/js/symbols/bigshot.TexturedQuad.html
new file mode 100644
index 00000000..88953ade
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.TexturedQuad.html
@@ -0,0 +1,430 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.TexturedQuad - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.TexturedQuad
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Abstract base for textured quads.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__TexturedQuad.js.html">TexturedQuad.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.TexturedQuad.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.TexturedQuad.html#constructor">bigshot.TexturedQuad</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.TexturedQuad</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.TexturedQuadScene.html b/js/vendor/bigshot/doc/js/symbols/bigshot.TexturedQuadScene.html
new file mode 100644
index 00000000..4ba859c5
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.TexturedQuadScene.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.TexturedQuadScene - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.TexturedQuadScene
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Abstract base for textured quad scenes.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__TexturedQuadScene.js.html">TexturedQuadScene.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.TexturedQuadScene.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.TexturedQuadScene.html#constructor">bigshot.TexturedQuadScene</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.TexturedQuadScene.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TexturedQuadScene.html#addQuad">addQuad</a></b>(quad)
+ </div>
+ <div class="description">Adds a quad to the scene.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TexturedQuadScene.html#render">render</a></b>()
+ </div>
+ <div class="description">Renders the scene.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.TexturedQuadScene</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="addQuad"> </a>
+ <div class="fixedFont">
+
+
+ <b>addQuad</b>(quad)
+
+ </div>
+ <div class="description">
+ Adds a quad to the scene.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>quad</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="render"> </a>
+ <div class="fixedFont">
+
+
+ <b>render</b>()
+
+ </div>
+ <div class="description">
+ Renders the scene.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.TileLayer.html b/js/vendor/bigshot/doc/js/symbols/bigshot.TileLayer.html
new file mode 100644
index 00000000..5b14a94b
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.TileLayer.html
@@ -0,0 +1,465 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.TileLayer - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.TileLayer
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ A tiled, zoomable image layer.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__TileLayer.js.html">TileLayer.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.TileLayer.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.TileLayer.html#constructor">bigshot.TileLayer</a></b>(image, parameters, w, h, itc)
+ </div>
+ <div class="description">Creates a new image layer.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.TileLayer</b>(image, parameters, w, h, itc)
+ </div>
+
+ <div class="description">
+ Creates a new image layer.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageBase.html">bigshot.ImageBase</a>}</span> <b>image</b>
+
+ </dt>
+ <dd>the image that this layer is part of</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the associated image parameters</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>w</b>
+
+ </dt>
+ <dd>the current width in css pixels of the viewport</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>h</b>
+
+ </dt>
+ <dd>the current height in css pixels of the viewport</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageTileCache.html">bigshot.ImageTileCache</a>}</span> <b>itc</b>
+
+ </dt>
+ <dd>the tile cache to use</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.TimedWeakReference.html b/js/vendor/bigshot/doc/js/symbols/bigshot.TimedWeakReference.html
new file mode 100644
index 00000000..daa79130
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.TimedWeakReference.html
@@ -0,0 +1,657 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.TimedWeakReference - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.TimedWeakReference
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Caches a lazy-created resource for a given time before disposing it.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__TimedWeakReference.js.html">TimedWeakReference.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.TimedWeakReference.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.TimedWeakReference.html#constructor">bigshot.TimedWeakReference</a></b>(create, dispose, interval)
+ </div>
+ <div class="description">Creates a new instance.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.TimedWeakReference.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TimedWeakReference.html#clear">clear</a></b>()
+ </div>
+ <div class="description">Forcibly disposes the held resource, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.TimedWeakReference.<b><a href="../symbols/bigshot.TimedWeakReference.html#.Create">Create</a></b>()
+ </div>
+ <div class="description">Creates a new instance of the cached resource.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TimedWeakReference.html#dispose">dispose</a></b>()
+ </div>
+ <div class="description">Disposes of this instance.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.TimedWeakReference.<b><a href="../symbols/bigshot.TimedWeakReference.html#.Dispose">Dispose</a></b>(resource)
+ </div>
+ <div class="description">Disposes a of the cached resource.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TimedWeakReference.html#get">get</a></b>()
+ </div>
+ <div class="description">Gets the resource.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.TimedWeakReference</b>(create, dispose, interval)
+ </div>
+
+ <div class="description">
+ Creates a new instance.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.TimedWeakReference.html#.Create">bigshot.TimedWeakReference.Create</a>}</span> <b>create</b>
+
+ </dt>
+ <dd>a function that creates the held resource. May be called multiple times, but not without a call to dispose inbetween.</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.TimedWeakReference.html#.Dispose">bigshot.TimedWeakReference.Dispose</a>}</span> <b>dispose</b>
+
+ </dt>
+ <dd>a function that disposes the resource created by create.</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>interval</b>
+
+ </dt>
+ <dd>the polling interval in milliseconds. If the last access time is further back than one interval, the held resource is disposed (and will be re-created on the next call to get).</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="clear"> </a>
+ <div class="fixedFont">
+
+
+ <b>clear</b>()
+
+ </div>
+ <div class="description">
+ Forcibly disposes the held resource, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".Create"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.TimedWeakReference.</span><b>Create</b>()
+
+ </div>
+ <div class="description">
+ Creates a new instance of the cached resource. May return null, in which case that value is cached. The function may be called multiple times, but a corresponding call to the dispose function will always occur inbetween.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="dispose"> </a>
+ <div class="fixedFont">
+
+
+ <b>dispose</b>()
+
+ </div>
+ <div class="description">
+ Disposes of this instance. The resource is disposed.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".Dispose"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.TimedWeakReference.</span><b>Dispose</b>(resource)
+
+ </div>
+ <div class="description">
+ Disposes a of the cached resource.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>resource</b>
+
+ </dt>
+ <dd>the resource that was created by the create function</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="get"> </a>
+ <div class="fixedFont">
+
+
+ <b>get</b>()
+
+ </div>
+ <div class="description">
+ Gets the resource. The resource is created if needed. The last access time is updated.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.TransformStack.html b/js/vendor/bigshot/doc/js/symbols/bigshot.TransformStack.html
new file mode 100644
index 00000000..b05b29df
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.TransformStack.html
@@ -0,0 +1,1006 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.TransformStack - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.TransformStack
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ A 3D transformation stack.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__TransformStack.js.html">TransformStack.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.TransformStack.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.TransformStack.html#constructor">bigshot.TransformStack</a></b>()
+ </div>
+ <div class="description">Creates a new transformation stack, initialized to the identity transform.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.TransformStack.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.TransformStack.html#mvMatrix">mvMatrix</a></b>
+ </div>
+ <div class="description">The current transform matrix.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.TransformStack.html#mvMatrixStack">mvMatrixStack</a></b>
+ </div>
+ <div class="description">The object-to-world transform matrix stack.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.TransformStack.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#multiply">multiply</a></b>(matrix)
+ </div>
+ <div class="description">Multiplies the current world transform with a matrix.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#perspective">perspective</a></b>(fovy, aspect, znear, zfar)
+ </div>
+ <div class="description">Multiplies the current matrix with a perspective transformation matrix.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#pop">pop</a></b>()
+ </div>
+ <div class="description">Pops the last-pushed world transform off the stack, thereby restoring it.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#push">push</a></b>(matrix)
+ </div>
+ <div class="description">Pushes the current world transform onto the stack and returns a new, identical one.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#reset">reset</a></b>()
+ </div>
+ <div class="description">Resets the world transform to the identity transform.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#rotate">rotate</a></b>(ang, vector)
+ </div>
+ <div class="description">Adds a rotation to the world transform matrix.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#rotateX">rotateX</a></b>(ang)
+ </div>
+ <div class="description">Adds a rotation around the x-axis to the world transform matrix.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#rotateY">rotateY</a></b>(ang)
+ </div>
+ <div class="description">Adds a rotation around the y-axis to the world transform matrix.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#rotateZ">rotateZ</a></b>(ang)
+ </div>
+ <div class="description">Adds a rotation around the z-axis to the world transform matrix.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.TransformStack.html#translate">translate</a></b>(vector)
+ </div>
+ <div class="description">Adds a translation to the world transform matrix.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.TransformStack</b>()
+ </div>
+
+ <div class="description">
+ Creates a new transformation stack, initialized to the identity transform.
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="mvMatrix"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{Matrix}</span>
+ <b>mvMatrix</b>
+
+ </div>
+ <div class="description">
+ The current transform matrix.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="mvMatrixStack"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{Matrix[]}</span>
+ <b>mvMatrixStack</b>
+
+ </div>
+ <div class="description">
+ The object-to-world transform matrix stack.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="multiply"> </a>
+ <div class="fixedFont">
+
+
+ <b>multiply</b>(matrix)
+
+ </div>
+ <div class="description">
+ Multiplies the current world transform with a matrix.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Matrix}</span> <b>matrix</b>
+
+ </dt>
+ <dd>the matrix to multiply with</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="perspective"> </a>
+ <div class="fixedFont">
+
+
+ <b>perspective</b>(fovy, aspect, znear, zfar)
+
+ </div>
+ <div class="description">
+ Multiplies the current matrix with a perspective transformation matrix.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>fovy</b>
+
+ </dt>
+ <dd>vertical field of view</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>aspect</b>
+
+ </dt>
+ <dd>viewport aspect ratio</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>znear</b>
+
+ </dt>
+ <dd>near image plane</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>zfar</b>
+
+ </dt>
+ <dd>far image plane</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="pop"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{Matrix}</span>
+ <b>pop</b>()
+
+ </div>
+ <div class="description">
+ Pops the last-pushed world transform off the stack, thereby restoring it.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the previously-pushed matrix</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="push"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{Matrix}</span>
+ <b>push</b>(matrix)
+
+ </div>
+ <div class="description">
+ Pushes the current world transform onto the stack and returns a new, identical one.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Matrix}</span> <b>matrix</b>
+ <i>Optional</i>
+ </dt>
+ <dd>the new world transform. If omitted, the current is used</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the new world transform matrix</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="reset"> </a>
+ <div class="fixedFont">
+
+
+ <b>reset</b>()
+
+ </div>
+ <div class="description">
+ Resets the world transform to the identity transform.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="rotate"> </a>
+ <div class="fixedFont">
+
+
+ <b>rotate</b>(ang, vector)
+
+ </div>
+ <div class="description">
+ Adds a rotation to the world transform matrix.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>ang</b>
+
+ </dt>
+ <dd>the angle in degrees to rotate</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>vector</b>
+
+ </dt>
+ <dd>the rotation vector</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="rotateX"> </a>
+ <div class="fixedFont">
+
+
+ <b>rotateX</b>(ang)
+
+ </div>
+ <div class="description">
+ Adds a rotation around the x-axis to the world transform matrix.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>ang</b>
+
+ </dt>
+ <dd>the angle in degrees to rotate</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="rotateY"> </a>
+ <div class="fixedFont">
+
+
+ <b>rotateY</b>(ang)
+
+ </div>
+ <div class="description">
+ Adds a rotation around the y-axis to the world transform matrix.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>ang</b>
+
+ </dt>
+ <dd>the angle in degrees to rotate</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="rotateZ"> </a>
+ <div class="fixedFont">
+
+
+ <b>rotateZ</b>(ang)
+
+ </div>
+ <div class="description">
+ Adds a rotation around the z-axis to the world transform matrix.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>ang</b>
+
+ </dt>
+ <dd>the angle in degrees to rotate</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="translate"> </a>
+ <div class="fixedFont">
+
+
+ <b>translate</b>(vector)
+
+ </div>
+ <div class="description">
+ Adds a translation to the world transform matrix.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>vector</b>
+
+ </dt>
+ <dd>the translation vector</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VREvent.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VREvent.html
new file mode 100644
index 00000000..c3c2e467
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VREvent.html
@@ -0,0 +1,710 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VREvent - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VREvent
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.Event.html">bigshot.Event</a>.</p>
+
+ <p class="description">
+ Base class for events dispatched by bigshot.VRPanorama.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VREvent.js.html">VREvent.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VREvent.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VREvent.html#constructor">bigshot.VREvent</a></b>(data)
+ </div>
+ <div class="description">Creates an image event.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.VREvent.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VREvent.html#clientX">clientX</a></b>
+ </div>
+ <div class="description">The client X coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VREvent.html#clientY">clientY</a></b>
+ </div>
+ <div class="description">The client Y coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VREvent.html#localX">localX</a></b>
+ </div>
+ <div class="description">The local X coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VREvent.html#localY">localY</a></b>
+ </div>
+ <div class="description">The local Y coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VREvent.html#pitch">pitch</a></b>
+ </div>
+ <div class="description">The pitch coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VREvent.html#ray">ray</a></b>
+ </div>
+ <div class="description">A x,y,z triplet specifying a 3D ray from the viewer in the direction the event took place.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VREvent.html#yaw">yaw</a></b>
+ </div>
+ <div class="description">The yaw coordinate of the event, if any.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+ <dt>Fields borrowed from class <a href="../symbols/bigshot.Event.html">bigshot.Event</a>: </dt><dd><a href="../symbols/bigshot.Event.html#bubbles">bubbles</a>, <a href="../symbols/bigshot.Event.html#cancelable">cancelable</a>, <a href="../symbols/bigshot.Event.html#currentTarget">currentTarget</a>, <a href="../symbols/bigshot.Event.html#defaultPrevented">defaultPrevented</a>, <a href="../symbols/bigshot.Event.html#isTrusted">isTrusted</a>, <a href="../symbols/bigshot.Event.html#target">target</a>, <a href="../symbols/bigshot.Event.html#timeStamp">timeStamp</a>, <a href="../symbols/bigshot.Event.html#type">type</a></dd>
+ </dl>
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.Event.html">bigshot.Event</a>: </dt><dd><a href="../symbols/bigshot.Event.html#preventDefault">preventDefault</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VREvent</b>(data)
+ </div>
+
+ <div class="description">
+ Creates an image event.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>data</b>
+
+ </dt>
+ <dd>a data object whose fields will be used to set the corresponding fields of the event object.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="clientX"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>clientX</b>
+
+ </div>
+ <div class="description">
+ The client X coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="clientY"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>clientY</b>
+
+ </div>
+ <div class="description">
+ The client Y coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="localX"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>localX</b>
+
+ </div>
+ <div class="description">
+ The local X coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="localY"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>localY</b>
+
+ </div>
+ <div class="description">
+ The local Y coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="pitch"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>pitch</b>
+
+ </div>
+ <div class="description">
+ The pitch coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="ray"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{xyz-triplet}</span>
+ <b>ray</b>
+
+ </div>
+ <div class="description">
+ A x,y,z triplet specifying a 3D ray from the viewer in the direction the event took place. The same as the yaw and pitch fields, but in Cartesian coordinates.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="yaw"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>yaw</b>
+
+ </div>
+ <div class="description">
+ The yaw coordinate of the event, if any.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRFace.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRFace.html
new file mode 100644
index 00000000..c49225fa
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRFace.html
@@ -0,0 +1,613 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRFace - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRFace
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ a VR cube face. The <a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a> instance holds six of these.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRFace.js.html">VRFace.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRFace.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRFace.html#constructor">bigshot.VRFace</a></b>(owner, key, topLeft_, width_, u, v, onLoaded)
+ </div>
+ <div class="description">Creates a new VR cube face.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.VRFace.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRFace.html#endRender">endRender</a></b>()
+ </div>
+ <div class="description">Performs post-render cleanup.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRFace.html#isUpdated">isUpdated</a></b>()
+ </div>
+ <div class="description">Tests if the face has had any updated texture notifications from the tile cache.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRFace.html#render">render</a></b>(scene)
+ </div>
+ <div class="description">Renders this face into a scene.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRFace</b>(owner, key, topLeft_, width_, u, v, onLoaded)
+ </div>
+
+ <div class="description">
+ Creates a new VR cube face.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>}</span> <b>owner</b>
+
+ </dt>
+ <dd>the VR panorama this face is part of.</dd>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>key</b>
+
+ </dt>
+ <dd>the identifier for the face. "f" is front, "b" is back, "u" is up, "d" is down, "l" is left and "r" is right.</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>topLeft_</b>
+
+ </dt>
+ <dd>the top-left corner of the quad.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>width_</b>
+
+ </dt>
+ <dd>the length of the sides of the face, expressed in multiples of u and v.</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>u</b>
+
+ </dt>
+ <dd>basis vector going from the top left corner along the top edge of the face</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>v</b>
+
+ </dt>
+ <dd>basis vector going from the top left corner along the left edge of the face</dd>
+
+ <dt>
+ <b>onLoaded</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="endRender"> </a>
+ <div class="fixedFont">
+
+
+ <b>endRender</b>()
+
+ </div>
+ <div class="description">
+ Performs post-render cleanup.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="isUpdated"> </a>
+ <div class="fixedFont">
+
+
+ <b>isUpdated</b>()
+
+ </div>
+ <div class="description">
+ Tests if the face has had any updated texture notifications from the tile cache.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="render"> </a>
+ <div class="fixedFont">
+
+
+ <b>render</b>(scene)
+
+ </div>
+ <div class="description">
+ Renders this face into a scene.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.WebGLTexturedQuadScene.html">bigshot.WebGLTexturedQuadScene</a>}</span> <b>scene</b>
+
+ </dt>
+ <dd>the scene to render into</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRHotspot.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRHotspot.html
new file mode 100644
index 00000000..d01e9067
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRHotspot.html
@@ -0,0 +1,1053 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRHotspot - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRHotspot
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Abstract base class for panorama hotspots. A Hotspot is simply an HTML element that is moved / hidden etc. to overlay a given position in the panorama.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRHotspot.js.html">VRHotspot.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRHotspot.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRHotspot.html#constructor">bigshot.VRHotspot</a></b>(panorama)
+ </div>
+ <div class="description">Abstract base class for panorama hotspots.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.VRHotspot.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRHotspot.html#clippingStrategy">clippingStrategy</a></b>
+ </div>
+ <div class="description">The method to use for dealing with hotspots that extend outside the viewport.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.VRHotspot.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRHotspot.html#clip">clip</a></b>(clipData)
+ </div>
+ <div class="description">Clips the hotspot against the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.VRHotspot.<b><a href="../symbols/bigshot.VRHotspot.html#.CLIP_ADJUST">CLIP_ADJUST</a></b>(panorama)
+ </div>
+ <div class="description">Resizes the hotspot to fit in the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.VRHotspot.<b><a href="../symbols/bigshot.VRHotspot.html#.CLIP_CENTER">CLIP_CENTER</a></b>(panorama)
+ </div>
+ <div class="description">Hides the hotspot if its center is outside the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.VRHotspot.<b><a href="../symbols/bigshot.VRHotspot.html#.CLIP_FADE">CLIP_FADE</a></b>(borderSizeInPixels, borderSizeInPixels)
+ </div>
+ <div class="description">Progressively fades the hotspot as it gets closer to the viewport edges.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.VRHotspot.<b><a href="../symbols/bigshot.VRHotspot.html#.CLIP_FRACTION">CLIP_FRACTION</a></b>(frac, frac)
+ </div>
+ <div class="description">Hides the hotspot if less than <code>frac</code> of its area is visible.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.VRHotspot.<b><a href="../symbols/bigshot.VRHotspot.html#.CLIP_ZOOM">CLIP_ZOOM</a></b>(s)
+ </div>
+ <div class="description">Shrinks the hotspot as it approaches the viewport edges.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRHotspot.html#layout">layout</a></b>()
+ </div>
+ <div class="description">Layout and resize the hotspot.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRHotspot.html#toScreen">toScreen</a></b>(p)
+ </div>
+ <div class="description">Converts the world-coordinate point p to screen coordinates.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRHotspot.html#toVector">toVector</a></b>(yaw, pitch)
+ </div>
+ <div class="description">Converts the polar coordinates to world coordinates.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRHotspot</b>(panorama)
+ </div>
+
+ <div class="description">
+ Abstract base class for panorama hotspots.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>}</span> <b>panorama</b>
+
+ </dt>
+ <dd>the panorama to attach this hotspot to</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="clippingStrategy"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{function(clipData)}</span>
+ <b>clippingStrategy</b>
+
+ </div>
+ <div class="description">
+ The method to use for dealing with hotspots that extend outside the viewport. Note that #CLIP_ADJUST et al are functions, not constants. To set the value, you must call the function to get a clipping strategy:
+
+
+ </div>
+
+
+
+ <pre class="code">var hotspot = ...; // note the function call below ---------------v hotspot.clippingStrategy = hotspot.CLIP_ADJUST ();</pre>
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd>bigshot.VRHotspot#CLIP_ADJUST</dd>
+
+ <dd>bigshot.VRHotspot#CLIP_CENTER</dd>
+
+ <dd>bigshot.VRHotspot#CLIP_FRACTION</dd>
+
+ <dd>bigshot.VRHotspot#CLIP_ZOOM</dd>
+
+ <dd>bigshot.VRHotspot#CLIP_FADE</dd>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clip">bigshot.VRHotspot#clip</a></dd>
+
+ </dl>
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ bigshot.VRHotspot#CLIP_ADJUST
+ </dd>
+ </dl>
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="clip"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>clip</b>(clipData)
+
+ </div>
+ <div class="description">
+ Clips the hotspot against the viewport. Both parameters are in/out. Clipping is done by adjusting the values of the parameters.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>clipData</b>
+
+ </dt>
+ <dd>Information about the hotspot.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>clipData.x</b>
+
+ </dt>
+ <dd>the x-coordinate of the top-left corner of the hotspot, in pixels.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>clipData.y</b>
+
+ </dt>
+ <dd>the y-coordinate of the top-left corner of the hotspot, in pixels.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>clipData.w</b>
+
+ </dt>
+ <dd>the width of the hotspot, in pixels.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>clipData.h</b>
+
+ </dt>
+ <dd>the height of the hotspot, in pixels.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>clipData.opacity</b>
+ <i>Optional</i>
+ </dt>
+ <dd>the opacity of the hotspot, ranging from 0.0 (transparent) to 1.0 (opaque). If set, the opacity of the hotspot element is adjusted.</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>true if the hotspot is visible, false otherwise</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name=".CLIP_ADJUST"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+ <span class="light">{function(clipData)}</span>
+ <span class="light">bigshot.VRHotspot.</span><b>CLIP_ADJUST</b>(panorama)
+
+ </div>
+ <div class="description">
+ Resizes the hotspot to fit in the viewport. Hides the hotspot if it is completely outside the viewport.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>panorama</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clip">bigshot.VRHotspot#clip</a></dd>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clippingStrategy">bigshot.VRHotspot#clippingStrategy</a></dd>
+
+ </dl>
+
+
+ <hr />
+
+ <a name=".CLIP_CENTER"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+ <span class="light">{function(clipData)}</span>
+ <span class="light">bigshot.VRHotspot.</span><b>CLIP_CENTER</b>(panorama)
+
+ </div>
+ <div class="description">
+ Hides the hotspot if its center is outside the viewport.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>panorama</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clip">bigshot.VRHotspot#clip</a></dd>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clippingStrategy">bigshot.VRHotspot#clippingStrategy</a></dd>
+
+ </dl>
+
+
+ <hr />
+
+ <a name=".CLIP_FADE"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.VRHotspot.</span><b>CLIP_FADE</b>(borderSizeInPixels, borderSizeInPixels)
+
+ </div>
+ <div class="description">
+ Progressively fades the hotspot as it gets closer to the viewport edges.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>borderSizeInPixels</b>
+
+ </dt>
+ <dd>the distance from the edge, in pixels, where the hotspot is completely opaque.</dd>
+
+ <dt>
+ <b>borderSizeInPixels</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clip">bigshot.VRHotspot#clip</a></dd>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clippingStrategy">bigshot.VRHotspot#clippingStrategy</a></dd>
+
+ </dl>
+
+
+ <hr />
+
+ <a name=".CLIP_FRACTION"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+ <span class="light">{function(clipData)}</span>
+ <span class="light">bigshot.VRHotspot.</span><b>CLIP_FRACTION</b>(frac, frac)
+
+ </div>
+ <div class="description">
+ Hides the hotspot if less than <code>frac</code> of its area is visible.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>frac</b>
+
+ </dt>
+ <dd>the fraction (0.0 - 1.0) of the hotspot that must be visible for it to be shown.</dd>
+
+ <dt>
+ <b>frac</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clip">bigshot.VRHotspot#clip</a></dd>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clippingStrategy">bigshot.VRHotspot#clippingStrategy</a></dd>
+
+ </dl>
+
+
+ <hr />
+
+ <a name=".CLIP_ZOOM"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.VRHotspot.</span><b>CLIP_ZOOM</b>(s)
+
+ </div>
+ <div class="description">
+ Shrinks the hotspot as it approaches the viewport edges.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>s</b>
+
+ </dt>
+ <dd>The full size of the hotspot.</dd>
+
+ <dt>
+ <b>s.w</b>
+
+ </dt>
+ <dd>The full width of the hotspot, in pixels.</dd>
+
+ <dt>
+ <b>s.h</b>
+
+ </dt>
+ <dd>The full height of the hotspot, in pixels.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clip">bigshot.VRHotspot#clip</a></dd>
+
+ <dd><a href="../symbols/bigshot.VRHotspot.html#clippingStrategy">bigshot.VRHotspot#clippingStrategy</a></dd>
+
+ </dl>
+
+
+ <hr />
+
+ <a name="layout"> </a>
+ <div class="fixedFont">
+
+
+ <b>layout</b>()
+
+ </div>
+ <div class="description">
+ Layout and resize the hotspot. Called by the panorama.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="toScreen"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{point}</span>
+ <b>toScreen</b>(p)
+
+ </div>
+ <div class="description">
+ Converts the world-coordinate point p to screen coordinates.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>p</b>
+
+ </dt>
+ <dd>the world-coordinate point</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="toVector"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span>
+ <b>toVector</b>(yaw, pitch)
+
+ </div>
+ <div class="description">
+ Converts the polar coordinates to world coordinates. The distance is assumed to be 1.0.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>yaw</b>
+
+ </dt>
+ <dd>the yaw, in degrees</dd>
+
+ <dt>
+ <b>pitch</b>
+
+ </dt>
+ <dd>the pitch, in degrees</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.RenderCause.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.RenderCause.html
new file mode 100644
index 00000000..c0d359fd
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.RenderCause.html
@@ -0,0 +1,437 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRPanorama.RenderCause - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRPanorama.RenderCause
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ The reason why the <a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a> is being rendered. Due to the events outside of the panorama, the VR panorama may be forced to re-render itself. When this happens, the <a href="../symbols/bigshot.VRPanorama.html#.RenderListener">bigshot.VRPanorama.RenderListener</a>s receive a constant indicating the cause of the rendering.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRPanorama.js.html">VRPanorama.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRPanorama.RenderCause.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanorama.RenderCause.html#constructor">bigshot.VRPanorama.RenderCause</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRPanorama.RenderCause</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRPanorama.html#.ONRENDER_TEXTURE_UPDATE">bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.RenderState.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.RenderState.html
new file mode 100644
index 00000000..2f285121
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.RenderState.html
@@ -0,0 +1,439 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRPanorama.RenderState - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRPanorama.RenderState
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ The state the renderer is in when a <a href="../symbols/bigshot.VRPanorama.html#.RenderListener">bigshot.VRPanorama.RenderListener</a> is called.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRPanorama.js.html">VRPanorama.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRPanorama.RenderState.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanorama.RenderState.html#constructor">bigshot.VRPanorama.RenderState</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRPanorama.RenderState</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRPanorama.html#.ONRENDER_BEGIN">bigshot.VRPanorama.ONRENDER_BEGIN</a></dd>
+
+ <dd><a href="../symbols/bigshot.VRPanorama.html#.ONRENDER_END">bigshot.VRPanorama.ONRENDER_END</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.html
new file mode 100644
index 00000000..9b3fdc5b
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanorama.html
@@ -0,0 +1,2336 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRPanorama - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRPanorama
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>.</p>
+
+ <p class="description">
+ A cube-map VR panorama.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRPanorama.js.html">VRPanorama.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRPanorama.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanorama.html#constructor">bigshot.VRPanorama</a></b>(parameters)
+ </div>
+ <div class="description">Creates a new VR panorama in a canvas.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.VRPanorama.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &lt;constant&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ bigshot.VRPanorama.<b><a href="../symbols/bigshot.VRPanorama.html#.DRAG_GRAB">DRAG_GRAB</a></b>
+ </div>
+ <div class="description">When the mouse is pressed and dragged, the camera rotates proportionally to the length of the dragging.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &lt;constant&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ bigshot.VRPanorama.<b><a href="../symbols/bigshot.VRPanorama.html#.DRAG_PAN">DRAG_PAN</a></b>
+ </div>
+ <div class="description">When the mouse is pressed and dragged, the camera continuously rotates with a speed that is proportional to the length of the dragging.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &lt;constant&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ bigshot.VRPanorama.<b><a href="../symbols/bigshot.VRPanorama.html#.ONRENDER_BEGIN">ONRENDER_BEGIN</a></b>
+ </div>
+ <div class="description">A RenderListener state parameter value used at the start of each render.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &lt;constant&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ bigshot.VRPanorama.<b><a href="../symbols/bigshot.VRPanorama.html#.ONRENDER_END">ONRENDER_END</a></b>
+ </div>
+ <div class="description">A RenderListener state parameter value used at the end of each render.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &lt;constant&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ bigshot.VRPanorama.<b><a href="../symbols/bigshot.VRPanorama.html#.ONRENDER_TEXTURE_UPDATE">ONRENDER_TEXTURE_UPDATE</a></b>
+ </div>
+ <div class="description">A RenderListener cause parameter indicating that a previously requested texture has loaded and a render is forced.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+ <dt>Fields borrowed from class <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>: </dt><dd><a href="../symbols/bigshot.EventDispatcher.html#eventListeners">eventListeners</a></dd>
+ </dl>
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.VRPanorama.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#addHotspot">addHotspot</a></b>(hs)
+ </div>
+ <div class="description">Adds a hotstpot.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#addRenderable">addRenderable</a></b>(renderable)
+ </div>
+ <div class="description">Add a function that will be called to render any additional quads.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#addRenderListener">addRenderListener</a></b>(listener)
+ </div>
+ <div class="description">Add a function that will be called at various times during the render.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#autoResizeContainer">autoResizeContainer</a></b>(sizeContainer)
+ </div>
+ <div class="description">Automatically resizes the canvas element to the size of the given element on resize.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#autoRotate">autoRotate</a></b>()
+ </div>
+ <div class="description">Starts auto-rotation of the camera.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#autoRotateWhenIdle">autoRotateWhenIdle</a></b>(delay)
+ </div>
+ <div class="description">Sets the panorama to auto-rotate after a certain time has elapsed with no user interaction.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#createVREventData">createVREventData</a></b>(data)
+ </div>
+ <div class="description">Creates and initializes a <a href="../symbols/bigshot.VREvent.html">bigshot.VREvent</a> object.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#dispose">dispose</a></b>()
+ </div>
+ <div class="description">Unregisters event handlers and other page-level hooks.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#fullScreen">fullScreen</a></b>(onClose)
+ </div>
+ <div class="description">Maximizes the image to cover the browser viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#getFov">getFov</a></b>()
+ </div>
+ <div class="description">Gets the field of view.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#getMaxTextureMagnification">getMaxTextureMagnification</a></b>()
+ </div>
+ <div class="description">Gets the current maximum texture magnification.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#getMinFovFromViewportAndImage">getMinFovFromViewportAndImage</a></b>()
+ </div>
+ <div class="description">Computes the minimum field of view where the resulting image will not have to stretch the textures more than given by the <a href="../symbols/bigshot.VRPanoramaParameters.html#maxTextureMagnification">bigshot.VRPanoramaParameters#maxTextureMagnification</a> parameter.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#getParameters">getParameters</a></b>()
+ </div>
+ <div class="description">Returns the <a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a> object used by this instance.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#getPitch">getPitch</a></b>()
+ </div>
+ <div class="description">Gets the current camera pitch.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#getTranslation">getTranslation</a></b>()
+ </div>
+ <div class="description">Returns the current view translation as an x-y-z triplet.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#getYaw">getYaw</a></b>()
+ </div>
+ <div class="description">Gets the current camera yaw.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#removeRenderable">removeRenderable</a></b>(renderable)
+ </div>
+ <div class="description">Removes a function that will be called to render any additional quads.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#removeRenderListener">removeRenderListener</a></b>(listener)
+ </div>
+ <div class="description">Removes a function that will be called at various times during the render.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#render">render</a></b>(cause, data)
+ </div>
+ <div class="description">Renders the VR cube.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.VRPanorama.<b><a href="../symbols/bigshot.VRPanorama.html#.Renderable">Renderable</a></b>(renderer, scene)
+ </div>
+ <div class="description">Specification for functions passed to <a href="../symbols/bigshot.VRPanorama.html#addRenderable">bigshot.VRPanorama#addRenderable</a>.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#renderAsap">renderAsap</a></b>()
+ </div>
+ <div class="description">Posts a render() call via a timeout or the requestAnimationFrame API.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.VRPanorama.<b><a href="../symbols/bigshot.VRPanorama.html#.RenderListener">RenderListener</a></b>(state, cause, data)
+ </div>
+ <div class="description">Specification for functions passed to <a href="../symbols/bigshot.VRPanorama.html#addRenderListener">bigshot.VRPanorama#addRenderListener</a>.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#renderUpdated">renderUpdated</a></b>(cause, data)
+ </div>
+ <div class="description">Render updated faces.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#screenToPolar">screenToPolar</a></b>(x, y)
+ </div>
+ <div class="description">Returns the angle (yaw, pitch) for a given pixel coordinate.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#setDragMode">setDragMode</a></b>(mode)
+ </div>
+ <div class="description">Sets the mouse dragging mode.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#setFov">setFov</a></b>(fov)
+ </div>
+ <div class="description">Sets the field of view.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#setMaxTextureMagnification">setMaxTextureMagnification</a></b>(v)
+ </div>
+ <div class="description">Sets the maximum texture magnification.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#setPitch">setPitch</a></b>(p)
+ </div>
+ <div class="description">Sets the current camera pitch.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#setTranslation">setTranslation</a></b>(x, y, z)
+ </div>
+ <div class="description">Sets the view translation.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#setYaw">setYaw</a></b>(y)
+ </div>
+ <div class="description">Sets the current camera yaw.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#smoothRotate">smoothRotate</a></b>(dy, dp, df)
+ </div>
+ <div class="description">Smoothly rotates the camera.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#smoothRotateTo">smoothRotateTo</a></b>(yaw, pitch, fov, the)
+ </div>
+ <div class="description">Smoothly rotates the panorama to the given state.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#smoothRotateToXY">smoothRotateToXY</a></b>(x, y)
+ </div>
+ <div class="description">Smoothly rotates the panorama so that the point given by x and y, in pixels relative to the top left corner of the panorama, ends up in the center of the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#snapPitch">snapPitch</a></b>(p)
+ </div>
+ <div class="description">Restricts the pitch value to be between the minPitch and maxPitch parameters.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.EventDispatcher.html">bigshot.EventDispatcher</a>: </dt><dd><a href="../symbols/bigshot.EventDispatcher.html#addEventListener">addEventListener</a>, <a href="../symbols/bigshot.EventDispatcher.html#fireEvent">fireEvent</a>, <a href="../symbols/bigshot.EventDispatcher.html#removeEventListener">removeEventListener</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the events documented in the class bigshot.VRPanorama.">
+ <caption>Event Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Event Attributes</th>
+ <th scope="col">Event Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRPanorama.html#event:dblclick">dblclick</a></b>(event)
+ </div>
+ <div class="description">Fired when the user double-clicks on the panorama.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+ <dl class="inheritsList">
+
+ </dl>
+
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRPanorama</b>(parameters)
+ </div>
+
+ <div class="description">
+ Creates a new VR panorama in a canvas. <b>Requires WebGL or CSS3D support.</b> (Note: See <a href="../symbols/bigshot.VRPanorama.html#dispose">bigshot.VRPanorama#dispose</a> for important information.) <h3 id="creating-a-cubemap">Creating a Cube Map</h3> <p>The panorama consists of six image pyramids, one for each face of the VR cube. Due to restrictions in WebGL, each texture tile must have a power-of-two (POT) size - that is, 2, 4, ..., 128, 256, etc. Furthermore, due to the way the faces are tesselated the largest image must consist of POT x POT tiles. The final restriction is that the tiles must overlap for good seamless results. <p>The MakeImagePyramid has some sensible defaults built-in. If you just use the command line: <code><pre> java -jar bigshot.jar input.jpg temp/dzi \ --preset dzi-cubemap \ --format folders </pre></code> <p>You will get 2034 pixels per face, and a tile size of 256 pixels with 2 pixels overlap. If you don't like that, you can use the <code>overlap</code>, <code>face-size</code> and <code>tile-size</code> parameters. Let's take these one by one: <ul> <li><p><code>overlap</code>: Overlap defines how much tiles should overlap, just to avoid seams in the rendered results caused by finite numeric precision. The default is <b>2</b>, which I've found works great for me.</p></li> <li><p><code>tile-size</code>: First you need to decide what POT size the output should be. Then subtract the overlap value. For example, if you set overlap to 1, <code>tile-size</code> could be 127, 255, 511, or any 2<sup>n</sup>-1 value.</p></li> <li><p><code>face-size</code>: Finally, we decide on a size for the full cube face. This should be tile-size * 2<sup>n</sup>. Let's say we set n=3, which makes each face 8x8 tiles at the most zoomed-in level. For a tile-size of 255, then, face-size is 255*2<sup>3</sup> = 255*8 = <b>2040</b>.</p></li> </ul> <p>A command line for the hypothetical scenario above would be: <code><pre> java -jar bigshot.jar input.jpg temp/dzi \ --preset dzi-cubemap \ --overlap 1 \ --tile-size 255 \ --face-size 2040 \ --format folders </pre></code> <p>If your tile size numbers don't add up, you'll get a warning like: <code><pre> WARNING: Resulting image tile size (tile-size + overlap) is not a power of two: 255 </pre></code> <p>If your face size don't add up, you'll get another warning: <code><pre> WARNING: face-size is not an even multiple of tile-size: 2040 % 254 != 0 </pre></code> <h3 id="integration-with-saladoplayer">Integration With SaladoPlayer</h3> <p><a href="http://panozona.com/wiki/">SaladoPlayer</a> is a cool Flash-based VR panorama viewer that can display Deep Zoom Images. It can be used as a fallback for Bigshot for browsers that don't support WebGL. <p>Since Bigshot can use a Deep Zoom Image (DZI) via a <a href="../symbols/bigshot.DeepZoomImageFileSystem.html">bigshot.DeepZoomImageFileSystem</a> adapter, the common file format is DZI. There are two cases: The first is when the DZI is served up as a folder structure, the second when we pack the DZI into a Bigshot archive and serve it using bigshot.php. <h4>Serving DZI as Folders</h4> <p>This is an easy one. First, we generate the required DZIs: <code><pre> java -jar bigshot.jar input.jpg temp/dzi \ --preset dzi-cubemap \ --format folders </pre></code> <p>We'll assume that we have the six DZI folders in "temp/dzi", and that they have "face_" as a common prefix (which is what Bigshot's MakeImagePyramid outputs). So we have, for example, "temp/dzi/face_f.xml" and the tiles for face_f in "temp/dzi/face_f/". Set up Bigshot like this: <code><pre> bvr = new bigshot.VRPanorama ( new bigshot.VRPanoramaParameters ({ container : document.getElementById ("canvas"), basePath : "temp/dzi", fileSystemType : "dzi" })); </pre></code> <p>SaladoPlayer uses an XML config file, which in this case will look something like this: <code><pre> &lt;SaladoPlayer> &lt;global debug="false" firstPanorama="pano"/> &lt;panoramas> &lt;panorama id="pano" path="temp/dzi/face_f.xml"/> &lt;/panoramas> &lt;/SaladoPlayer> </pre></code> <h4>Serving DZI as Archive</h4> <p>This one is a bit more difficult. First we create a DZI as a bigshot archive: <code><pre> java -jar bigshot.jar input.jpg temp/dzi.bigshot \ --preset dzi-cubemap \ --format archive </pre></code> <p>We'll assume that we have our Bigshot archive at "temp/dzi.bigshot". For this we will use the "entry" parameter of bigshot.php to serve up the right files: <code><pre> bvr = new bigshot.VRPanorama ( new bigshot.VRPanoramaParameters ({ container : document.getElementById ("canvas"), basePath : "/bigshot.php?file=temp/dzi.bigshot&entry=", fileSystemType : "dzi" })); </pre></code> <p>SaladoPlayer uses an XML config file, which in this case will look something like this: <code><pre> &lt;SaladoPlayer> &lt;global debug="false" firstPanorama="pano"/> &lt;panoramas> &lt;panorama id="pano" path="/bigshot.php?file=dzi.bigshot&amp;amp;entry=face_f.xml"/> &lt;/panoramas> &lt;/SaladoPlayer> </pre></code> <h3>Usage example:</h3>
+
+ </div>
+
+
+
+ <pre class="code">var bvr = new bigshot.VRPanorama ( new bigshot.VRPanoramaParameters ({ basePath : "/bigshot.php?file=myvr.bigshot", fileSystemType : "archive", container : document.getElementById ("bigshot_canvas") }));</pre>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the panorama parameters.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name=".DRAG_GRAB"> </a>
+ <div class="fixedFont">&lt;static&gt; &lt;constant&gt;
+
+
+ <span class="light">bigshot.VRPanorama.</span><b>DRAG_GRAB</b>
+
+ </div>
+ <div class="description">
+ When the mouse is pressed and dragged, the camera rotates proportionally to the length of the dragging.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".DRAG_PAN"> </a>
+ <div class="fixedFont">&lt;static&gt; &lt;constant&gt;
+
+
+ <span class="light">bigshot.VRPanorama.</span><b>DRAG_PAN</b>
+
+ </div>
+ <div class="description">
+ When the mouse is pressed and dragged, the camera continuously rotates with a speed that is proportional to the length of the dragging.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".ONRENDER_BEGIN"> </a>
+ <div class="fixedFont">&lt;static&gt; &lt;constant&gt;
+
+ <span class="light">{<a href="../symbols/bigshot.VRPanorama.RenderState.html">bigshot.VRPanorama.RenderState</a>}</span>
+ <span class="light">bigshot.VRPanorama.</span><b>ONRENDER_BEGIN</b>
+
+ </div>
+ <div class="description">
+ A RenderListener state parameter value used at the start of each render.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".ONRENDER_END"> </a>
+ <div class="fixedFont">&lt;static&gt; &lt;constant&gt;
+
+ <span class="light">{<a href="../symbols/bigshot.VRPanorama.RenderState.html">bigshot.VRPanorama.RenderState</a>}</span>
+ <span class="light">bigshot.VRPanorama.</span><b>ONRENDER_END</b>
+
+ </div>
+ <div class="description">
+ A RenderListener state parameter value used at the end of each render.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".ONRENDER_TEXTURE_UPDATE"> </a>
+ <div class="fixedFont">&lt;static&gt; &lt;constant&gt;
+
+
+ <span class="light">bigshot.VRPanorama.</span><b>ONRENDER_TEXTURE_UPDATE</b>
+
+ </div>
+ <div class="description">
+ A RenderListener cause parameter indicating that a previously requested texture has loaded and a render is forced. The data parameter is not used.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="addHotspot"> </a>
+ <div class="fixedFont">
+
+
+ <b>addHotspot</b>(hs)
+
+ </div>
+ <div class="description">
+ Adds a hotstpot.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRHotspot.html">bigshot.VRHotspot</a>}</span> <b>hs</b>
+
+ </dt>
+ <dd>the hotspot to add</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="addRenderable"> </a>
+ <div class="fixedFont">
+
+
+ <b>addRenderable</b>(renderable)
+
+ </div>
+ <div class="description">
+ Add a function that will be called to render any additional quads.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.html#.Renderable">bigshot.VRPanorama.Renderable</a>}</span> <b>renderable</b>
+
+ </dt>
+ <dd>The renderable, a function responsible for rendering additional scene elements.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="addRenderListener"> </a>
+ <div class="fixedFont">
+
+
+ <b>addRenderListener</b>(listener)
+
+ </div>
+ <div class="description">
+ Add a function that will be called at various times during the render.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.html#.RenderListener">bigshot.VRPanorama.RenderListener</a>}</span> <b>listener</b>
+
+ </dt>
+ <dd>the listener function</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="autoResizeContainer"> </a>
+ <div class="fixedFont">
+
+
+ <b>autoResizeContainer</b>(sizeContainer)
+
+ </div>
+ <div class="description">
+ Automatically resizes the canvas element to the size of the given element on resize.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>sizeContainer</b>
+
+ </dt>
+ <dd>the element to use. Set to <code>null</code> to disable.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="autoRotate"> </a>
+ <div class="fixedFont">
+
+
+ <b>autoRotate</b>()
+
+ </div>
+ <div class="description">
+ Starts auto-rotation of the camera. If the yaw is constrained, will pan back and forth between the yaw endpoints. Call #smoothRotate() to stop the rotation.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="autoRotateWhenIdle"> </a>
+ <div class="fixedFont">
+
+
+ <b>autoRotateWhenIdle</b>(delay)
+
+ </div>
+ <div class="description">
+ Sets the panorama to auto-rotate after a certain time has elapsed with no user interaction. Default is disabled.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>delay</b>
+
+ </dt>
+ <dd>the delay in seconds. Set to < 0 to disable auto-rotation when idle</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="createVREventData"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.VREvent.html">bigshot.VREvent</a>}</span>
+ <b>createVREventData</b>(data)
+
+ </div>
+ <div class="description">
+ Creates and initializes a <a href="../symbols/bigshot.VREvent.html">bigshot.VREvent</a> object. The <a href="../symbols/bigshot.VREvent.html#ray">bigshot.VREvent#ray</a>, <a href="../symbols/bigshot.VREvent.html#yaw">bigshot.VREvent#yaw</a>, <a href="../symbols/bigshot.VREvent.html#pitch">bigshot.VREvent#pitch</a>, <a href="../symbols/bigshot.Event.html#target">bigshot.Event#target</a> and <a href="../symbols/bigshot.Event.html#currentTarget">bigshot.Event#currentTarget</a> fields are set.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>data</b>
+
+ </dt>
+ <dd>the data object for the event</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>data.clientX</b>
+
+ </dt>
+ <dd>the client x-coordinate of the event</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>data.clientY</b>
+
+ </dt>
+ <dd>the client y-coordinate of the event</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the new event object</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="dispose"> </a>
+ <div class="fixedFont">
+
+
+ <b>dispose</b>()
+
+ </div>
+ <div class="description">
+ Unregisters event handlers and other page-level hooks. The client need not call this method unless bigshot images are created and removed from the page dynamically. In that case, this method must be called when the client wishes to free the resources allocated by the image. Otherwise the browser will garbage-collect all resources automatically.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="fullScreen"> </a>
+ <div class="fixedFont">
+
+
+ <b>fullScreen</b>(onClose)
+
+ </div>
+ <div class="description">
+ Maximizes the image to cover the browser viewport. The container div is removed from its parent node upon entering full screen mode. When leaving full screen mode, the container is appended to its old parent node. To avoid rearranging the nodes, wrap the container in an extra div. <p>For unknown reasons (probably security), browsers will not let you open a window that covers the entire screen. Even when specifying "fullscreen=yes", all you get is a window that has a title bar and only covers the desktop (not any task bars or the like). For now, this is the best that I can do, but should the situation change I'll update this to be full-screen<i>-ier</i>.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>onClose</b>
+ <i>Optional</i>
+ </dt>
+ <dd>function that is called when the user exits full-screen mode</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getFov"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getFov</b>()
+
+ </div>
+ <div class="description">
+ Gets the field of view.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd><span class="light fixedFont">{number}</span> the vertical field of view, in degrees</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="getMaxTextureMagnification"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getMaxTextureMagnification</b>()
+
+ </div>
+ <div class="description">
+ Gets the current maximum texture magnification.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRPanoramaParameters.html#maxTextureMagnification">bigshot.VRPanoramaParameters#maxTextureMagnification</a></dd>
+
+ </dl>
+
+
+ <hr />
+
+ <a name="getMinFovFromViewportAndImage"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getMinFovFromViewportAndImage</b>()
+
+ </div>
+ <div class="description">
+ Computes the minimum field of view where the resulting image will not have to stretch the textures more than given by the <a href="../symbols/bigshot.VRPanoramaParameters.html#maxTextureMagnification">bigshot.VRPanoramaParameters#maxTextureMagnification</a> parameter.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the minimum FOV, below which it is necessary to stretch the vr cube texture more than the given <a href="../symbols/bigshot.VRPanoramaParameters.html#maxTextureMagnification">bigshot.VRPanoramaParameters#maxTextureMagnification</a></dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="getParameters"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a>}</span>
+ <b>getParameters</b>()
+
+ </div>
+ <div class="description">
+ Returns the <a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a> object used by this instance.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getPitch"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getPitch</b>()
+
+ </div>
+ <div class="description">
+ Gets the current camera pitch.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd><span class="light fixedFont">{number}</span> the pitch, in degrees</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="getTranslation"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number, number, number}</span>
+ <b>getTranslation</b>()
+
+ </div>
+ <div class="description">
+ Returns the current view translation as an x-y-z triplet.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd><span class="light fixedFont">{number}</span> x translation of the viewer along the X axis</dd>
+
+ <dd><span class="light fixedFont">{number}</span> y translation of the viewer along the Y axis</dd>
+
+ <dd><span class="light fixedFont">{number}</span> z translation of the viewer along the Z axis</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="getYaw"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>getYaw</b>()
+
+ </div>
+ <div class="description">
+ Gets the current camera yaw.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd><span class="light fixedFont">{number}</span> the yaw, in degrees</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="removeRenderable"> </a>
+ <div class="fixedFont">
+
+
+ <b>removeRenderable</b>(renderable)
+
+ </div>
+ <div class="description">
+ Removes a function that will be called to render any additional quads.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.html#.Renderable">bigshot.VRPanorama.Renderable</a>}</span> <b>renderable</b>
+
+ </dt>
+ <dd>The renderable added using <a href="../symbols/bigshot.VRPanorama.html#addRenderable">bigshot.VRPanorama#addRenderable</a>.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="removeRenderListener"> </a>
+ <div class="fixedFont">
+
+
+ <b>removeRenderListener</b>(listener)
+
+ </div>
+ <div class="description">
+ Removes a function that will be called at various times during the render.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.html#.RenderListener">bigshot.VRPanorama.RenderListener</a>}</span> <b>listener</b>
+
+ </dt>
+ <dd>the listener function</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="render"> </a>
+ <div class="fixedFont">
+
+
+ <b>render</b>(cause, data)
+
+ </div>
+ <div class="description">
+ Renders the VR cube.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>cause</b>
+ <i>Optional</i>
+ </dt>
+ <dd>parameter for the <a href="../symbols/bigshot.VRPanorama.html#.RenderListener">bigshot.VRPanorama.RenderListener</a>s.</dd>
+
+ <dt>
+ <b>data</b>
+ <i>Optional</i>
+ </dt>
+ <dd>parameter for the <a href="../symbols/bigshot.VRPanorama.html#.RenderListener">bigshot.VRPanorama.RenderListener</a>s.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".Renderable"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.VRPanorama.</span><b>Renderable</b>(renderer, scene)
+
+ </div>
+ <div class="description">
+ Specification for functions passed to <a href="../symbols/bigshot.VRPanorama.html#addRenderable">bigshot.VRPanorama#addRenderable</a>.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRRenderer.html">bigshot.VRRenderer</a>}</span> <b>renderer</b>
+
+ </dt>
+ <dd>The renderer object to use.</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.TexturedQuadScene.html">bigshot.TexturedQuadScene</a>}</span> <b>scene</b>
+
+ </dt>
+ <dd>The scene to render into.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="renderAsap"> </a>
+ <div class="fixedFont">
+
+
+ <b>renderAsap</b>()
+
+ </div>
+ <div class="description">
+ Posts a render() call via a timeout or the requestAnimationFrame API. Use when the render call must be done as soon as possible, but can't be done in the current call context.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name=".RenderListener"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.VRPanorama.</span><b>RenderListener</b>(state, cause, data)
+
+ </div>
+ <div class="description">
+ Specification for functions passed to <a href="../symbols/bigshot.VRPanorama.html#addRenderListener">bigshot.VRPanorama#addRenderListener</a>.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.RenderState.html">bigshot.VRPanorama.RenderState</a>}</span> <b>state</b>
+
+ </dt>
+ <dd>The state of the renderer. Can be <a href="../symbols/bigshot.VRPanorama.html#.ONRENDER_BEGIN">bigshot.VRPanorama.ONRENDER_BEGIN</a> or <a href="../symbols/bigshot.VRPanorama.html#.ONRENDER_END">bigshot.VRPanorama.ONRENDER_END</a></dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.RenderCause.html">bigshot.VRPanorama.RenderCause</a>}</span> <b>cause</b>
+ <i>Optional</i>
+ </dt>
+ <dd>The reason for rendering the scene. Can be undefined or <a href="../symbols/bigshot.VRPanorama.html#.ONRENDER_TEXTURE_UPDATE">bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE</a></dd>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>data</b>
+ <i>Optional</i>
+ </dt>
+ <dd>An optional data object that is dependent on the cause. See the documentation for the different causes.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="renderUpdated"> </a>
+ <div class="fixedFont">
+
+
+ <b>renderUpdated</b>(cause, data)
+
+ </div>
+ <div class="description">
+ Render updated faces. Called as tiles are loaded from the server.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>cause</b>
+ <i>Optional</i>
+ </dt>
+ <dd>parameter for the <a href="../symbols/bigshot.VRPanorama.html#.RenderListener">bigshot.VRPanorama.RenderListener</a>s.</dd>
+
+ <dt>
+ <b>data</b>
+ <i>Optional</i>
+ </dt>
+ <dd>parameter for the <a href="../symbols/bigshot.VRPanorama.html#.RenderListener">bigshot.VRPanorama.RenderListener</a>s.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="screenToPolar"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number, number}</span>
+ <b>screenToPolar</b>(x, y)
+
+ </div>
+ <div class="description">
+ Returns the angle (yaw, pitch) for a given pixel coordinate.
+
+
+ </div>
+
+
+
+ <pre class="code">var container = ...; // an HTML element var pano = ...; // a bigshot.VRPanorama ... container.addEventListener ("click", function (e) { var clickX = e.clientX - container.offsetX; var clickY = e.clientY - container.offsetY; var polar = pano.screenToPolar (clickX, clickY); alert ("You clicked at: " + "Yaw: " + polar.yaw + " Pitch: " + polar.pitch); });</pre>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>x</b>
+
+ </dt>
+ <dd>the x-coordinate of the pixel, measured in pixels from the left edge of the panorama.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>y</b>
+
+ </dt>
+ <dd>the y-coordinate of the pixel, measured in pixels from the top edge of the panorama.</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd><span class="light fixedFont">{number}</span> .yaw the yaw angle of the pixel (0 &lt;= yaw &lt; 360)</dd>
+
+ <dd><span class="light fixedFont">{number}</span> .pitch the pitch angle of the pixel (-180 &lt;= pitch &lt;= 180)</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="setDragMode"> </a>
+ <div class="fixedFont">
+
+
+ <b>setDragMode</b>(mode)
+
+ </div>
+ <div class="description">
+ Sets the mouse dragging mode.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>mode</b>
+
+ </dt>
+ <dd>one of <a href="../symbols/bigshot.VRPanorama.html#.DRAG_PAN">bigshot.VRPanorama.DRAG_PAN</a> or <a href="../symbols/bigshot.VRPanorama.html#.DRAG_GRAB">bigshot.VRPanorama.DRAG_GRAB</a>.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setFov"> </a>
+ <div class="fixedFont">
+
+
+ <b>setFov</b>(fov)
+
+ </div>
+ <div class="description">
+ Sets the field of view.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>fov</b>
+
+ </dt>
+ <dd>the vertical field of view, in degrees</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setMaxTextureMagnification"> </a>
+ <div class="fixedFont">
+
+
+ <b>setMaxTextureMagnification</b>(v)
+
+ </div>
+ <div class="description">
+ Sets the maximum texture magnification.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>v</b>
+
+ </dt>
+ <dd>the maximum texture magnification</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRPanoramaParameters.html#maxTextureMagnification">bigshot.VRPanoramaParameters#maxTextureMagnification</a></dd>
+
+ </dl>
+
+
+ <hr />
+
+ <a name="setPitch"> </a>
+ <div class="fixedFont">
+
+
+ <b>setPitch</b>(p)
+
+ </div>
+ <div class="description">
+ Sets the current camera pitch.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>p</b>
+
+ </dt>
+ <dd>the pitch, in degrees</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setTranslation"> </a>
+ <div class="fixedFont">
+
+
+ <b>setTranslation</b>(x, y, z)
+
+ </div>
+ <div class="description">
+ Sets the view translation.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>x</b>
+
+ </dt>
+ <dd>translation of the viewer along the X axis</dd>
+
+ <dt>
+ <b>y</b>
+
+ </dt>
+ <dd>translation of the viewer along the Y axis</dd>
+
+ <dt>
+ <b>z</b>
+
+ </dt>
+ <dd>translation of the viewer along the Z axis</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setYaw"> </a>
+ <div class="fixedFont">
+
+
+ <b>setYaw</b>(y)
+
+ </div>
+ <div class="description">
+ Sets the current camera yaw. The yaw is normalized between 0 <= y < 360.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>y</b>
+
+ </dt>
+ <dd>the yaw, in degrees</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="smoothRotate"> </a>
+ <div class="fixedFont">
+
+
+ <b>smoothRotate</b>(dy, dp, df)
+
+ </div>
+ <div class="description">
+ Smoothly rotates the camera. If all of the dp, dy and df functions are null, stops any smooth rotation.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>dy</b>
+ <i>Optional</i>
+ </dt>
+ <dd>function giving the yaw increment for the next frame or null if no further yaw movement is required</dd>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>dp</b>
+ <i>Optional</i>
+ </dt>
+ <dd>function giving the pitch increment for the next frame or null if no further pitch movement is required</dd>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>df</b>
+ <i>Optional</i>
+ </dt>
+ <dd>function giving the field of view (degrees) increment for the next frame or null if no further fov adjustment is required</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="smoothRotateTo"> </a>
+ <div class="fixedFont">
+
+
+ <b>smoothRotateTo</b>(yaw, pitch, fov, the)
+
+ </div>
+ <div class="description">
+ Smoothly rotates the panorama to the given state.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>yaw</b>
+
+ </dt>
+ <dd>the target yaw</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>pitch</b>
+
+ </dt>
+ <dd>the target pitch</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>fov</b>
+
+ </dt>
+ <dd>the target vertical field of view</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>the</b>
+
+ </dt>
+ <dd>speed to rotate with</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="smoothRotateToXY"> </a>
+ <div class="fixedFont">
+
+
+ <b>smoothRotateToXY</b>(x, y)
+
+ </div>
+ <div class="description">
+ Smoothly rotates the panorama so that the point given by x and y, in pixels relative to the top left corner of the panorama, ends up in the center of the viewport.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>x</b>
+
+ </dt>
+ <dd>the x-coordinate, in pixels from the left edge</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>y</b>
+
+ </dt>
+ <dd>the y-coordinate, in pixels from the top edge</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="snapPitch"> </a>
+ <div class="fixedFont">
+
+
+ <b>snapPitch</b>(p)
+
+ </div>
+ <div class="description">
+ Restricts the pitch value to be between the minPitch and maxPitch parameters.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>p</b>
+
+ </dt>
+ <dd>the pitch value</dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>the constrained pitch value.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+ <div class="sectionTitle">
+ Event Detail
+ </div>
+
+ <a name="event:dblclick"> </a>
+ <div class="fixedFont">
+
+
+ <b>dblclick</b>(event)
+
+ </div>
+ <div class="description">
+ Fired when the user double-clicks on the panorama.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VREvent.html">bigshot.VREvent</a>}</span> <b>event</b>
+
+ </dt>
+ <dd>the event object</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanoramaParameters.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanoramaParameters.html
new file mode 100644
index 00000000..bbf56501
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPanoramaParameters.html
@@ -0,0 +1,1592 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRPanoramaParameters - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRPanoramaParameters
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ VRPanoramaParameters parameter object. You need not set any fields that can be read from the image descriptor that MakeImagePyramid creates. See the <a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a> documentation for required parameters. <p>Usage:
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRPanoramaParameters.js.html">VRPanoramaParameters.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRPanoramaParameters.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#constructor">bigshot.VRPanoramaParameters</a></b>(values)
+ </div>
+ <div class="description">Creates a new VR panorama parameter object and populates it with default values for all values not explicitly given.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.VRPanoramaParameters.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#basePath">basePath</a></b>
+ </div>
+ <div class="description">Base path for the image.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#container">container</a></b>
+ </div>
+ <div class="description">For <a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>, the {@code div} to render into.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#dataLoader">dataLoader</a></b>
+ </div>
+ <div class="description">Object used to load data files.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#emptyImage">emptyImage</a></b>
+ </div>
+ <div class="description">Url for the image tile to show while the tile is loading and no low-resolution preview is available.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#fileSystem">fileSystem</a></b>
+ </div>
+ <div class="description">A reference to a filesystem implementation.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#fileSystemType">fileSystemType</a></b>
+ </div>
+ <div class="description">The file system type.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#fling">fling</a></b>
+ </div>
+ <div class="description">Controls whether the panorama can be "flung" by quickly dragging and releasing.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#flingScale">flingScale</a></b>
+ </div>
+ <div class="description">Controls the decay of the "flinging" animation.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#height">height</a></b>
+ </div>
+ <div class="description">The height of the full image; in pixels.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#maxFov">maxFov</a></b>
+ </div>
+ <div class="description">Maximum vertical field of view in degrees.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#maxPitch">maxPitch</a></b>
+ </div>
+ <div class="description">Maximum pitch in degrees.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#maxTesselation">maxTesselation</a></b>
+ </div>
+ <div class="description">The maximum number of times to split a cube face into four quads.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#maxTextureMagnification">maxTextureMagnification</a></b>
+ </div>
+ <div class="description">The maximum magnification for the texture tiles making up the VR cube.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#maxYaw">maxYaw</a></b>
+ </div>
+ <div class="description">Maximum yaw in degrees.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#minFov">minFov</a></b>
+ </div>
+ <div class="description">Minimum vertical field of view in degrees.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#minPitch">minPitch</a></b>
+ </div>
+ <div class="description">Minimum pitch in degrees.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#minYaw">minYaw</a></b>
+ </div>
+ <div class="description">Minimum yaw in degrees.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#onload">onload</a></b>
+ </div>
+ <div class="description">Function to call when all six cube faces have loaded the base texture level and can be rendered.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#overlap">overlap</a></b>
+ </div>
+ <div class="description">Tile overlap.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#pitchOffset">pitchOffset</a></b>
+ </div>
+ <div class="description">Transform offset for pitch.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#posterSize">posterSize</a></b>
+ </div>
+ <div class="description">Size of low resolution preview image along the longest image dimension.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#renderer">renderer</a></b>
+ </div>
+ <div class="description">The rendering back end to use.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#rollOffset">rollOffset</a></b>
+ </div>
+ <div class="description">Transform offset for roll.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#suffix">suffix</a></b>
+ </div>
+ <div class="description">Suffix to append to the tile filenames.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#textureMagFilter">textureMagFilter</a></b>
+ </div>
+ <div class="description">The WebGL texture filter to use for magnifying textures.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#textureMinFilter">textureMinFilter</a></b>
+ </div>
+ <div class="description">The WebGL texture filter to use for supersampling (minifying) textures.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#tileSize">tileSize</a></b>
+ </div>
+ <div class="description">Size of one tile in pixels.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#width">width</a></b>
+ </div>
+ <div class="description">The width of the full image; in pixels.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPanoramaParameters.html#yawOffset">yawOffset</a></b>
+ </div>
+ <div class="description">Transform offset for yaw.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRPanoramaParameters</b>(values)
+ </div>
+
+ <div class="description">
+ Creates a new VR panorama parameter object and populates it with default values for all values not explicitly given.
+
+ </div>
+
+
+
+ <pre class="code">var bvr = new bigshot.VRPanorama ( new bigshot.VRPanoramaParameters ({ basePath : "/bigshot.php?file=myvr.bigshot", fileSystemType : "archive", container : document.getElementById ("bigshot_canvas") }));</pre>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>values</b>
+
+ </dt>
+ <dd>named parameter map, see the fields below for parameter names and types.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="basePath"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>basePath</b>
+
+ </div>
+ <div class="description">
+ Base path for the image. This is filesystem dependent; but for the two most common cases the following should be set <ul> <li><b>archive</b>= The basePath is <code>"&lt;path&gt;/bigshot.php?file=&lt;path-to-bigshot-archive-relative-to-bigshot.php&gt;"</code>; for example; <code>"/bigshot.php?file=images/bigshot-sample.bigshot"</code>. <li><b>folder</b>= The basePath is <code>"&lt;path-to-image-folder&gt;"</code>; for example; <code>"/images/bigshot-sample"</code>. </ul>
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="container"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{HTMLDivElement}</span>
+ <b>container</b>
+
+ </div>
+ <div class="description">
+ For <a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>, the {@code div} to render into.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="dataLoader"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.DataLoader.html">bigshot.DataLoader</a>}</span>
+ <b>dataLoader</b>
+
+ </div>
+ <div class="description">
+ Object used to load data files.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ bigshot.DefaultDataLoader
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="emptyImage"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>emptyImage</b>
+
+ </div>
+ <div class="description">
+ Url for the image tile to show while the tile is loading and no low-resolution preview is available.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <code>null</code>, which results in an all-black image
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="fileSystem"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a>}</span>
+ <b>fileSystem</b>
+
+ </div>
+ <div class="description">
+ A reference to a filesystem implementation. If set; it overrides the fileSystemType field.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ set depending on value of bigshot.VRPanoramaParameters#fileSystemType
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="fileSystemType"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>fileSystemType</b>
+
+ </div>
+ <div class="description">
+ The file system type. Used to create a filesystem instance unless the fileSystem field is set. Possible values are <code>"archive"</code>, <code>"folder"</code> or <code>"dzi"</code>.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ "folder"
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="fling"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{boolean}</span>
+ <b>fling</b>
+
+ </div>
+ <div class="description">
+ Controls whether the panorama can be "flung" by quickly dragging and releasing.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ true
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="flingScale"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{float}</span>
+ <b>flingScale</b>
+
+ </div>
+ <div class="description">
+ Controls the decay of the "flinging" animation. The fling animation decays as 2^(-flingScale * t) where t is the time in milliseconds since the animation started. For the animation to decay to half-speed in X seconds, flingScale should then be set to 1 / (X*1000).
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 0.004
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="height"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>height</b>
+
+ </div>
+ <div class="description">
+ The height of the full image; in pixels.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="maxFov"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>maxFov</b>
+
+ </div>
+ <div class="description">
+ Maximum vertical field of view in degrees.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 90.0
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="maxPitch"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>maxPitch</b>
+
+ </div>
+ <div class="description">
+ Maximum pitch in degrees.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 90.0
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="maxTesselation"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>maxTesselation</b>
+
+ </div>
+ <div class="description">
+ The maximum number of times to split a cube face into four quads.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="maxTextureMagnification"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>maxTextureMagnification</b>
+
+ </div>
+ <div class="description">
+ The maximum magnification for the texture tiles making up the VR cube. Used for level-of-detail tesselation. A value of 1.0 means that textures will never be stretched (one texture pixel will always be at most one screen pixel), unless there is no more detailed texture available. A value of 2.0 means that textures may be stretched at most 2x (one texture pixel will always be at most 2x2 screen pixels) The bigger the value, the less texture data is required, but quality suffers.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 1.0
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="maxYaw"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>maxYaw</b>
+
+ </div>
+ <div class="description">
+ Maximum yaw in degrees. The number is interpreted modulo 360. The default value, 720, is just to make sure that we won't accidentally trip it. If the number is set to something in the interval 0-360, the autoRotate function will pan back and forth.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 720.0
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="minFov"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>minFov</b>
+
+ </div>
+ <div class="description">
+ Minimum vertical field of view in degrees.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 2.0
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="minPitch"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>minPitch</b>
+
+ </div>
+ <div class="description">
+ Minimum pitch in degrees.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ -90
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="minYaw"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>minYaw</b>
+
+ </div>
+ <div class="description">
+ Minimum yaw in degrees. The number is interpreted modulo 360. The default value, -360, is just to make sure that we won't accidentally trip it. If the number is set to something in the interval 0-360, the autoRotate function will pan back and forth.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ -360
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="onload"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{function()}</span>
+ <b>onload</b>
+
+ </div>
+ <div class="description">
+ Function to call when all six cube faces have loaded the base texture level and can be rendered.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ null
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="overlap"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>overlap</b>
+
+ </div>
+ <div class="description">
+ Tile overlap. Not implemented.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="pitchOffset"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>pitchOffset</b>
+
+ </div>
+ <div class="description">
+ Transform offset for pitch.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 0.0
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="posterSize"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>posterSize</b>
+
+ </div>
+ <div class="description">
+ Size of low resolution preview image along the longest image dimension. The preview is assumed to have the same aspect ratio as the full image (specified by width and height).
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="renderer"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>renderer</b>
+
+ </div>
+ <div class="description">
+ The rendering back end to use. Values are "css" and "webgl".
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ null
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="rollOffset"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>rollOffset</b>
+
+ </div>
+ <div class="description">
+ Transform offset for roll.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 0.0
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="suffix"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{String}</span>
+ <b>suffix</b>
+
+ </div>
+ <div class="description">
+ Suffix to append to the tile filenames. Typically <code>".jpg"</code> or <code>".png"</code>.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="textureMagFilter"> </a>
+ <div class="fixedFont">
+
+
+ <b>textureMagFilter</b>
+
+ </div>
+ <div class="description">
+ The WebGL texture filter to use for magnifying textures. Possible values are all values valid for <code>TEXTURE_MAG_FILTER</code>. <code>null</code> means <code>NEAREST</code>.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ null / NEAREST.
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="textureMinFilter"> </a>
+ <div class="fixedFont">
+
+
+ <b>textureMinFilter</b>
+
+ </div>
+ <div class="description">
+ The WebGL texture filter to use for supersampling (minifying) textures. Possible values are all values valid for <code>TEXTURE_MIN_FILTER</code>. <code>null</code> means <code>NEAREST</code>.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ null / NEAREST.
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="tileSize"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>tileSize</b>
+
+ </div>
+ <div class="description">
+ Size of one tile in pixels.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="width"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>width</b>
+
+ </div>
+ <div class="description">
+ The width of the full image; in pixels.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ <i>Optional</i> set by MakeImagePyramid and loaded from descriptor
+ </dd>
+ </dl>
+
+
+ <hr />
+
+ <a name="yawOffset"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{number}</span>
+ <b>yawOffset</b>
+
+ </div>
+ <div class="description">
+ Transform offset for yaw.
+
+
+ </div>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Default Value:</dt>
+ <dd>
+ 0.0
+ </dd>
+ </dl>
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRPointHotspot.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPointHotspot.html
new file mode 100644
index 00000000..408deb0c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRPointHotspot.html
@@ -0,0 +1,491 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRPointHotspot - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRPointHotspot
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.VRHotspot.html">bigshot.VRHotspot</a>.</p>
+
+ <p class="description">
+ A VR panorama point-hotspot. A Hotspot is simply an HTML element that is moved / hidden etc. to overlay a given position in the panorama. The element is moved by setting its <code>style.top</code> and <code>style.left</code> values.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRPointHotspot.js.html">VRPointHotspot.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRPointHotspot.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRPointHotspot.html#constructor">bigshot.VRPointHotspot</a></b>(panorama, yaw, pitch, element, offsetX, offsetY)
+ </div>
+ <div class="description">Creates a new point-hotspot and attaches it to a VR panorama.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Fields borrowed from class <a href="../symbols/bigshot.VRHotspot.html">bigshot.VRHotspot</a>: </dt><dd><a href="../symbols/bigshot.VRHotspot.html#clippingStrategy">clippingStrategy</a></dd>
+ </dl>
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.VRHotspot.html">bigshot.VRHotspot</a>: </dt><dd><a href="../symbols/bigshot.VRHotspot.html#clip">clip</a>, <a href="../symbols/bigshot.VRHotspot.html#layout">layout</a>, <a href="../symbols/bigshot.VRHotspot.html#toScreen">toScreen</a>, <a href="../symbols/bigshot.VRHotspot.html#toVector">toVector</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRPointHotspot</b>(panorama, yaw, pitch, element, offsetX, offsetY)
+ </div>
+
+ <div class="description">
+ Creates a new point-hotspot and attaches it to a VR panorama.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>}</span> <b>panorama</b>
+
+ </dt>
+ <dd>the panorama to attach this hotspot to</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>yaw</b>
+
+ </dt>
+ <dd>the yaw coordinate of the hotspot</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>pitch</b>
+
+ </dt>
+ <dd>the pitch coordinate of the hotspot</dd>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>element</b>
+
+ </dt>
+ <dd>the HTML element</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>offsetX</b>
+
+ </dt>
+ <dd>the offset to add to the screen coordinate corresponding to the hotspot's polar coordinates. Use this to center the hotspot horizontally.</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>offsetY</b>
+
+ </dt>
+ <dd>the offset to add to the screen coordinate corresponding to the hotspot's polar coordinates. Use this to center the hotspot vertically.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRRectangleHotspot.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRRectangleHotspot.html
new file mode 100644
index 00000000..ca60fe48
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRRectangleHotspot.html
@@ -0,0 +1,491 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRRectangleHotspot - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRRectangleHotspot
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+ <p class="extendsList">Extends
+ <a href="../symbols/bigshot.VRHotspot.html">bigshot.VRHotspot</a>.</p>
+
+ <p class="description">
+ A rectangular VR panorama hotspot. A rectangular hotspot is simply an HTML element that is moved / resized / hidden etc. to overlay a given rectangle in the panorama. The element is moved by setting its <code>style.top</code> and <code>style.left</code> values, and resized by setting its <code>style.width</code> and <code>style.height</code> values.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRRectangleHotspot.js.html">VRRectangleHotspot.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRRectangleHotspot.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRRectangleHotspot.html#constructor">bigshot.VRRectangleHotspot</a></b>(panorama, yaw0, pitch0, yaw1, pitch1, element)
+ </div>
+ <div class="description">Creates a new rectangular hotspot and attaches it to a VR panorama.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Fields borrowed from class <a href="../symbols/bigshot.VRHotspot.html">bigshot.VRHotspot</a>: </dt><dd><a href="../symbols/bigshot.VRHotspot.html#clippingStrategy">clippingStrategy</a></dd>
+ </dl>
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+
+
+ <dl class="inheritsList">
+ <dt>Methods borrowed from class <a href="../symbols/bigshot.VRHotspot.html">bigshot.VRHotspot</a>: </dt><dd><a href="../symbols/bigshot.VRHotspot.html#clip">clip</a>, <a href="../symbols/bigshot.VRHotspot.html#layout">layout</a>, <a href="../symbols/bigshot.VRHotspot.html#toScreen">toScreen</a>, <a href="../symbols/bigshot.VRHotspot.html#toVector">toVector</a></dd>
+ </dl>
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRRectangleHotspot</b>(panorama, yaw0, pitch0, yaw1, pitch1, element)
+ </div>
+
+ <div class="description">
+ Creates a new rectangular hotspot and attaches it to a VR panorama.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>}</span> <b>panorama</b>
+
+ </dt>
+ <dd>the panorama to attach this hotspot to</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>yaw0</b>
+
+ </dt>
+ <dd>the yaw coordinate of the top-left corner of the hotspot</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>pitch0</b>
+
+ </dt>
+ <dd>the pitch coordinate of the top-left corner of the hotspot</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>yaw1</b>
+
+ </dt>
+ <dd>the yaw coordinate of the bottom-right corner of the hotspot</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>pitch1</b>
+
+ </dt>
+ <dd>the pitch coordinate of the bottom-right corner of the hotspot</dd>
+
+ <dt>
+ <span class="light fixedFont">{HTMLElement}</span> <b>element</b>
+
+ </dt>
+ <dd>the HTML element</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRRenderer.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRRenderer.html
new file mode 100644
index 00000000..4283b94e
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRRenderer.html
@@ -0,0 +1,1060 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRRenderer - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRRenderer
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Abstract base for 3d rendering system.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRRenderer.js.html">VRRenderer.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRRenderer.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRRenderer.html#constructor">bigshot.VRRenderer</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.VRRenderer.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#beginRender">beginRender</a></b>(rotation, fov, translation, rotationOffsets)
+ </div>
+ <div class="description">Called to begin a render.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#createTexturedQuad">createTexturedQuad</a></b>(p, u, v, texture)
+ </div>
+ <div class="description">Creates a bigshot.TexturedQuad.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#createTexturedQuadScene">createTexturedQuadScene</a></b>()
+ </div>
+ <div class="description">Creates a bigshot.TexturedQuadScene.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#createTileCache">createTileCache</a></b>(onloaded, onCacheInit, parameters)
+ </div>
+ <div class="description">Creates a new <a href="../symbols/bigshot.VRTileCache.html">bigshot.VRTileCache</a>, appropriate for the rendering system.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#dispose">dispose</a></b>()
+ </div>
+ <div class="description">Disposes the renderer and associated resources.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#endRender">endRender</a></b>()
+ </div>
+ <div class="description">Called to end a render.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#getElement">getElement</a></b>()
+ </div>
+ <div class="description">Gets the container element for the renderer.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#getViewportHeight">getViewportHeight</a></b>()
+ </div>
+ <div class="description">Returns the viewport height, in pixels.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#getViewportWidth">getViewportWidth</a></b>()
+ </div>
+ <div class="description">Returns the viewport width, in pixels.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#onresize">onresize</a></b>()
+ </div>
+ <div class="description">Called by client code to notify the renderer that the viewport has been resized.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#resize">resize</a></b>(w, h)
+ </div>
+ <div class="description">Resizes the viewport.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#transformToScreen">transformToScreen</a></b>(vector)
+ </div>
+ <div class="description">Transforms a 3D vector to screen coordinates.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#transformToWorld">transformToWorld</a></b>(v)
+ </div>
+ <div class="description">Transforms a vector to world coordinates.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRRenderer.html#transformWorldToScreen">transformWorldToScreen</a></b>(worldVector)
+ </div>
+ <div class="description">Transforms a world vector to screen coordinates.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRRenderer</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="beginRender"> </a>
+ <div class="fixedFont">
+
+
+ <b>beginRender</b>(rotation, fov, translation, rotationOffsets)
+
+ </div>
+ <div class="description">
+ Called to begin a render.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Rotation.html">bigshot.Rotation</a>}</span> <b>rotation</b>
+
+ </dt>
+ <dd>the rotation of the viewer</dd>
+
+ <dt>
+ <span class="light fixedFont">{number}</span> <b>fov</b>
+
+ </dt>
+ <dd>the vertical field of view, in degrees</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>translation</b>
+
+ </dt>
+ <dd>the position of the viewer in world space</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Rotation.html">bigshot.Rotation</a>}</span> <b>rotationOffsets</b>
+
+ </dt>
+ <dd>the rotation to apply to the VR cube before the viewer rotation is applied</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="createTexturedQuad"> </a>
+ <div class="fixedFont">
+
+
+ <b>createTexturedQuad</b>(p, u, v, texture)
+
+ </div>
+ <div class="description">
+ Creates a bigshot.TexturedQuad.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>p</b>
+
+ </dt>
+ <dd>the top-left corner of the quad</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>u</b>
+
+ </dt>
+ <dd>a vector going along the top edge of the quad</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>v</b>
+
+ </dt>
+ <dd>a vector going down the left edge of the quad</dd>
+
+ <dt>
+ <span class="light fixedFont">{Object}</span> <b>texture</b>
+
+ </dt>
+ <dd>a texture to use for the quad. The texture type may vary among different VRRenderer implementations. The VRTileCache that is created using the createTileCache method will supply the correct type.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="createTexturedQuadScene"> </a>
+ <div class="fixedFont">
+
+
+ <b>createTexturedQuadScene</b>()
+
+ </div>
+ <div class="description">
+ Creates a bigshot.TexturedQuadScene.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="createTileCache"> </a>
+ <div class="fixedFont">
+
+
+ <b>createTileCache</b>(onloaded, onCacheInit, parameters)
+
+ </div>
+ <div class="description">
+ Creates a new <a href="../symbols/bigshot.VRTileCache.html">bigshot.VRTileCache</a>, appropriate for the rendering system.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>onloaded</b>
+
+ </dt>
+ <dd>function that is called whenever a texture tile has been loaded</dd>
+
+ <dt>
+ <span class="light fixedFont">{function()}</span> <b>onCacheInit</b>
+
+ </dt>
+ <dd>function that is called when the texture cache is fully initialized</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a>}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the parameters for the panorama</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="dispose"> </a>
+ <div class="fixedFont">
+
+
+ <b>dispose</b>()
+
+ </div>
+ <div class="description">
+ Disposes the renderer and associated resources.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="endRender"> </a>
+ <div class="fixedFont">
+
+
+ <b>endRender</b>()
+
+ </div>
+ <div class="description">
+ Called to end a render.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getElement"> </a>
+ <div class="fixedFont">
+
+
+ <b>getElement</b>()
+
+ </div>
+ <div class="description">
+ Gets the container element for the renderer. This is used when calling the requestAnimationFrame API.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getViewportHeight"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>getViewportHeight</b>()
+
+ </div>
+ <div class="description">
+ Returns the viewport height, in pixels.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getViewportWidth"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{int}</span>
+ <b>getViewportWidth</b>()
+
+ </div>
+ <div class="description">
+ Returns the viewport width, in pixels.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="onresize"> </a>
+ <div class="fixedFont">
+
+
+ <b>onresize</b>()
+
+ </div>
+ <div class="description">
+ Called by client code to notify the renderer that the viewport has been resized.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="resize"> </a>
+ <div class="fixedFont">
+
+
+ <b>resize</b>(w, h)
+
+ </div>
+ <div class="description">
+ Resizes the viewport.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>w</b>
+
+ </dt>
+ <dd>the new width of the viewport, in pixels</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>h</b>
+
+ </dt>
+ <dd>the new height of the viewport, in pixels</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="transformToScreen"> </a>
+ <div class="fixedFont">
+
+
+ <b>transformToScreen</b>(vector)
+
+ </div>
+ <div class="description">
+ Transforms a 3D vector to screen coordinates.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>vector</b>
+
+ </dt>
+ <dd>the vector to transform. If it is already in homogenous coordinates (4-element array) the transformation is faster. Otherwise it will be converted.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="transformToWorld"> </a>
+ <div class="fixedFont">
+
+
+ <b>transformToWorld</b>(v)
+
+ </div>
+ <div class="description">
+ Transforms a vector to world coordinates.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>v</b>
+
+ </dt>
+ <dd>the view-space point to transform</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="transformWorldToScreen"> </a>
+ <div class="fixedFont">
+
+
+ <b>transformWorldToScreen</b>(worldVector)
+
+ </div>
+ <div class="description">
+ Transforms a world vector to screen coordinates.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>worldVector</b>
+
+ </dt>
+ <dd>the world-space point to transform</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.VRTileCache.html b/js/vendor/bigshot/doc/js/symbols/bigshot.VRTileCache.html
new file mode 100644
index 00000000..0dd1b320
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.VRTileCache.html
@@ -0,0 +1,578 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.VRTileCache - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.VRTileCache
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Abstract base class.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__VRTileCache.js.html">VRTileCache.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.VRTileCache.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.VRTileCache.html#constructor">bigshot.VRTileCache</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.VRTileCache.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRTileCache.html#dispose">dispose</a></b>()
+ </div>
+ <div class="description">Disposes the cache and all its entries.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRTileCache.html#getTexture">getTexture</a></b>(tileX, tileY, zoomLevel)
+ </div>
+ <div class="description">Returns the texture object for the given tile-x, tile-y and zoom level.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.VRTileCache.html#purge">purge</a></b>()
+ </div>
+ <div class="description">Purges the cache of old entries.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.VRTileCache</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="dispose"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{void}</span>
+ <b>dispose</b>()
+
+ </div>
+ <div class="description">
+ Disposes the cache and all its entries.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="getTexture"> </a>
+ <div class="fixedFont">
+
+
+ <b>getTexture</b>(tileX, tileY, zoomLevel)
+
+ </div>
+ <div class="description">
+ Returns the texture object for the given tile-x, tile-y and zoom level. The return type is dependent on the renderer. The WebGL renderer, for example uses a tile cache that returns WebGL textures, while the CSS3D renderer returns HTML img or canvas elements.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>tileX</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>tileY</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>zoomLevel</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="purge"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{void}</span>
+ <b>purge</b>()
+
+ </div>
+ <div class="description">
+ Purges the cache of old entries.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.WebGL.html b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGL.html
new file mode 100644
index 00000000..37e1ae91
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGL.html
@@ -0,0 +1,1089 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.WebGL - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.WebGL
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ WebGL wrapper for common <a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a> uses.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__WebGL.js.html">WebGL.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.WebGL.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGL.html#constructor">bigshot.WebGL</a></b>(canvas_)
+ </div>
+ <div class="description">Creates a new WebGL wrapper instance.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.WebGL.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGL.html#canvas">canvas</a></b>
+ </div>
+ <div class="description">The html canvas element we'll be rendering in.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGL.html#fragmentShader">fragmentShader</a></b>
+ </div>
+ <div class="description">Fragment shader.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGL.html#gl">gl</a></b>
+ </div>
+ <div class="description">Our WebGL context.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGL.html#mvMatrix">mvMatrix</a></b>
+ </div>
+ <div class="description">The current object-to-world transform matrix.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGL.html#pMatrix">pMatrix</a></b>
+ </div>
+ <div class="description">The current perspective transform matrix.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGL.html#shaderProgram">shaderProgram</a></b>
+ </div>
+ <div class="description">The current shader program.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGL.html#vertexShader">vertexShader</a></b>
+ </div>
+ <div class="description">Vertex shader.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.WebGL.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGL.html#createFragmentShader">createFragmentShader</a></b>(source)
+ </div>
+ <div class="description">Creates a new fragment shader.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGL.html#createImageTextureFromImage">createImageTextureFromImage</a></b>(image, minFilter, magFilter)
+ </div>
+ <div class="description">Creates a texture from an image.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGL.html#createImageTextureFromSource">createImageTextureFromSource</a></b>(source, minFilter, magFilter)
+ </div>
+ <div class="description">Creates a texture from a source url.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGL.html#createShader">createShader</a></b>(source, type)
+ </div>
+ <div class="description">Creates a new shader.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGL.html#createVertexShader">createVertexShader</a></b>(source)
+ </div>
+ <div class="description">Creates a new vertex shader.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGL.html#initShaders">initShaders</a></b>()
+ </div>
+ <div class="description">Initializes the shaders.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGL.html#onresize">onresize</a></b>()
+ </div>
+ <div class="description">Must be called when the canvas element is resized.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGL.html#setMatrixUniforms">setMatrixUniforms</a></b>()
+ </div>
+ <div class="description">Sets the matrix parameters ("uniforms", since the variables are declared as uniform) in the shaders.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.WebGL</b>(canvas_)
+ </div>
+
+ <div class="description">
+ Creates a new WebGL wrapper instance.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLCanvasElement}</span> <b>canvas_</b>
+
+ </dt>
+ <dd>the canvas</dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd>#onresize()</dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name="canvas"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{HTMLCanvasElement}</span>
+ <b>canvas</b>
+
+ </div>
+ <div class="description">
+ The html canvas element we'll be rendering in.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="fragmentShader"> </a>
+ <div class="fixedFont">
+
+
+ <b>fragmentShader</b>
+
+ </div>
+ <div class="description">
+ Fragment shader. Taken from the "Learning WebGL" lessons: http://learningwebgl.com/blog/?p=571
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="gl"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{WebGLRenderingContext}</span>
+ <b>gl</b>
+
+ </div>
+ <div class="description">
+ Our WebGL context.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="mvMatrix"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.TransformStack.html">bigshot.TransformStack</a>}</span>
+ <b>mvMatrix</b>
+
+ </div>
+ <div class="description">
+ The current object-to-world transform matrix.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="pMatrix"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{<a href="../symbols/bigshot.TransformStack.html">bigshot.TransformStack</a>}</span>
+ <b>pMatrix</b>
+
+ </div>
+ <div class="description">
+ The current perspective transform matrix.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="shaderProgram"> </a>
+ <div class="fixedFont">
+
+
+ <b>shaderProgram</b>
+
+ </div>
+ <div class="description">
+ The current shader program.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="vertexShader"> </a>
+ <div class="fixedFont">
+
+
+ <b>vertexShader</b>
+
+ </div>
+ <div class="description">
+ Vertex shader. Taken from the "Learning WebGL" lessons: http://learningwebgl.com/blog/?p=571
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="createFragmentShader"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{WebGLShader}</span>
+ <b>createFragmentShader</b>(source)
+
+ </div>
+ <div class="description">
+ Creates a new fragment shader.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>source</b>
+
+ </dt>
+ <dd>the source code</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="createImageTextureFromImage"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{WebGLTexture}</span>
+ <b>createImageTextureFromImage</b>(image, minFilter, magFilter)
+
+ </div>
+ <div class="description">
+ Creates a texture from an image.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLImageElement or HTMLCanvasElement}</span> <b>image</b>
+
+ </dt>
+ <dd>the image</dd>
+
+ <dt>
+ <b>minFilter</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>magFilter</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>An initialized texture</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="createImageTextureFromSource"> </a>
+ <div class="fixedFont">
+
+
+ <b>createImageTextureFromSource</b>(source, minFilter, magFilter)
+
+ </div>
+ <div class="description">
+ Creates a texture from a source url.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>source</b>
+
+ </dt>
+ <dd>the URL of the image</dd>
+
+ <dt>
+ <b>minFilter</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>magFilter</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>WebGLTexture</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name="createShader"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{WebGLShader}</span>
+ <b>createShader</b>(source, type)
+
+ </div>
+ <div class="description">
+ Creates a new shader.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>source</b>
+
+ </dt>
+ <dd>the source code</dd>
+
+ <dt>
+ <span class="light fixedFont">{int}</span> <b>type</b>
+
+ </dt>
+ <dd>the shader type, one of WebGLRenderingContext.FRAGMENT_SHADER or WebGLRenderingContext.VERTEX_SHADER</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="createVertexShader"> </a>
+ <div class="fixedFont">
+
+ <span class="light">{WebGLShader}</span>
+ <b>createVertexShader</b>(source)
+
+ </div>
+ <div class="description">
+ Creates a new vertex shader.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{String}</span> <b>source</b>
+
+ </dt>
+ <dd>the source code</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="initShaders"> </a>
+ <div class="fixedFont">
+
+
+ <b>initShaders</b>()
+
+ </div>
+ <div class="description">
+ Initializes the shaders.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="onresize"> </a>
+ <div class="fixedFont">
+
+
+ <b>onresize</b>()
+
+ </div>
+ <div class="description">
+ Must be called when the canvas element is resized.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="setMatrixUniforms"> </a>
+ <div class="fixedFont">
+
+
+ <b>setMatrixUniforms</b>()
+
+ </div>
+ <div class="description">
+ Sets the matrix parameters ("uniforms", since the variables are declared as uniform) in the shaders.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLTexturedQuad.html b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLTexturedQuad.html
new file mode 100644
index 00000000..fa6c1e72
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLTexturedQuad.html
@@ -0,0 +1,545 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.WebGLTexturedQuad - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.WebGLTexturedQuad
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ An abstraction for textured quads. Used in the <a href="../symbols/bigshot.WebGLTexturedQuadScene.html">bigshot.WebGLTexturedQuadScene</a>.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__WebGLTexturedQuad.js.html">WebGLTexturedQuad.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.WebGLTexturedQuad.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGLTexturedQuad.html#constructor">bigshot.WebGLTexturedQuad</a></b>(p, u, v, the)
+ </div>
+ <div class="description">Creates a textured quad object.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.WebGLTexturedQuad.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGLTexturedQuad.html#render">render</a></b>(webGl, vertexPositionBuffer, textureCoordBuffer, vertexIndexBuffer)
+ </div>
+ <div class="description">Renders the quad using the given <a href="../symbols/bigshot.WebGL.html">bigshot.WebGL</a> instance.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.WebGLTexturedQuad</b>(p, u, v, the)
+ </div>
+
+ <div class="description">
+ Creates a textured quad object.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>p</b>
+
+ </dt>
+ <dd>the top-left corner of the quad</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>u</b>
+
+ </dt>
+ <dd>vector pointing from p along the top edge of the quad</dd>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.Point3D.html">bigshot.Point3D</a>}</span> <b>v</b>
+
+ </dt>
+ <dd>vector pointing from p along the left edge of the quad</dd>
+
+ <dt>
+ <span class="light fixedFont">{WebGLTexture}</span> <b>the</b>
+
+ </dt>
+ <dd>texture to use.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="render"> </a>
+ <div class="fixedFont">
+
+
+ <b>render</b>(webGl, vertexPositionBuffer, textureCoordBuffer, vertexIndexBuffer)
+
+ </div>
+ <div class="description">
+ Renders the quad using the given <a href="../symbols/bigshot.WebGL.html">bigshot.WebGL</a> instance. Currently creates, fills, draws with and then deletes three buffers - not very efficient, but works.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.WebGL.html">bigshot.WebGL</a>}</span> <b>webGl</b>
+
+ </dt>
+ <dd>the WebGL wrapper instance to use for rendering.</dd>
+
+ <dt>
+ <b>vertexPositionBuffer</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>textureCoordBuffer</b>
+
+ </dt>
+ <dd></dd>
+
+ <dt>
+ <b>vertexIndexBuffer</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLTexturedQuadScene.html b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLTexturedQuadScene.html
new file mode 100644
index 00000000..93b5641f
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLTexturedQuadScene.html
@@ -0,0 +1,556 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.WebGLTexturedQuadScene - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.WebGLTexturedQuadScene
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ A "scene" consisting of a number of quads, all with a unique texture. Used by the <a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a> to render the VR cube.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__WebGLTexturedQuadScene.js.html">WebGLTexturedQuadScene.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.WebGLTexturedQuadScene.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGLTexturedQuadScene.html#constructor">bigshot.WebGLTexturedQuadScene</a></b>(webGl, buffers)
+ </div>
+ <div class="description">Creates a textured quad scene.</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.WebGLTexturedQuadScene.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGLTexturedQuadScene.html#addQuad">addQuad</a></b>(quad)
+ </div>
+ <div class="description">Adds a new quad to the scene.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont"><b><a href="../symbols/bigshot.WebGLTexturedQuadScene.html#render">render</a></b>()
+ </div>
+ <div class="description">Renders all quads.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.WebGLTexturedQuadScene</b>(webGl, buffers)
+ </div>
+
+ <div class="description">
+ Creates a textured quad scene.
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.WebGL.html">bigshot.WebGL</a>}</span> <b>webGl</b>
+
+ </dt>
+ <dd>the webGl instance to use for rendering.</dd>
+
+ <dt>
+ <b>buffers</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">See:</dt>
+
+ <dd><a href="../symbols/bigshot.WebGLTexturedQuad.html">bigshot.WebGLTexturedQuad</a></dd>
+
+ </dl>
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name="addQuad"> </a>
+ <div class="fixedFont">
+
+
+ <b>addQuad</b>(quad)
+
+ </div>
+ <div class="description">
+ Adds a new quad to the scene.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>quad</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ <hr />
+
+ <a name="render"> </a>
+ <div class="fixedFont">
+
+
+ <b>render</b>()
+
+ </div>
+ <div class="description">
+ Renders all quads.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLUtil.html b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLUtil.html
new file mode 100644
index 00000000..2969aa85
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLUtil.html
@@ -0,0 +1,611 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.WebGLUtil - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.WebGLUtil
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ WebGL utility functions.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__WebGLUtil.js.html">WebGLUtil.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.WebGLUtil.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGLUtil.html#constructor">bigshot.WebGLUtil</a></b>()
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class bigshot.WebGLUtil.">
+ <caption>Field Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Field Attributes</th>
+ <th scope="col">Field Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">
+ bigshot.WebGLUtil.<b><a href="../symbols/bigshot.WebGLUtil.html#.debug">debug</a></b>
+ </div>
+ <div class="description">Flag indicating whether we want to wrap the WebGL context in a WebGLDebugUtils.makeDebugContext.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.WebGLUtil.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.WebGLUtil.<b><a href="../symbols/bigshot.WebGLUtil.html#.createContext">createContext</a></b>(canvas)
+ </div>
+ <div class="description">Creates a WebGL context for the given canvas, if possible.</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.WebGLUtil.<b><a href="../symbols/bigshot.WebGLUtil.html#.isWebGLSupported">isWebGLSupported</a></b>()
+ </div>
+ <div class="description">Tests whether WebGL is supported.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.WebGLUtil</b>()
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+ <div class="sectionTitle">
+ Field Detail
+ </div>
+
+ <a name=".debug"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+ <span class="light">{boolean}</span>
+ <span class="light">bigshot.WebGLUtil.</span><b>debug</b>
+
+ </div>
+ <div class="description">
+ Flag indicating whether we want to wrap the WebGL context in a WebGLDebugUtils.makeDebugContext. Defaults to false.
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name=".createContext"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+ <span class="light">{WebGLRenderingContext}</span>
+ <span class="light">bigshot.WebGLUtil.</span><b>createContext</b>(canvas)
+
+ </div>
+ <div class="description">
+ Creates a WebGL context for the given canvas, if possible.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{HTMLCanvasElement}</span> <b>canvas</b>
+
+ </dt>
+ <dd>the canvas</dd>
+
+ </dl>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Throws:</dt>
+
+ <dt>
+ <span class="light fixedFont">{Error}</span> <b></b>
+ </dt>
+ <dd>If WebGL isn't supported.</dd>
+
+ </dl>
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>The WebGL context</dd>
+
+ </dl>
+
+
+
+
+ <hr />
+
+ <a name=".isWebGLSupported"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+ <span class="light">{boolean}</span>
+ <span class="light">bigshot.WebGLUtil.</span><b>isWebGLSupported</b>()
+
+ </div>
+ <div class="description">
+ Tests whether WebGL is supported.
+
+
+ </div>
+
+
+
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Returns:</dt>
+
+ <dd>true If WebGL is supported, false otherwise.</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLVRRenderer.html b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLVRRenderer.html
new file mode 100644
index 00000000..34bb08a4
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.WebGLVRRenderer.html
@@ -0,0 +1,441 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot.WebGLVRRenderer - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Class bigshot.WebGLVRRenderer
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ WebGL renderer.
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__WebGLVRRenderer.js.html">WebGLVRRenderer.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.WebGLVRRenderer.">
+ <caption>Class Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.WebGLVRRenderer.html#constructor">bigshot.WebGLVRRenderer</a></b>(container)
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Class Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot.WebGLVRRenderer</b>(container)
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <b>container</b>
+
+ </dt>
+ <dd></dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:21 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/bigshot.html b/js/vendor/bigshot/doc/js/symbols/bigshot.html
new file mode 100644
index 00000000..71e0a233
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/bigshot.html
@@ -0,0 +1,501 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="generator" content="JsDoc Toolkit" />
+
+ <title>bigshot - Bigshot 2.0</title>
+
+ <style type="text/css">
+ /* default.css */
+body
+{
+ font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+ width: 800px;
+}
+
+.header
+{
+ clear: both;
+ background-color: #ccc;
+ padding: 8px;
+}
+
+h1
+{
+ font-size: 150%;
+ font-weight: bold;
+ padding: 0;
+ margin: 1em 0 0 3pt;
+}
+
+hr
+{
+ border: none 0;
+ border-top: 1px solid #7F8FB1;
+ height: 1px;
+}
+
+pre.code
+{
+ display: block;
+ padding: 8px;
+ border: 1px dashed #ccc;
+}
+
+#index
+{
+ margin-top: 24px;
+ float: left;
+ width: 160px;
+ position: absolute;
+ left: 8px;
+ background-color: #F3F3F3;
+ padding: 8px;
+}
+
+#content
+{
+ margin-left: 190px;
+ width: 600px;
+}
+
+.classList
+{
+ list-style-type: none;
+ padding: 0;
+ margin: 0 0 0 8px;
+ font-family: arial, sans-serif;
+ font-size: 1em;
+ overflow: auto;
+}
+
+.classList li
+{
+ padding: 0;
+ margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+ font-size:170%;
+ line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+ background-color: #7F8FB1;
+ color: #fff;
+ font-size:130%;
+ text-align: left;
+ padding: 2px 6px 2px 6px;
+ border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+ vertical-align: top;
+ padding: 4px;
+ border-bottom: 1px #7F8FB1 solid;
+ border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+ border-left: 1px #7F8FB1 solid;
+ width: 140px;
+ text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+ line-height: 15px;
+ color: #002EBE;
+ font-family: "Courier New",Courier,monospace;
+ font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+ text-align: left;
+ font-size: 13px;
+ line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+ line-height: 15px;
+ padding: 4px;
+ padding-left: 4px;
+}
+
+.extendsList {
+ margin-top: 2px;
+ margin-left: 3pt;
+ padding-top: 0px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+ list-style: square;
+ margin-left: 20px;
+ padding-left: 0;
+}
+
+.detailList {
+ margin-left: 20px;
+ line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+ font-weight: bold;
+ padding-bottom: 6px;
+ margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+ color: #777;
+ font-style: italic;
+}
+
+.fineprint
+{
+ text-align: right;
+ font-size: 10px;
+}
+ </style>
+ </head>
+
+ <body>
+<!-- ============================== header ================================= -->
+ <!-- begin static/header.html -->
+ <div id="header">
+</div>
+ <!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+ <div id="index">
+ <!-- begin publish.classesIndex -->
+ <div align="center"><a href="../index.html">Class Index</a>
+| <a href="../files.html">File Index</a></div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+
+ <li><i><a href="../symbols/_global_.html">_global_</a></i></li>
+
+ <li><a href="../symbols/bigshot.html">bigshot</a></li>
+
+ <li><a href="../symbols/bigshot.AbstractVRRenderer.html">AbstractVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitor.html">AdaptiveLODMonitor</a></li>
+
+ <li><a href="../symbols/bigshot.AdaptiveLODMonitorParameters.html">AdaptiveLODMonitorParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ArchiveFileSystem.html">ArchiveFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.Browser.html">Browser</a></li>
+
+ <li><a href="../symbols/bigshot.CachingDataLoader.html">CachingDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuad.html">CSS3DTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DTexturedQuadScene.html">CSS3DTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.CSS3DVRRenderer.html">CSS3DVRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.DataLoader.html">DataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.DeepZoomImageFileSystem.html">DeepZoomImageFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.DefaultDataLoader.html">DefaultDataLoader</a></li>
+
+ <li><a href="../symbols/bigshot.Event.html">Event</a></li>
+
+ <li><a href="../symbols/bigshot.EventDispatcher.html">EventDispatcher</a></li>
+
+ <li><a href="../symbols/bigshot.FileSystem.html">FileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FolderFileSystem.html">FolderFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.FullScreen.html">FullScreen</a></li>
+
+ <li><a href="../symbols/bigshot.HomogeneousPoint3D.html">HomogeneousPoint3D</a></li>
+
+ <li><a href="../symbols/bigshot.Hotspot.html">Hotspot</a></li>
+
+ <li><a href="../symbols/bigshot.HotspotLayer.html">HotspotLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLDivElementLayer.html">HTMLDivElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.HTMLElementLayer.html">HTMLElementLayer</a></li>
+
+ <li><a href="../symbols/bigshot.Image.html">Image</a></li>
+
+ <li><a href="../symbols/bigshot.ImageBase.html">ImageBase</a></li>
+
+ <li><a href="../symbols/bigshot.ImageEvent.html">ImageEvent</a></li>
+
+ <li><a href="../symbols/bigshot.ImageParameters.html">ImageParameters</a></li>
+
+ <li><a href="../symbols/bigshot.ImageTileCache.html">ImageTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.ImageVRTileCache.html">ImageVRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.LabeledHotspot.html">LabeledHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Layer.html">Layer</a></li>
+
+ <li><a href="../symbols/bigshot.LinkHotspot.html">LinkHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.LRUMap.html">LRUMap</a></li>
+
+ <li><a href="../symbols/bigshot.Object.html">Object</a></li>
+
+ <li><a href="../symbols/bigshot.Point2D.html">Point2D</a></li>
+
+ <li><a href="../symbols/bigshot.Point3D.html">Point3D</a></li>
+
+ <li><a href="../symbols/bigshot.PointHotspot.html">PointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.Rotation.html">Rotation</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleFileSystem.html">SimpleFileSystem</a></li>
+
+ <li><a href="../symbols/bigshot.SimpleImage.html">SimpleImage</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuad.html">TexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.TexturedQuadScene.html">TexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.TextureTileCache.html">TextureTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.TileLayer.html">TileLayer</a></li>
+
+ <li><a href="../symbols/bigshot.TimedWeakReference.html">TimedWeakReference</a></li>
+
+ <li><a href="../symbols/bigshot.TransformStack.html">TransformStack</a></li>
+
+ <li><a href="../symbols/bigshot.VREvent.html">VREvent</a></li>
+
+ <li><a href="../symbols/bigshot.VRFace.html">VRFace</a></li>
+
+ <li><a href="../symbols/bigshot.VRHotspot.html">VRHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.html">VRPanorama</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderCause.html">VRPanorama.RenderCause</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanorama.RenderState.html">VRPanorama.RenderState</a></li>
+
+ <li><a href="../symbols/bigshot.VRPanoramaParameters.html">VRPanoramaParameters</a></li>
+
+ <li><a href="../symbols/bigshot.VRPointHotspot.html">VRPointHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRectangleHotspot.html">VRRectangleHotspot</a></li>
+
+ <li><a href="../symbols/bigshot.VRRenderer.html">VRRenderer</a></li>
+
+ <li><a href="../symbols/bigshot.VRTileCache.html">VRTileCache</a></li>
+
+ <li><a href="../symbols/bigshot.WebGL.html">WebGL</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuad.html">WebGLTexturedQuad</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLTexturedQuadScene.html">WebGLTexturedQuadScene</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLUtil.html">WebGLUtil</a></li>
+
+ <li><a href="../symbols/bigshot.WebGLVRRenderer.html">WebGLVRRenderer</a></li>
+
+</ul>
+<hr />
+ <!-- end publish.classesIndex -->
+ </div>
+
+ <div id="content">
+<!-- ============================== class title ============================ -->
+ <h1 class="classTitle">
+
+ Namespace bigshot
+ </h1>
+
+<!-- ============================== class summary ========================== -->
+
+
+ <p class="description">
+ Bigshot namespace. Bigshot is a toolkit for zoomable images and VR panoramas. <h3>Zoomable Images</h3> <p>The two classes that are needed for zoomable images are: <ul> <li><a href="../symbols/bigshot.Image.html">bigshot.Image</a>: The main class for making zoomable images. See the class docs for a tutorial. <li><a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a>: Parameters for zoomable images. <li><a href="../symbols/bigshot.SimpleImage.html">bigshot.SimpleImage</a>: A class for making simple zoomable images that don't require the generation of an image pyramid.. See the class docs for a tutorial. </ul> For hotspots, see: <ul> <li><a href="../symbols/bigshot.HotspotLayer.html">bigshot.HotspotLayer</a> <li><a href="../symbols/bigshot.Hotspot.html">bigshot.Hotspot</a> <li><a href="../symbols/bigshot.LabeledHotspot.html">bigshot.LabeledHotspot</a> <li><a href="../symbols/bigshot.LinkHotspot.html">bigshot.LinkHotspot</a> </ul> <h3>VR Panoramas</h3> <p>The two classes that are needed for zoomable VR panoramas (requires WebGL) are: <ul> <li><a href="../symbols/bigshot.VRPanorama.html">bigshot.VRPanorama</a>: The main class for making VR panoramas. See the class docs for a tutorial. <li><a href="../symbols/bigshot.VRPanoramaParameters.html">bigshot.VRPanoramaParameters</a>: Parameters for VR panoramas. </ul> For hotspots, see: <ul> <li><a href="../symbols/bigshot.VRHotspot.html">bigshot.VRHotspot</a> <li><a href="../symbols/bigshot.VRRectangleHotspot.html">bigshot.VRRectangleHotspot</a> <li><a href="../symbols/bigshot.VRPointHotspot.html">bigshot.VRPointHotspot</a> </ul>
+
+
+ <br /><i>Defined in: </i> <a href="../symbols/src/src__js__bigshot.js.html">bigshot.js</a>.
+
+
+
+ </p>
+
+<!-- ============================== constructor summary ==================== -->
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class bigshot.">
+ <caption>Namespace Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Constructor Attributes</th>
+ <th scope="col">Constructor Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="attributes">&nbsp;</td>
+ <td class="nameDescription" >
+ <div class="fixedFont">
+ <b><a href="../symbols/bigshot.html#constructor">bigshot</a></b>
+ </div>
+ <div class="description"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<!-- ============================== properties summary ===================== -->
+
+
+<!-- ============================== methods summary ======================== -->
+
+
+
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class bigshot.">
+ <caption>Method Summary</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method Attributes</th>
+ <th scope="col">Method Name and Description</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <tr>
+ <td class="attributes">&lt;static&gt; &nbsp;</td>
+ <td class="nameDescription">
+ <div class="fixedFont">bigshot.<b><a href="../symbols/bigshot.html#.setupFileSystem">setupFileSystem</a></b>(parameters)
+ </div>
+ <div class="description">Sets up a filesystem instance in the given parameters object, if none exist.</div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+
+
+<!-- ============================== events summary ======================== -->
+
+
+<!-- ============================== constructor details ==================== -->
+
+ <div class="details"><a name="constructor"> </a>
+ <div class="sectionTitle">
+ Namespace Detail
+ </div>
+
+ <div class="fixedFont">
+ <b>bigshot</b>
+ </div>
+
+ <div class="description">
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+<!-- ============================== field details ========================== -->
+
+
+<!-- ============================== method details ========================= -->
+
+ <div class="sectionTitle">
+ Method Detail
+ </div>
+
+ <a name=".setupFileSystem"> </a>
+ <div class="fixedFont">&lt;static&gt;
+
+
+ <span class="light">bigshot.</span><b>setupFileSystem</b>(parameters)
+
+ </div>
+ <div class="description">
+ Sets up a filesystem instance in the given parameters object, if none exist. If the <a href="../symbols/bigshot.ImageParameters.html#fileSystem">bigshot.ImageParameters#fileSystem</a> member isn't set, the <a href="../symbols/bigshot.ImageParameters.html#fileSystemType">bigshot.ImageParameters#fileSystemType</a> member is used to create a new <a href="../symbols/bigshot.FileSystem.html">bigshot.FileSystem</a> instance and set it.
+
+ <br />
+ <i>Defined in: </i> <a href="../symbols/src/src__js__FileSystem.js.html">FileSystem.js</a>.
+
+
+ </div>
+
+
+
+
+ <dl class="detailList">
+ <dt class="heading">Parameters:</dt>
+
+ <dt>
+ <span class="light fixedFont">{<a href="../symbols/bigshot.ImageParameters.html">bigshot.ImageParameters</a> or bigshot.VRPanoramaParameters or bigshot.ImageCarouselPanoramaParameters}</span> <b>parameters</b>
+
+ </dt>
+ <dd>the parameters object to populate</dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- ============================== event details ========================= -->
+
+
+ <hr />
+ </div>
+
+
+<!-- ============================== footer ================================= -->
+ <div class="fineprint" style="clear:both">
+
+ Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Wed Oct 02 2013 11:24:20 GMT+0200 (CEST)
+ </div>
+ </body>
+</html>
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__AbstractVRRenderer.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__AbstractVRRenderer.js.html
new file mode 100644
index 00000000..d891c0e3
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__AbstractVRRenderer.js.html
@@ -0,0 +1,102 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class Abstract VR renderer base class.
+<span class='line'> 19</span> */</span><span class="WHIT">
+<span class='line'> 20</span> </span><span class="NAME">bigshot.AbstractVRRenderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 22</span>
+<span class='line'> 23</span> </span><span class="NAME">bigshot.AbstractVRRenderer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 25</span> * Transforms a vector to world coordinates.
+<span class='line'> 26</span> *
+<span class='line'> 27</span> * @param {bigshot.Point3D} vector the vector to transform
+<span class='line'> 28</span> */</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">transformToWorld</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">transformToWorld</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vector</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">world</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mvMatrix.matrix</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">xPoint3Dhom1</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vector</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">world</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 36</span> * Transforms a world vector to screen coordinates.
+<span class='line'> 37</span> *
+<span class='line'> 38</span> * @param {bigshot.Point3D} world the world-vector to transform
+<span class='line'> 39</span> */</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">transformWorldToScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">transformWorldToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">world</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">world.z</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">screen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pMatrix.matrix</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">xPoint3Dhom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">world</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">screen.w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Sylvester.precision</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">screen.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">screen.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">screen.z</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vw</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">sz</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">vw</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vh</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">sz</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">vh</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 64</span> * Transforms a vector to screen coordinates.
+<span class='line'> 65</span> *
+<span class='line'> 66</span> * @param {bigshot.Point3D} vector the vector to transform
+<span class='line'> 67</span> * @return the transformed vector, or null if the vector is nearer than the near-z plane.
+<span class='line'> 68</span> */</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">transformToScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vector</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mvpMatrix.xPoint3Dhom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vector</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sel.z</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sel.w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sel.w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Sylvester.precision</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sel.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sel.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vw</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">sz</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">vw</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vh</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">sz</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">vh</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span>
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 95</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__AdaptiveLODMonitor.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__AdaptiveLODMonitor.js.html
new file mode 100644
index 00000000..36d891ef
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__AdaptiveLODMonitor.js.html
@@ -0,0 +1,250 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new adaptive level-of-detail monitor.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class An adaptive LOD monitor that adjusts the level of detail of a VR panorama
+<span class='line'> 21</span> * to achieve a desired frame rate. To connect it to a VR panorama, use the
+<span class='line'> 22</span> * {@link bigshot.AdaptiveLODMonitor#getListener} method to get a render listener
+<span class='line'> 23</span> * that can be passed to {@link bigshot.VRPanorama#addRenderListener}.
+<span class='line'> 24</span> *
+<span class='line'> 25</span> * &lt;p>The monitor maintains two render modes - a high quality one with a fixed
+<span class='line'> 26</span> * level of detail, and a low(er) quality one with variable level of detail.
+<span class='line'> 27</span> * If the panorama is idle for more than a set interval, a high-quality render is
+<span class='line'> 28</span> * performed.
+<span class='line'> 29</span> *
+<span class='line'> 30</span> * @param {bigshot.AdaptiveLODMonitorParameters} parameters parameters for the LOD monitor.
+<span class='line'> 31</span> *
+<span class='line'> 32</span> * @see bigshot.AdaptiveLODMonitorParameters for a list of parameters
+<span class='line'> 33</span> *
+<span class='line'> 34</span> * @example
+<span class='line'> 35</span> * var bvr = new bigshot.VRPanorama ( ... );
+<span class='line'> 36</span> * var lodMonitor = new bigshot.AdaptiveLODMonitor (
+<span class='line'> 37</span> * new bigshot.AdaptiveLODMonitorParameters ({
+<span class='line'> 38</span> * vrPanorama : bvr,
+<span class='line'> 39</span> * targetFps : 30,
+<span class='line'> 40</span> * tolerance : 0.3,
+<span class='line'> 41</span> * rate : 0.1,
+<span class='line'> 42</span> * minMag : 1.5,
+<span class='line'> 43</span> * maxMag : 16
+<span class='line'> 44</span> * }));
+<span class='line'> 45</span> * bvr.addRenderListener (lodMonitor.getListener ());
+<span class='line'> 46</span> */</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="NAME">bigshot.AdaptiveLODMonitor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">this.setParameters</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 51</span> * The current adaptive detail level.
+<span class='line'> 52</span> * @type float
+<span class='line'> 53</span> * @private
+<span class='line'> 54</span> */</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">this.currentAdaptiveMagnification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.vrPanorama.getMaxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 58</span> * The number of frames that have been rendered.
+<span class='line'> 59</span> * @type int
+<span class='line'> 60</span> * @private
+<span class='line'> 61</span> */</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">this.frames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 65</span> * The total number of times we have sampled the render time.
+<span class='line'> 66</span> * @type int
+<span class='line'> 67</span> * @private
+<span class='line'> 68</span> */</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">this.samples</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 72</span> * The sum of sample times from all samples of render time in milliseconds.
+<span class='line'> 73</span> * @type int
+<span class='line'> 74</span> * @private
+<span class='line'> 75</span> */</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">this.renderTimeTotal</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 79</span> * The sum of sample times from the recent sample pass in milliseconds.
+<span class='line'> 80</span> * @type int
+<span class='line'> 81</span> * @private
+<span class='line'> 82</span> */</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">this.renderTimeLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 86</span> * The number of samples currently done in the recent sample pass.
+<span class='line'> 87</span> * @type int
+<span class='line'> 88</span> * @private
+<span class='line'> 89</span> */</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">this.samplesLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 93</span> * The start time, in milliseconds, of the last sample.
+<span class='line'> 94</span> * @type int
+<span class='line'> 95</span> * @private
+<span class='line'> 96</span> */</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="NAME">this.startTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>100</span> * The time, in milliseconds, when the panorama was last rendered.
+<span class='line'>101</span> * @type int
+<span class='line'>102</span> * @private
+<span class='line'>103</span> */</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="NAME">this.lastRender</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="NAME">this.hqRender</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="NAME">this.hqMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="NAME">this.hqRenderWaiting</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>111</span> * Flag to enable / disable the monitor.
+<span class='line'>112</span> * @type boolean
+<span class='line'>113</span> * @private
+<span class='line'>114</span> */</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="NAME">this.enabled</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">this.listenerFunction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">state</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="NAME">that.listener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">state</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>121</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>122</span>
+<span class='line'>123</span> </span><span class="NAME">bigshot.AdaptiveLODMonitor.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="NAME">averageRenderTime</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.samples</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.renderTimeTotal</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.samples</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>133</span> * @param {bigshot.AdaptiveLODMonitorParameters} parameters
+<span class='line'>134</span> */</span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="NAME">setParameters</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="NAME">this.targetTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.parameters.targetFps</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="NAME">this.lowerTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.targetTime</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">1.0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameters.tolerance</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="NAME">this.upperTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.targetTime</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">1.0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameters.tolerance</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="NAME">setEnabled</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">enabled</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="NAME">this.enabled</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enabled</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>145</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>146</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="NAME">averageRenderTimeLast</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.samples</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.renderTimeLast</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.samplesLast</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">getListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.listenerFunction</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">increaseDetail</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="NAME">this.currentAdaptiveMagnification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.minMag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.currentAdaptiveMagnification</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">1.0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameters.rate</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="NAME">decreaseDetail</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="NAME">this.currentAdaptiveMagnification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.maxMag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.currentAdaptiveMagnification</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">1.0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameters.rate</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>167</span> </span><span class="WHIT"> </span><span class="NAME">sample</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>168</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">deltat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.startTime</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>169</span> </span><span class="WHIT"> </span><span class="NAME">this.samples</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="NAME">this.renderTimeTotal</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">deltat</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="NAME">this.samplesLast</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="NAME">this.renderTimeLast</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">deltat</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>174</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.samplesLast</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">averageLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.renderTimeLast</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.samplesLast</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>177</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>178</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">averageLast</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.lowerTime</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="NAME">this.increaseDetail</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">averageLast</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.upperTime</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="NAME">this.decreaseDetail</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>183</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>184</span> </span><span class="WHIT"> </span><span class="NAME">this.samplesLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>185</span> </span><span class="WHIT"> </span><span class="NAME">this.renderTimeLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>186</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>187</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>188</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>189</span> </span><span class="WHIT"> </span><span class="NAME">hqRenderTick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>190</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.lastRender</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.parameters.hqRenderDelay</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>191</span> </span><span class="WHIT"> </span><span class="NAME">this.hqRender</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="NAME">this.hqMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>193</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.enabled</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>194</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters.vrPanorama.setMaxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.hqRenderMag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>195</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters.vrPanorama.render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>196</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>197</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>198</span> </span><span class="WHIT"> </span><span class="NAME">this.hqRender</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>199</span> </span><span class="WHIT"> </span><span class="NAME">this.hqRenderWaiting</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>200</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>201</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>202</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>203</span> </span><span class="WHIT"> </span><span class="NAME">that.hqRenderTick</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>204</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.hqRenderInterval</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>205</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>206</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>207</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>208</span> </span><span class="WHIT"> </span><span class="NAME">listener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">state</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>209</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.enabled</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>210</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>211</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>212</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>213</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hqRender</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>214</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>215</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>216</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>217</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hqMode</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">cause</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>218</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters.vrPanorama.setMaxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.minMag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>219</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>220</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>221</span> </span><span class="WHIT"> </span><span class="NAME">this.hqMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>222</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>223</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>224</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters.vrPanorama.setMaxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentAdaptiveMagnification</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>225</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>226</span> </span><span class="WHIT"> </span><span class="NAME">this.frames</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>227</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.frames</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.frames</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">bigshot.VRPanorama.ONRENDER_BEGIN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>228</span> </span><span class="WHIT"> </span><span class="NAME">this.startTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>229</span> </span><span class="WHIT"> </span><span class="NAME">this.lastRender</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startTime</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>230</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>231</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>232</span> </span><span class="WHIT"> </span><span class="NAME">that.sample</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>233</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>234</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hqRenderWaiting</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>235</span> </span><span class="WHIT"> </span><span class="NAME">this.hqRenderWaiting</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>236</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>237</span> </span><span class="WHIT"> </span><span class="NAME">that.hqRenderTick</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>238</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.hqRenderInterval</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>239</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>240</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>241</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>242</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>243</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__AdaptiveLODMonitorParameters.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__AdaptiveLODMonitorParameters.js.html
new file mode 100644
index 00000000..423f64e8
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__AdaptiveLODMonitorParameters.js.html
@@ -0,0 +1,126 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new parameter block.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Parameters for the adaptive LOD monitor.
+<span class='line'> 21</span> */</span><span class="WHIT">
+<span class='line'> 22</span> </span><span class="NAME">bigshot.AdaptiveLODMonitorParameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 25</span> * The VR panorama to adjust.
+<span class='line'> 26</span> *
+<span class='line'> 27</span> * @type bigshot.VRPanorama
+<span class='line'> 28</span> */</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.vrPanorama</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 32</span> * The target framerate in frames per second.
+<span class='line'> 33</span> * The monitor will try to achieve an average frame render time
+<span class='line'> 34</span> * of &lt;i>1 / targetFps&lt;/i> seconds.
+<span class='line'> 35</span> *
+<span class='line'> 36</span> * @default 30
+<span class='line'> 37</span> * @type float
+<span class='line'> 38</span> */</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.targetFps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">30</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 42</span> * The tolerance for the rendering time. The monitor will adjust the
+<span class='line'> 43</span> * level of detail if the average frame render time rises above
+<span class='line'> 44</span> * &lt;i>target frame render time * (1.0 + tolerance)&lt;/i> or falls below
+<span class='line'> 45</span> * &lt;i>target frame render time / (1.0 + tolerance)&lt;/i>.
+<span class='line'> 46</span> *
+<span class='line'> 47</span> * @default 0.3
+<span class='line'> 48</span> * @type float
+<span class='line'> 49</span> */</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">this.tolerance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.3</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 53</span> * The rate at which the level of detail is adjusted.
+<span class='line'> 54</span> * For detail increase, the detail is multiplied with (1.0 + rate),
+<span class='line'> 55</span> * for decrease divided.
+<span class='line'> 56</span> *
+<span class='line'> 57</span> * @default 0.1
+<span class='line'> 58</span> * @type float
+<span class='line'> 59</span> */</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">this.rate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 63</span> * Minimum texture magnification.
+<span class='line'> 64</span> *
+<span class='line'> 65</span> * @default 1.5
+<span class='line'> 66</span> * @type float
+<span class='line'> 67</span> */</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">this.minMag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.5</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 71</span> * Maximum texture magnification.
+<span class='line'> 72</span> *
+<span class='line'> 73</span> * @default 16
+<span class='line'> 74</span> * @type float
+<span class='line'> 75</span> */</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">this.maxMag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 79</span> * Texture magnification for HQ render passes.
+<span class='line'> 80</span> *
+<span class='line'> 81</span> * @default 1.5
+<span class='line'> 82</span> * @type float
+<span class='line'> 83</span> */</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="NAME">this.hqRenderMag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.5</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 87</span> * Delay in milliseconds before executing
+<span class='line'> 88</span> * a HQ render pass.
+<span class='line'> 89</span> *
+<span class='line'> 90</span> * @default 2000
+<span class='line'> 91</span> * @type int
+<span class='line'> 92</span> */</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="NAME">this.hqRenderDelay</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2000</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 96</span> * Interval in milliseconds for the
+<span class='line'> 97</span> * HQ render pass timer.
+<span class='line'> 98</span> *
+<span class='line'> 99</span> * @default 1000
+<span class='line'>100</span> * @type int
+<span class='line'>101</span> */</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="NAME">this.hqRenderInterval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="NAME">this.merge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">values</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">overwrite</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">overwrite</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>118</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>119</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__ArchiveFileSystem.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__ArchiveFileSystem.js.html
new file mode 100644
index 00000000..ea189bfd
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__ArchiveFileSystem.js.html
@@ -0,0 +1,134 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new instance of a &lt;code>.bigshot&lt;/code> archive filesystem adapter.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Bigshot archive filesystem.
+<span class='line'> 21</span> * @param {bigshot.ImageParameters|bigshot.VRPanoramaParameters} parameters the associated image parameters
+<span class='line'> 22</span> * @augments bigshot.FileSystem
+<span class='line'> 23</span> * @constructor
+<span class='line'> 24</span> */</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="NAME">bigshot.ArchiveFileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="NAME">this.indexSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">this.offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">this.index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">browser.createXMLHttpRequest</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">req.open</span><span class="PUNC">(</span><span class="STRN">"GET"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"&start=0&length=24&type=text/plain"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">req.send</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">req.status</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">req.responseText.substring</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"BIGSHOT"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">alert</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"\""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\" is not a valid bigshot file"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="NAME">this.indexSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">req.responseText.substring</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">this.offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.indexSize</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">req.open</span><span class="PUNC">(</span><span class="STRN">"GET"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"&type=text/plain&start=24&length="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.indexSize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">req.send</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">req.status</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">substrings</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.responseText.split</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">":"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">substrings.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">this.index</span><span class="PUNC">[</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.offset</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">alert</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"The index of \""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\" could not be loaded: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req.status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">alert</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"The header of \""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\" could not be loaded: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req.status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span>
+<span class='line'> 63</span>
+<span class='line'> 64</span> </span><span class="NAME">bigshot.ArchiveFileSystem.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">getDescriptor</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">this.browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.createXMLHttpRequest</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">req.open</span><span class="PUNC">(</span><span class="STRN">"GET"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"descriptor"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">req.send</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">req.status</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">substrings</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.responseText.split</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">":"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">substrings.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"suffix"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="PUNC">[</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="PUNC">[</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">descriptor.suffix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Unable to find descriptor."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">getPosterFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"poster"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="NAME">getFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPrefix</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.index</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">console</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="NAME">console.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Can't find "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"&start="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.index</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"&length="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.index</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.substring</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">".jpg"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"&type=image/jpeg"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.substring</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">".png"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"&type=image/png"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"&type=text/plain"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="NAME">getImageFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="NAME">getPrefix</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">setPrefix</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>125</span>
+<span class='line'>126</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.ArchiveFileSystem"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.FileSystem</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>127</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__Browser.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__Browser.js.html
new file mode 100644
index 00000000..d66c1def
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__Browser.js.html
@@ -0,0 +1,325 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new browser helper object.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Encapsulates common browser functions for cross-browser portability
+<span class='line'> 21</span> * and convenience.
+<span class='line'> 22</span> */</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="NAME">this.requestAnimationFrameFunction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="NAME">window.requestAnimationFrame</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="NAME">window.mozRequestAnimationFrame</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">window.webkitRequestAnimationFrame</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">window.msRequestAnimationFrame</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">callback</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">callback</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 31</span>
+<span class='line'> 32</span> </span><span class="NAME">bigshot.Browser.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 34</span> * Removes all children from an element.
+<span class='line'> 35</span> *
+<span class='line'> 36</span> * @public
+<span class='line'> 37</span> * @param {HTMLElement} element the element whose children are to be removed.
+<span class='line'> 38</span> */</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">removeAllChildren</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">element.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'> 42</span> if (element.children.length > 0) {
+<span class='line'> 43</span> for (var i = element.children.length - 1; i >= 0; --i) {
+<span class='line'> 44</span> element.removeChild (element.children[i]);
+<span class='line'> 45</span> }
+<span class='line'> 46</span> }
+<span class='line'> 47</span> */</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 51</span> * Thunk to implement a faked "mouseenter" event.
+<span class='line'> 52</span> * @private
+<span class='line'> 53</span> */</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">mouseEnter</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">_fn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isAChildOf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.isAChildOf</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">_evt</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">relTarget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_evt.relatedTarget</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">relTarget</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">isAChildOf</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">relTarget</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">_fn.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_evt</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">isAChildOf</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">_parent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_child</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">_parent</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">_child</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">_child</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">_child</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">_parent</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">_child</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_child.parentNode</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">_child</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">_parent</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 75</span> * Unregisters a listener from an element.
+<span class='line'> 76</span> *
+<span class='line'> 77</span> * @param {HTMLElement} elem the element
+<span class='line'> 78</span> * @param {String} eventName the event name ("click", "mouseover", etc.)
+<span class='line'> 79</span> * @param {function(e)} fn the callback function to detach
+<span class='line'> 80</span> * @param {boolean} useCapture specifies if we should unregister a listener from the capture chain.
+<span class='line'> 81</span> */</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="NAME">unregisterListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">elem</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eventName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">useCapture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">elem.removeEventListener</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="NAME">elem.removeEventListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">eventName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">useCapture</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">elem.detachEvent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="NAME">elem.detachEvent</span><span class="PUNC">(</span><span class="STRN">'on'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">eventName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 91</span> * Registers a listener to an element.
+<span class='line'> 92</span> *
+<span class='line'> 93</span> * @param {HTMLElement} elem the element
+<span class='line'> 94</span> * @param {String} eventName the event name ("click", "mouseover", etc.)
+<span class='line'> 95</span> * @param {function(e)} fn the callback function to attach
+<span class='line'> 96</span> * @param {boolean} useCapture specifies if we want to initiate capture.
+<span class='line'> 97</span> * See &lt;a href="https://developer.mozilla.org/en/DOM/element.addEventListener">element.addEventListener&lt;/a>
+<span class='line'> 98</span> * on MDN for an explanation.
+<span class='line'> 99</span> */</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="NAME">registerListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">_elem</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_evtName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_fn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_useCapture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">_elem.addEventListener</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">_evtName</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'mouseenter'</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">_elem.addEventListener</span><span class="PUNC">(</span><span class="STRN">'mouseover'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.mouseEnter</span><span class="PUNC">(</span><span class="NAME">_fn</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_useCapture</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">_evtName</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'mouseleave'</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">_elem.addEventListener</span><span class="PUNC">(</span><span class="STRN">'mouseout'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.mouseEnter</span><span class="PUNC">(</span><span class="NAME">_fn</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_useCapture</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">_elem.addEventListener</span><span class="PUNC">(</span><span class="NAME">_evtName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_fn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_useCapture</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">_elem.attachEvent</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="NAME">_elem.attachEvent</span><span class="PUNC">(</span><span class="STRN">'on'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">_evtName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_fn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="NAME">_elem</span><span class="PUNC">[</span><span class="STRN">'on'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">_evtName</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_fn</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>121</span> * Stops an event from bubbling.
+<span class='line'>122</span> *
+<span class='line'>123</span> * @param {Event} eventObject the event object
+<span class='line'>124</span> */</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="NAME">stopEventBubbling</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">eventObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">eventObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">eventObject.stopPropagation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="NAME">eventObject.stopPropagation</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="NAME">eventObject.cancelBubble</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>134</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>136</span> * Creates a callback function that simply stops the event from bubbling.
+<span class='line'>137</span> *
+<span class='line'>138</span> * @example
+<span class='line'>139</span> * var browser = new bigshot.Browser ();
+<span class='line'>140</span> * browser.registerListener (element,
+<span class='line'>141</span> * "mousedown",
+<span class='line'>142</span> * browser.stopEventBubblingHandler (),
+<span class='line'>143</span> * false);
+<span class='line'>144</span> * @type function(event)
+<span class='line'>145</span> * @return a new function that can be used to stop an event from bubbling
+<span class='line'>146</span> */</span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="NAME">stopEventBubblingHandler</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="NAME">that.stopEventBubbling</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>156</span> * Stops bubbling for all mouse events on the element.
+<span class='line'>157</span> *
+<span class='line'>158</span> * @param {HTMLElement} element the element
+<span class='line'>159</span> */</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="NAME">stopMouseEventBubbling</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="NAME">this.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"mousedown"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stopEventBubblingHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">this.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"mouseup"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stopEventBubblingHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="NAME">this.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"mousemove"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stopEventBubblingHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>167</span> * Returns the size in pixels of the element
+<span class='line'>168</span> *
+<span class='line'>169</span> * @param {HTMLElement} obj the element
+<span class='line'>170</span> * @return a size object with two integer members, w and h, for width and height respectively.
+<span class='line'>171</span> */</span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="NAME">getElementSize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>174</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">obj.clientWidth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="NAME">size.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">obj.clientWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>177</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">obj.clientHeight</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>178</span> </span><span class="WHIT"> </span><span class="NAME">size.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">obj.clientHeight</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>183</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>184</span> * Returns true if the browser is scaling the window, such as on Mobile Safari.
+<span class='line'>185</span> * The method used here is far from perfect, but it catches the most important use case:
+<span class='line'>186</span> * If we are running on an iDevice and the page is zoomed out.
+<span class='line'>187</span> */</span><span class="WHIT">
+<span class='line'>188</span> </span><span class="WHIT"> </span><span class="NAME">browserIsViewporting</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>189</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window.innerWidth</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">screen.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>190</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>191</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>193</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>194</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>195</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>196</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>197</span> * Returns the device pixel scale, which is equal to the number of device
+<span class='line'>198</span> * pixels each css pixel corresponds to. Used to render the proper level of detail
+<span class='line'>199</span> * on mobile devices, especially when zoomed out and more detailed textures are
+<span class='line'>200</span> * simply wasted.
+<span class='line'>201</span> *
+<span class='line'>202</span> * @returns The number of device pixels each css pixel corresponds to.
+<span class='line'>203</span> * For example, if the browser is zoomed out to 50% and a div with &lt;code>width&lt;/code>
+<span class='line'>204</span> * set to &lt;code>100px&lt;/code> occupies 50 physical pixels, the function will return
+<span class='line'>205</span> * &lt;code>0.5&lt;/code>.
+<span class='line'>206</span> * @type number
+<span class='line'>207</span> */</span><span class="WHIT">
+<span class='line'>208</span> </span><span class="WHIT"> </span><span class="NAME">getDevicePixelScale</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>209</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.browserIsViewporting</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>210</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">screen.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">window.innerWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>211</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>212</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>213</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>214</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>215</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>216</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>217</span> * Requests an animation frame, if the API is supported
+<span class='line'>218</span> * on the browser. If not, a &lt;code>setTimeout&lt;/code> with
+<span class='line'>219</span> * a timeout of zero is used.
+<span class='line'>220</span> *
+<span class='line'>221</span> * @param {function()} callback the animation frame render function
+<span class='line'>222</span> * @param {HTMLElement} element the element to use when requesting an
+<span class='line'>223</span> * animation frame
+<span class='line'>224</span> */</span><span class="WHIT">
+<span class='line'>225</span> </span><span class="WHIT"> </span><span class="NAME">requestAnimationFrame</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">callback</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>226</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">raff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.requestAnimationFrameFunction</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>227</span> </span><span class="WHIT"> </span><span class="NAME">raff</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">callback</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>228</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>229</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>230</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>231</span> * Returns the position in pixels of the element relative
+<span class='line'>232</span> * to the top left corner of the document.
+<span class='line'>233</span> *
+<span class='line'>234</span> * @param {HTMLElement} obj the element
+<span class='line'>235</span> * @return a position object with two integer members, x and y.
+<span class='line'>236</span> */</span><span class="WHIT">
+<span class='line'>237</span> </span><span class="WHIT"> </span><span class="NAME">getElementPosition</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>238</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Object</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>239</span> </span><span class="WHIT"> </span><span class="NAME">position.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>240</span> </span><span class="WHIT"> </span><span class="NAME">position.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>241</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>242</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">obj</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>243</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">position.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.offsetLeft</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>245</span> </span><span class="WHIT"> </span><span class="NAME">position.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.offsetTop</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>246</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.clientLeft</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">position.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.clientLeft</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>248</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>249</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.clientTop</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>250</span> </span><span class="WHIT"> </span><span class="NAME">position.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.clientTop</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>251</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>252</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>253</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>254</span> </span><span class="WHIT"> </span><span class="NAME">position.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>255</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>256</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>257</span> </span><span class="WHIT"> </span><span class="NAME">position.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>258</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>259</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.offsetParent</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>260</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>261</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">position</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>262</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>263</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>264</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>265</span> * Creates an XMLHttpRequest object.
+<span class='line'>266</span> *
+<span class='line'>267</span> * @type XMLHttpRequest
+<span class='line'>268</span> * @returns a XMLHttpRequest object.
+<span class='line'>269</span> */</span><span class="WHIT">
+<span class='line'>270</span> </span><span class="WHIT"> </span><span class="NAME">createXMLHttpRequest</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>271</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>272</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ActiveXObject</span><span class="PUNC">(</span><span class="STRN">"Msxml2.XMLHTTP"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>273</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>274</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>275</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>276</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>277</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ActiveXObject</span><span class="PUNC">(</span><span class="STRN">"Microsoft.XMLHTTP"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>278</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>279</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>280</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>281</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>282</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">XMLHttpRequest</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>283</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>284</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>285</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="STRN">"XMLHttpRequest not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>287</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>288</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>289</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>290</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>291</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>292</span> * Creates an opacity transition from opaque to transparent.
+<span class='line'>293</span> * If CSS transitions aren't supported, the element is
+<span class='line'>294</span> * immediately made transparent without a transition.
+<span class='line'>295</span> *
+<span class='line'>296</span> * @param {HTMLElement} element the element to fade out
+<span class='line'>297</span> * @param {function()} onComplete function to call when
+<span class='line'>298</span> * the transition is complete.
+<span class='line'>299</span> */</span><span class="WHIT">
+<span class='line'>300</span> </span><span class="WHIT"> </span><span class="NAME">makeOpacityTransition</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onComplete</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>301</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element.style.WebkitTransitionProperty</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>302</span> </span><span class="WHIT"> </span><span class="NAME">element.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>303</span> </span><span class="WHIT"> </span><span class="NAME">element.style.WebkitTransitionProperty</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"opacity"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>304</span> </span><span class="WHIT"> </span><span class="NAME">element.style.WebkitTransitionTimingFunction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"linear"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">element.style.WebkitTransitionDuration</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"1s"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>306</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>307</span> </span><span class="WHIT"> </span><span class="NAME">element.addEventListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"webkitTransitionEnd"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>308</span> </span><span class="WHIT"> </span><span class="NAME">onComplete</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>309</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>310</span> </span><span class="WHIT"> </span><span class="NAME">element.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>311</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>312</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>313</span> </span><span class="WHIT"> </span><span class="NAME">element.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>314</span> </span><span class="WHIT"> </span><span class="NAME">onComplete</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>315</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>316</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>317</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>318</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DTexturedQuad.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DTexturedQuad.js.html
new file mode 100644
index 00000000..1f5f3910
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DTexturedQuad.js.html
@@ -0,0 +1,137 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a textured quad object.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class An abstraction for textured quads. Used in the
+<span class='line'> 21</span> * {@link bigshot.CSS3DTexturedQuadScene}.
+<span class='line'> 22</span> *
+<span class='line'> 23</span> * @param {bigshot.Point3D} p the top-left corner of the quad
+<span class='line'> 24</span> * @param {bigshot.Point3D} u vector pointing from p along the top edge of the quad
+<span class='line'> 25</span> * @param {bigshot.Point3D} v vector pointing from p along the left edge of the quad
+<span class='line'> 26</span> * @param {HTMLImageElement} the image to use.
+<span class='line'> 27</span> */</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="NAME">bigshot.CSS3DTexturedQuad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.u</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">this.v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 34</span>
+<span class='line'> 35</span> </span><span class="NAME">bigshot.CSS3DTexturedQuad.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 37</span> * Computes the cross product of two vectors.
+<span class='line'> 38</span> *
+<span class='line'> 39</span> * @param {bigshot.Point3D} a the first vector
+<span class='line'> 40</span> * @param {bigshot.Point3D} b the second vector
+<span class='line'> 41</span> * @type bigshot.Point3D
+<span class='line'> 42</span> * @return the cross product
+<span class='line'> 43</span> */</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">crossProduct</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">crossProduct</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">*</span><span class="NAME">b.z</span><span class="PUNC">-</span><span class="NAME">a.z</span><span class="PUNC">*</span><span class="NAME">b.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">a.z</span><span class="PUNC">*</span><span class="NAME">b.x</span><span class="PUNC">-</span><span class="NAME">a.x</span><span class="PUNC">*</span><span class="NAME">b.z</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">*</span><span class="NAME">b.y</span><span class="PUNC">-</span><span class="NAME">a.y</span><span class="PUNC">*</span><span class="NAME">b.x</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 53</span> * Stringifies a vector as the x, y, and z components
+<span class='line'> 54</span> * separated by commas.
+<span class='line'> 55</span> *
+<span class='line'> 56</span> * @param {bigshot.Point3D} u the vector
+<span class='line'> 57</span> * @type String
+<span class='line'> 58</span> * @return the stringified vector
+<span class='line'> 59</span> */</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">vecToStr</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">vecToStr</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">u</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">u.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">u.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">u.z</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 65</span> * Creates a CSS3D matrix3d transform from
+<span class='line'> 66</span> * an origin point and two basis vectors
+<span class='line'> 67</span> *
+<span class='line'> 68</span> * @param {bigshot.Point3D} tl the top left corner
+<span class='line'> 69</span> * @param {bigshot.Point3D} u the vector pointing along the top edge
+<span class='line'> 70</span> * @param {bigshot.Point3D} y the vector pointing down the left edge
+<span class='line'> 71</span> * @type String
+<span class='line'> 72</span> * @return the matrix3d statement
+<span class='line'> 73</span> */</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="NAME">quadTransform</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">quadTransform</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crossProduct</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="STRN">"matrix3d("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="NAME">this.vecToStr</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">u</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">",0,"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.vecToStr</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">",0,"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="NAME">this.vecToStr</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">",0,"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="NAME">this.vecToStr</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">",1)"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 86</span> * Computes the norm of a vector.
+<span class='line'> 87</span> *
+<span class='line'> 88</span> * @param {bigshot.Point3D} vec the vector
+<span class='line'> 89</span> */</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">norm</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">norm</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vec</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vec.x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">vec.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">vec.y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">vec.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">vec.z</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">vec.z</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 95</span> * Renders the quad.
+<span class='line'> 96</span> *
+<span class='line'> 97</span> * @param {HTMLElement} world the world element
+<span class='line'> 98</span> * @param {number} scale the scale factor to apply to world space to get CSS pixel distances
+<span class='line'> 99</span> * @param {bigshot.Point3D} view the viewer position in world space
+<span class='line'>100</span> */</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">world</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">view</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.image.width</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.p</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">u</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.u</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.v</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="NAME">this.image.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.image.inWorld</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.image.inWorld</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="NAME">world.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.image</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="NAME">this.image.inWorld</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="NAME">this.image.style.WebkitTransformOrigin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px 0px 0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="NAME">this.image.style.WebkitTransform</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="NAME">this.quadTransform</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">view.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">ps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">p.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">view.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">ps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.z</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">view.z</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">ps</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">u.x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">u.y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">u.z</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">v.x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">v.y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">v.z</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>130</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DTexturedQuadScene.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DTexturedQuadScene.js.html
new file mode 100644
index 00000000..85089d92
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DTexturedQuadScene.js.html
@@ -0,0 +1,64 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a textured quad scene.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @param {HTMLElement} world element used as container for
+<span class='line'> 21</span> * the world coordinate system.
+<span class='line'> 22</span> * @param {number} scale the scaling factor to use to avoid
+<span class='line'> 23</span> * numeric errors.
+<span class='line'> 24</span> * @param {bigshot.Point3D} view the 3d-coordinates of the viewer
+<span class='line'> 25</span> *
+<span class='line'> 26</span> * @class A scene consisting of a number of quads, all with
+<span class='line'> 27</span> * a unique texture. Used by the {@link bigshot.VRPanorama} to render the VR cube.
+<span class='line'> 28</span> *
+<span class='line'> 29</span> * @see bigshot.CSS3DTexturedQuad
+<span class='line'> 30</span> */</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="NAME">bigshot.CSS3DTexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">world</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">view</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.quads</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">this.world</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">world</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">this.scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.view</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">view</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 37</span>
+<span class='line'> 38</span> </span><span class="NAME">bigshot.CSS3DTexturedQuadScene.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 40</span> * Adds a new quad to the scene.
+<span class='line'> 41</span> *
+<span class='line'> 42</span> * @param {bigshot.TexturedQuad} quad the quad to add to the scene
+<span class='line'> 43</span> */</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">addQuad</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">quad</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">this.quads.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">quad</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 49</span> * Renders all quads.
+<span class='line'> 50</span> */</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.quads.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.quads</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.world</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.scale</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.view</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DVRRenderer.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DVRRenderer.js.html
new file mode 100644
index 00000000..b7a12c89
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__CSS3DVRRenderer.js.html
@@ -0,0 +1,188 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class CSS 3D Transform-based renderer.
+<span class='line'> 19</span> * @param {HTMLElement} _container the HTML container element for the render viewport
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * @augments bigshot.VRRenderer
+<span class='line'> 22</span> */</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="NAME">bigshot.CSS3DVRRenderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">_container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="NAME">this.canvasOrigin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">this.canvasOrigin.style.WebkitTransformOrigin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px 0px 0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">this.canvasOrigin.style.WebkitTransformStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"preserve-3d"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.canvasOrigin.style.WebkitPerspective</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"600px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">this.canvasOrigin.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"relative"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.canvasOrigin.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"50%"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">this.canvasOrigin.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"50%"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.container.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.canvasOrigin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.viewport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.viewport.style.WebkitTransformOrigin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px 0px 0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.viewport.style.WebkitTransformStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"preserve-3d"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.canvasOrigin.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.viewport</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="NAME">this.world</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">this.world.style.WebkitTransformOrigin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px 0px 0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">this.world.style.WebkitTransformStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"preserve-3d"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">this.viewport.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.world</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.removeAllChildren</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.world</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.view</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.TransformStack</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.yaw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">this.pitch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">this.fov</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">this.pMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.TransformStack</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.onresize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">this.viewportSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span>
+<span class='line'> 64</span> </span><span class="NAME">bigshot.CSS3DVRRenderer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">browser</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="NAME">createTileCache</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.ImageVRTileCache</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">createTexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.CSS3DTexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.world</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">128</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.view</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">createTexturedQuad</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.CSS3DTexturedQuad</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">getElement</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">supportsUpdate</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.viewportSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.viewportSize.w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.browser.getElementSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.viewportSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.viewportSize.h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.browser.getElementSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">onresize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">beginRender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotation</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">translation</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rotationOffsets</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">this.viewportSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.getElementSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="NAME">this.yaw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rotation.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">this.pitch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rotation.p</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="NAME">this.fov</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">halfFovInRad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">halfHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">perspectiveDistance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">halfHeight</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.tan</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">halfFovInRad</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix.reset</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="NAME">this.view</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">translation</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix.translate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.view</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>134</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix.rotateZ</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotationOffsets.r</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix.rotateX</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotationOffsets.p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix.rotateY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotationOffsets.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix.rotateY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.yaw</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix.rotateX</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pitch</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="NAME">this.pMatrix.reset</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="NAME">this.pMatrix.perspective</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>145</span> </span><span class="WHIT"> </span><span class="NAME">this.mvpMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pMatrix.matrix</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">multiply</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mvMatrix.matrix</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>146</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="NAME">this.canvasOrigin.style.WebkitPerspective</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">perspectiveDistance</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.world.children.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">--</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="NAME">this.world.children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">inWorld</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="NAME">this.world.style.WebkitTransform</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="STRN">"rotate3d(1,0,0,"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">rotation.p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"deg) "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="STRN">"rotate3d(0,1,0,"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">rotation.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"deg) "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="STRN">"rotate3d(0,1,0,"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotationOffsets.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"deg) "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="STRN">"rotate3d(1,0,0,"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">rotationOffsets.p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"deg) "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="STRN">"rotate3d(0,0,1,"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">rotationOffsets.r</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"deg) "</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">this.world.style.WebkitTransformStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"preserve-3d"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="NAME">this.world.style.WebKitBackfaceVisibility</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"hidden"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">this.viewport.style.WebkitTransform</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="STRN">"translateZ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">perspectiveDistance</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px)"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="NAME">endRender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>167</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.world.children.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">--</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>168</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">child</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.world.children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>169</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">child.inWorld</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">child.inWorld</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">child.inWorld</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="NAME">this.world.removeChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">child</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>174</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="NAME">this.viewportSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>177</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>178</span>
+<span class='line'>179</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.CSS3DVRRenderer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.AbstractVRRenderer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>180</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.CSS3DVRRenderer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.VRRenderer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>181</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__CachingDataLoader.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__CachingDataLoader.js.html
new file mode 100644
index 00000000..8f4f459c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__CachingDataLoader.js.html
@@ -0,0 +1,133 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class Data loader using standard browser functions that maintains
+<span class='line'> 19</span> * an in-memory cache of everything loaded.
+<span class='line'> 20</span> * @augments bigshot.DataLoader
+<span class='line'> 21</span> */</span><span class="WHIT">
+<span class='line'> 22</span> </span><span class="NAME">bigshot.CachingDataLoader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="WHIT"> </span><span class="NAME">this.cache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="NAME">this.requested</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="NAME">this.requestedTiles</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 27</span>
+<span class='line'> 28</span> </span><span class="NAME">bigshot.CachingDataLoader.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">browser</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">loadImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cache</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cache</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.cache</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.requestedTiles</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">this.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">this.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"img"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">this.requestedTiles</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">listeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">that.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">that.requestedTiles</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">that.cache</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">listeners.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">listeners</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">tile.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">loadXml</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cache</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cache</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.cache</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">this.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.createXMLHttpRequest</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="NAME">this.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">async</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="NAME">this.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">finishRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xml</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">req.status</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="NAME">xml</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.responseXML</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">listeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">that.requested</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">that.cache</span><span class="PUNC">[</span><span class="NAME">url</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xml</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">listeners.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="NAME">listeners</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">xml</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xml</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">async</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="NAME">req.onreadystatechange</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">req.readyState</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="NAME">finishRequest</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="NAME">req.open</span><span class="PUNC">(</span><span class="STRN">"GET"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="NAME">req.send</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">req.open</span><span class="PUNC">(</span><span class="STRN">"GET"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">req.send</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">finishRequest</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>124</span>
+<span class='line'>125</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.CachingDataLoader"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.DataLoader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>126</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__DataLoader.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__DataLoader.js.html
new file mode 100644
index 00000000..233f814a
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__DataLoader.js.html
@@ -0,0 +1,49 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class Loads image and XML data.
+<span class='line'> 19</span> */</span><span class="WHIT">
+<span class='line'> 20</span> </span><span class="NAME">bigshot.DataLoader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 22</span>
+<span class='line'> 23</span> </span><span class="NAME">bigshot.DataLoader.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 25</span> * Loads an image.
+<span class='line'> 26</span> *
+<span class='line'> 27</span> * @param {String} url the url to load
+<span class='line'> 28</span> * @param {function(success,img)} onloaded called on complete
+<span class='line'> 29</span> */</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">loadImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 33</span> * Loads XML data.
+<span class='line'> 34</span> *
+<span class='line'> 35</span> * @param {String} url the url to load
+<span class='line'> 36</span> * @param {boolean} async use async request
+<span class='line'> 37</span> * @param {function(success,xml)} [onloaded] called on complete for async requests
+<span class='line'> 38</span> * @return the xml for synchronous calls
+<span class='line'> 39</span> */</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">loadXml</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">async</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 42</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__DeepZoomImageFileSystem.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__DeepZoomImageFileSystem.js.html
new file mode 100644
index 00000000..4af5b22f
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__DeepZoomImageFileSystem.js.html
@@ -0,0 +1,83 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new instance of a Deep Zoom Image folder-based filesystem adapter.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @augments bigshot.FileSystem
+<span class='line'> 21</span> * @class A Deep Zoom Image filesystem.
+<span class='line'> 22</span> * @param {bigshot.ImageParameters|bigshot.VRPanoramaParameters} parameters the associated image parameters
+<span class='line'> 23</span> * @constructor
+<span class='line'> 24</span> */</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="NAME">bigshot.DeepZoomImageFileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.DZ_NAMESPACE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"http://schemas.microsoft.com/deepzoom/2009"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.fullZoomLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">this.posterName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 34</span>
+<span class='line'> 35</span> </span><span class="NAME">bigshot.DeepZoomImageFileSystem.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">getDescriptor</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xml</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.dataLoader.loadXml</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".xml"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xml.getElementsByTagName</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Image"</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xml.getElementsByTagName</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Size"</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="NAME">descriptor.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">size.getAttribute</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Width"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">descriptor.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">size.getAttribute</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Height"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">descriptor.tileSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">image.getAttribute</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"TileSize"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">descriptor.overlap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">image.getAttribute</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Overlap"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">descriptor.suffix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">image.getAttribute</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Format"</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">descriptor.posterSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">descriptor.tileSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">descriptor.suffix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">this.fullZoomLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">descriptor.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">descriptor.height</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.LN2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">descriptor.minZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">this.fullZoomLevel</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">posterZoomLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">descriptor.tileSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.LN2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">this.posterName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getImageFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">posterZoomLevel</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.fullZoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">setPrefix</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">getPosterFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.posterName</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">getFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">getImageFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dziZoomLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fullZoomLevel</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dziZoomLevel</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__DefaultDataLoader.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__DefaultDataLoader.js.html
new file mode 100644
index 00000000..e8439995
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__DefaultDataLoader.js.html
@@ -0,0 +1,99 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new data loader.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @param {int} [maxRetries=0] the maximum number of times to retry requests
+<span class='line'> 21</span> * @param {String} [crossOrigin] the CORS crossOrigin parameter to use when loading images
+<span class='line'> 22</span> * @class Data loader using standard browser functions.
+<span class='line'> 23</span> * @augments bigshot.DataLoader
+<span class='line'> 24</span> */</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="NAME">bigshot.DefaultDataLoader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">maxRetries</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">crossOrigin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="NAME">this.maxRetries</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxRetries</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">this.crossOrigin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crossOrigin</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.maxRetries</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.maxRetries</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 33</span>
+<span class='line'> 34</span> </span><span class="NAME">bigshot.DefaultDataLoader.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">browser</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">loadImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"img"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">tile.retries</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.crossOrigin</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">tile.crossOrigin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crossOrigin</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"load"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"error"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">tile.retries</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile.retries</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">that.maxRetries</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">tile.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tile.retries</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">tile.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">loadXml</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">synchronous</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tries</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">tries</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">this.maxRetries</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">tries</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.createXMLHttpRequest</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">req.open</span><span class="PUNC">(</span><span class="STRN">"GET"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">req.send</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">req.status</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xml</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.responseXML</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">xml</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">xml</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xml</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tries</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">that.maxRetries</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">onloaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 90</span>
+<span class='line'> 91</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.DefaultDataLoader"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.DataLoader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__Event.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__Event.js.html
new file mode 100644
index 00000000..ed46bcba
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__Event.js.html
@@ -0,0 +1,100 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates an event.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Base class for events. The interface is supposed to be as similar to
+<span class='line'> 21</span> * standard DOM events as possible.
+<span class='line'> 22</span> * @param {Object} data a data object whose fields will be used to set the
+<span class='line'> 23</span> * corresponding fields of the event object.
+<span class='line'> 24</span> */</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="NAME">bigshot.Event</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 26</span>
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 28</span> * Indicates whether the event bubbles.
+<span class='line'> 29</span> * @default false
+<span class='line'> 30</span> * @type boolean
+<span class='line'> 31</span> */</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.bubbles</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 35</span> * Indicates whether the event is cancelable.
+<span class='line'> 36</span> * @default false
+<span class='line'> 37</span> * @type boolean
+<span class='line'> 38</span> */</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.cancelable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 42</span> * The current target of the event
+<span class='line'> 43</span> * @default null
+<span class='line'> 44</span> */</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">this.currentTarget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 48</span> * Set if the preventDefault method has been called.
+<span class='line'> 49</span> * @default false
+<span class='line'> 50</span> * @type boolean
+<span class='line'> 51</span> */</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">this.defaultPrevented</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span>
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 55</span> * The target to which the event is dispatched.
+<span class='line'> 56</span> * @default null
+<span class='line'> 57</span> */</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 61</span> * The time the event was created, in milliseconds since the epoch.
+<span class='line'> 62</span> * @default the current time, as given by &lt;code>new Date ().getTime ()&lt;/code>
+<span class='line'> 63</span> * @type number
+<span class='line'> 64</span> */</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">this.timeStamp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 68</span> * The event type.
+<span class='line'> 69</span> * @default null
+<span class='line'> 70</span> * @type String
+<span class='line'> 71</span> */</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 75</span> * Flag indicating origin of event.
+<span class='line'> 76</span> * @default false
+<span class='line'> 77</span> * @type boolean
+<span class='line'> 78</span> */</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.isTrusted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 85</span>
+<span class='line'> 86</span> </span><span class="NAME">bigshot.Event.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 88</span> * Prevents default handling of the event.
+<span class='line'> 89</span> */</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">preventDefault</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">this.defaultPrevented</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="PUNC">}</span><span class="PUNC">;</span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__EventDispatcher.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__EventDispatcher.js.html
new file mode 100644
index 00000000..46678577
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__EventDispatcher.js.html
@@ -0,0 +1,91 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates an event dispatcher.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Base class for objects that dispatch events.
+<span class='line'> 21</span> */</span><span class="WHIT">
+<span class='line'> 22</span> </span><span class="NAME">bigshot.EventDispatcher</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 24</span> * The event listeners. Each key-value pair in the map is
+<span class='line'> 25</span> * an event name and an &lt;code>Array&lt;/code> of listeners.
+<span class='line'> 26</span> *
+<span class='line'> 27</span> * @type Object
+<span class='line'> 28</span> */</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.eventListeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 31</span>
+<span class='line'> 32</span> </span><span class="NAME">bigshot.EventDispatcher.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 34</span> * Adds an event listener to the specified event.
+<span class='line'> 35</span> *
+<span class='line'> 36</span> * @example
+<span class='line'> 37</span> * image.addEventListener ("click", function (event) { ... });
+<span class='line'> 38</span> *
+<span class='line'> 39</span> * @param {String} eventName the name of the event to add a listener for
+<span class='line'> 40</span> * @param {Function} handler function that is invoked with an event object
+<span class='line'> 41</span> * when the event is fired
+<span class='line'> 42</span> */</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">addEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">eventName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">handler</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.eventListeners</span><span class="PUNC">[</span><span class="NAME">eventName</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">this.eventListeners</span><span class="PUNC">[</span><span class="NAME">eventName</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">this.eventListeners</span><span class="PUNC">[</span><span class="NAME">eventName</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">handler</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 51</span> * Removes an event listener.
+<span class='line'> 52</span> * @param {String} eventName the name of the event to remove a listener for
+<span class='line'> 53</span> * @param {Function} handler the handler to remove
+<span class='line'> 54</span> */</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">removeEventListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">eventName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">handler</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.eventListeners</span><span class="PUNC">[</span><span class="NAME">eventName</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">el</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.eventListeners</span><span class="PUNC">[</span><span class="NAME">eventName</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">el.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">el</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">listener</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">el.splice</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">el.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.eventListeners</span><span class="PUNC">[</span><span class="NAME">eventName</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 71</span> * Fires an event.
+<span class='line'> 72</span> *
+<span class='line'> 73</span> * @param {String} eventName the name of the event to fire
+<span class='line'> 74</span> * @param {bigshot.Event} eventObject the event object to pass to the handlers
+<span class='line'> 75</span> */</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">fireEvent</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">eventName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eventObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.eventListeners</span><span class="PUNC">[</span><span class="NAME">eventName</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">el</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.eventListeners</span><span class="PUNC">[</span><span class="NAME">eventName</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">el.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="NAME">el</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">eventObject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="PUNC">}</span><span class="PUNC">;</span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__FileSystem.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__FileSystem.js.html
new file mode 100644
index 00000000..5942c5be
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__FileSystem.js.html
@@ -0,0 +1,93 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Abstract filesystem definition.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Abstract filesystem definition.
+<span class='line'> 21</span> */</span><span class="WHIT">
+<span class='line'> 22</span> </span><span class="NAME">bigshot.FileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 24</span>
+<span class='line'> 25</span> </span><span class="NAME">bigshot.FileSystem.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 27</span> * Returns the URL filename for the given filesystem entry.
+<span class='line'> 28</span> *
+<span class='line'> 29</span> * @param {String} name the entry name
+<span class='line'> 30</span> */</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">getFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 34</span> * Returns the entry filename for the given tile.
+<span class='line'> 35</span> *
+<span class='line'> 36</span> * @param {int} tileX the column of the tile
+<span class='line'> 37</span> * @param {int} tileY the row of the tile
+<span class='line'> 38</span> * @param {int} zoomLevel the zoom level
+<span class='line'> 39</span> */</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">getImageFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 43</span> * Sets an optional prefix that is prepended, along with a forward
+<span class='line'> 44</span> * slash ("/"), to all names.
+<span class='line'> 45</span> *
+<span class='line'> 46</span> * @param {String} prefix the prefix
+<span class='line'> 47</span> */</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">setPrefix</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 51</span> * Returns an image descriptor object from the descriptor file.
+<span class='line'> 52</span> *
+<span class='line'> 53</span> * @return a descriptor object
+<span class='line'> 54</span> */</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">getDescriptor</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 58</span> * Returns the poster URL filename. For Bigshot images this is
+<span class='line'> 59</span> * typically the URL corresponding to the entry "poster.jpg",
+<span class='line'> 60</span> * but for other filesystems it can be different.
+<span class='line'> 61</span> */</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">getPosterFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span>
+<span class='line'> 65</span> </span><span class="COMM">/**
+<span class='line'> 66</span> * Sets up a filesystem instance in the given parameters object, if none exist.
+<span class='line'> 67</span> * If the {@link bigshot.ImageParameters#fileSystem} member isn't set, the
+<span class='line'> 68</span> * {@link bigshot.ImageParameters#fileSystemType} member is used to create a new
+<span class='line'> 69</span> * {@link bigshot.FileSystem} instance and set it.
+<span class='line'> 70</span> *
+<span class='line'> 71</span> * @param {bigshot.ImageParameters or bigshot.VRPanoramaParameters or bigshot.ImageCarouselPanoramaParameters} parameters the parameters object to populate
+<span class='line'> 72</span> */</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="NAME">bigshot.setupFileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">parameters.fileSystem</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters.fileSystemType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"archive"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">parameters.fileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.ArchiveFileSystem</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters.fileSystemType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"dzi"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="NAME">parameters.fileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.DeepZoomImageFileSystem</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters.fileSystemType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"simple"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="NAME">parameters.fileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.SimpleFileSystem</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="NAME">parameters.fileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.FolderFileSystem</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 86</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__FolderFileSystem.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__FolderFileSystem.js.html
new file mode 100644
index 00000000..d103107f
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__FolderFileSystem.js.html
@@ -0,0 +1,90 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new instance of a folder-based filesystem adapter.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @augments bigshot.FileSystem
+<span class='line'> 21</span> * @class Folder-based filesystem.
+<span class='line'> 22</span> * @param {bigshot.ImageParameters|bigshot.VRPanoramaParameters} parameters the associated image parameters
+<span class='line'> 23</span> * @constructor
+<span class='line'> 24</span> */</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="NAME">bigshot.FolderFileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 30</span>
+<span class='line'> 31</span>
+<span class='line'> 32</span> </span><span class="NAME">bigshot.FolderFileSystem.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">getDescriptor</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">this.browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.createXMLHttpRequest</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">req.open</span><span class="PUNC">(</span><span class="STRN">"GET"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"descriptor"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">req.send</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">req.status</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">substrings</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.responseText.split</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">":"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">substrings.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"suffix"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="PUNC">[</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="PUNC">[</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">substrings</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">descriptor.suffix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">descriptor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Unable to find descriptor."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">getPosterFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"poster"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">setPrefix</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">getPrefix</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="NAME">getFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getPrefix</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">getImageFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span>
+<span class='line'> 82</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.FolderFileSystem"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.FileSystem</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 83</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__FullScreen.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__FullScreen.js.html
new file mode 100644
index 00000000..a9b1605a
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__FullScreen.js.html
@@ -0,0 +1,306 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new full-screen handler for an element.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class A utility class for making an element "full screen", or as close to that
+<span class='line'> 21</span> * as browser security allows. If the browser supports the &lt;code>requestFullScreen&lt;/code>
+<span class='line'> 22</span> * API - as standard or as &lt;code>moz&lt;/code>- or &lt;code>webkit&lt;/code>- extensions,
+<span class='line'> 23</span> * this will be used.
+<span class='line'> 24</span> *
+<span class='line'> 25</span> * @param {HTMLElement} container the element that is to be made full screen
+<span class='line'> 26</span> */</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="NAME">bigshot.FullScreen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.isFullScreen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">this.savedBodyStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.savedParent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">this.savedSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">this.expanderDiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.restoreSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.onCloseHandlers</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.onResizeHandlers</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">findFunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">el</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">list.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">el</span><span class="PUNC">[</span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.requestFullScreen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">findFunc</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"requestFullScreen"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"mozRequestFullScreen"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"webkitRequestFullScreen"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">this.cancelFullScreen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">findFunc</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"cancelFullScreen"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"mozCancelFullScreen"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"webkitCancelFullScreen"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">this.restoreSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.requestFullScreen</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 54</span>
+<span class='line'> 55</span> </span><span class="NAME">bigshot.FullScreen.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">browser</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">getRootElement</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.div</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 63</span> * Adds a function that will run when exiting full screen mode.
+<span class='line'> 64</span> *
+<span class='line'> 65</span> * @param {function()} onClose the function to call
+<span class='line'> 66</span> */</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">addOnClose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onClose</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">this.onCloseHandlers.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onClose</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 72</span> * Notifies all &lt;code>onClose&lt;/code> handlers.
+<span class='line'> 73</span> *
+<span class='line'> 74</span> * @private
+<span class='line'> 75</span> */</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">onClose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.onCloseHandlers.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="NAME">this.onCloseHandlers</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 83</span> * Adds a function that will run when the element is resized.
+<span class='line'> 84</span> *
+<span class='line'> 85</span> * @param {function()} onResize the function to call
+<span class='line'> 86</span> */</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">addOnResize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onResize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">this.onResizeHandlers.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onResize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 92</span> * Notifies all resize handlers.
+<span class='line'> 93</span> *
+<span class='line'> 94</span> * @private
+<span class='line'> 95</span> */</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="NAME">onResize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.onResizeHandlers.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">this.onResizeHandlers</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>103</span> * Begins full screen mode.
+<span class='line'>104</span> */</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">open</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="NAME">this.isFullScreen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.requestFullScreen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.openRequestFullScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.openCompat</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>116</span> * Makes the element really full screen using the &lt;code>requestFullScreen&lt;/code>
+<span class='line'>117</span> * API.
+<span class='line'>118</span> *
+<span class='line'>119</span> * @private
+<span class='line'>120</span> */</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">openRequestFullScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="NAME">this.savedSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"100%"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"100%"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.requestFullScreen</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"mozRequestFullScreen"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>134</span> * @private
+<span class='line'>135</span> */</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">errFun</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="NAME">that.container.removeEventListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"mozfullscreenerror"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">errFun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="NAME">that.isFullScreen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="NAME">that.exitFullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="NAME">that.onClose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="NAME">this.container.addEventListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"mozfullscreenerror"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">errFun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>145</span> * @private
+<span class='line'>146</span> */</span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">changeFun</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document.mozFullScreenElement</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">that.container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="NAME">document.removeEventListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"mozfullscreenchange"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">changeFun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="NAME">that.exitFullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="NAME">that.onResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">document.addEventListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"mozfullscreenchange"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">changeFun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>158</span> * @private
+<span class='line'>159</span> */</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">changeFun</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document.webkitCurrentFullScreenElement</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">that.container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">that.container.removeEventListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"webkitfullscreenchange"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">changeFun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="NAME">that.exitFullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="NAME">that.onResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>167</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>168</span> </span><span class="WHIT"> </span><span class="NAME">this.container.addEventListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"webkitfullscreenchange"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">changeFun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>169</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="NAME">this.exitFullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.isFullScreen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="NAME">that.isFullScreen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>174</span> </span><span class="WHIT"> </span><span class="NAME">document</span><span class="PUNC">[</span><span class="NAME">that.cancelFullScreen</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.restoreSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="NAME">that.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.savedSize.width</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>177</span> </span><span class="WHIT"> </span><span class="NAME">that.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.savedSize.height</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>178</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="NAME">that.onResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="NAME">that.onClose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>183</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">[</span><span class="NAME">this.requestFullScreen</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>184</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>185</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>186</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>187</span> * Makes the element "full screen" in older browsers by covering the browser's client area.
+<span class='line'>188</span> *
+<span class='line'>189</span> * @private
+<span class='line'>190</span> */</span><span class="WHIT">
+<span class='line'>191</span> </span><span class="WHIT"> </span><span class="NAME">openCompat</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="NAME">this.savedParent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.parentNode</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>193</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>194</span> </span><span class="WHIT"> </span><span class="NAME">this.savedSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>195</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>196</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT">
+<span class='line'>197</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>198</span> </span><span class="WHIT"> </span><span class="NAME">this.savedBodyStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.body.style.cssText</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>199</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>200</span> </span><span class="WHIT"> </span><span class="NAME">document.body.style.overflow</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"hidden"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>201</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>202</span> </span><span class="WHIT"> </span><span class="NAME">this.expanderDiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>203</span> </span><span class="WHIT"> </span><span class="NAME">this.expanderDiv.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>204</span> </span><span class="WHIT"> </span><span class="NAME">this.expanderDiv.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>205</span> </span><span class="WHIT"> </span><span class="NAME">this.expanderDiv.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">this.expanderDiv.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window.innerWidth</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">document.documentElement.clientWidth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>207</span> </span><span class="WHIT"> </span><span class="NAME">this.expanderDiv.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window.innerHeight</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">document.documentElement.clientHeight</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>208</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>209</span> </span><span class="WHIT"> </span><span class="NAME">document.body.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.expanderDiv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>210</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>211</span> </span><span class="WHIT"> </span><span class="NAME">this.div</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>212</span> </span><span class="WHIT"> </span><span class="NAME">this.div.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"fixed"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>213</span> </span><span class="WHIT"> </span><span class="NAME">this.div.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.pageYOffset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>214</span> </span><span class="WHIT"> </span><span class="NAME">this.div.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.pageXOffset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>215</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>216</span> </span><span class="WHIT"> </span><span class="NAME">this.div.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>217</span> </span><span class="WHIT"> </span><span class="NAME">this.div.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>218</span> </span><span class="WHIT"> </span><span class="NAME">this.div.style.zIndex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">9998</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>219</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>220</span> </span><span class="WHIT"> </span><span class="NAME">this.div.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>221</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>222</span> </span><span class="WHIT"> </span><span class="COMM">//this.container.style.width = window.innerWidth + "px";</span><span class="WHIT">
+<span class='line'>223</span> </span><span class="WHIT"> </span><span class="COMM">//this.container.style.height = window.innerHeight + "px";</span><span class="WHIT">
+<span class='line'>224</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>225</span> </span><span class="WHIT"> </span><span class="NAME">document.body.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.div</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>226</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>227</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>228</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">resizeHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>229</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>230</span> </span><span class="WHIT"> </span><span class="NAME">that.div.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>231</span> </span><span class="WHIT"> </span><span class="NAME">that.div.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>232</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>233</span> </span><span class="WHIT"> </span><span class="NAME">that.onResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>234</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>235</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>236</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>237</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>238</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>239</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rotationHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>240</span> </span><span class="WHIT"> </span><span class="NAME">that.expanderDiv.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window.innerWidth</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">document.documentElement.clientWidth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>241</span> </span><span class="WHIT"> </span><span class="NAME">that.expanderDiv.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window.innerHeight</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">document.documentElement.clientHeight</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>242</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>243</span> </span><span class="WHIT"> </span><span class="NAME">that.div.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.pageYOffset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">that.div.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.pageXOffset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>245</span> </span><span class="WHIT"> </span><span class="NAME">that.div.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>246</span> </span><span class="WHIT"> </span><span class="NAME">that.div.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>248</span> </span><span class="WHIT"> </span><span class="NAME">that.onResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>249</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>250</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>251</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>252</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>253</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">escHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>254</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e.keyCode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">27</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>255</span> </span><span class="WHIT"> </span><span class="NAME">that.exitFullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>256</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>257</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>258</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>259</span> </span><span class="WHIT"> </span><span class="NAME">this.exitFullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>260</span> </span><span class="WHIT"> </span><span class="NAME">that.isFullScreen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>261</span> </span><span class="WHIT"> </span><span class="NAME">that.browser.unregisterListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keydown"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">escHandler</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>262</span> </span><span class="WHIT"> </span><span class="NAME">that.browser.unregisterListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"resize"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">resizeHandler</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>263</span> </span><span class="WHIT"> </span><span class="NAME">that.browser.unregisterListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document.body</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"orientationchange"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rotationHandler</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>264</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.restoreSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>265</span> </span><span class="WHIT"> </span><span class="NAME">that.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.savedSize.width</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>266</span> </span><span class="WHIT"> </span><span class="NAME">that.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.savedSize.height</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>267</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>268</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>269</span> </span><span class="WHIT"> </span><span class="NAME">document.body.style.cssText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.savedBodyStyle</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>270</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>271</span> </span><span class="WHIT"> </span><span class="NAME">that.savedParent.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>272</span> </span><span class="WHIT"> </span><span class="NAME">document.body.removeChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.div</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>273</span> </span><span class="WHIT"> </span><span class="NAME">document.body.removeChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.expanderDiv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>274</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>275</span> </span><span class="WHIT"> </span><span class="NAME">that.onResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>276</span> </span><span class="WHIT"> </span><span class="NAME">that.onClose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>277</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>278</span> </span><span class="WHIT"> </span><span class="NAME">that.onResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>279</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>280</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>281</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>282</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keydown"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">escHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>283</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"resize"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">resizeHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>284</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document.body</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"orientationchange"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rotationHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>285</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NAME">this.onResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>287</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>288</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.exitFullScreenHandler</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>289</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>290</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>291</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>292</span> * Ends full screen mode.
+<span class='line'>293</span> */</span><span class="WHIT">
+<span class='line'>294</span> </span><span class="WHIT"> </span><span class="NAME">close</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>295</span> </span><span class="WHIT"> </span><span class="NAME">this.exitFullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>296</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>297</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>298</span>
+<span class='line'>299</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__HTMLDivElementLayer.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__HTMLDivElementLayer.js.html
new file mode 100644
index 00000000..80b6aab0
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__HTMLDivElementLayer.js.html
@@ -0,0 +1,106 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new HTML element layer. The layer must be added to the image using
+<span class='line'> 19</span> * {@link bigshot.ImageBase#addLayer}.
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * @class A layer consisting of a single HTML element that is moved and scaled to cover
+<span class='line'> 22</span> * the layer.
+<span class='line'> 23</span> * @example
+<span class='line'> 24</span> * var image = new bigshot.Image (...);
+<span class='line'> 25</span> * image.addLayer (
+<span class='line'> 26</span> * new bigshot.HTMLElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height)
+<span class='line'> 27</span> * );
+<span class='line'> 28</span> * @param {bigshot.ImageBase} image the image this hotspot layer will be part of
+<span class='line'> 29</span> * @param {HTMLElement} element the element to present in this layer
+<span class='line'> 30</span> * @param {int} width the width, in image pixels (display size at zoom level 0), of the HTML element
+<span class='line'> 31</span> * @param {int} height the height, in image pixels (display size at zoom level 0), of the HTML element
+<span class='line'> 32</span> * @augments bigshot.Layer
+<span class='line'> 33</span> */</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="NAME">bigshot.HTMLDivElementLayer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">image</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">wrapX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">wrapY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.wrapX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">wrapX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">this.wrapY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">wrapY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.hotspots</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image.createLayerContainer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">this.parentContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image.getContainer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="NAME">this.element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">this.parentContainer.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">this.resize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 48</span>
+<span class='line'> 49</span> </span><span class="NAME">bigshot.HTMLDivElementLayer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">getContainer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.image.getZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tx0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">ty0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">imW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">imH</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.backgroundSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">imW</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">imH</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bposX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bposY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.wrapY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parentContainer.clientHeight</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">bposY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">imH</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.wrapX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parentContainer.clientWidth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="NAME">bposX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">imW</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.backgroundPosition</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bposX</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">bposY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">setMaxTiles</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mtx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mty</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 97</span>
+<span class='line'> 98</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.HTMLDivElementLayer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.Layer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 99</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__HTMLElementLayer.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__HTMLElementLayer.js.html
new file mode 100644
index 00000000..61c3d378
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__HTMLElementLayer.js.html
@@ -0,0 +1,81 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new HTML element layer. The layer must be added to the image using
+<span class='line'> 19</span> * {@link bigshot.ImageBase#addLayer}.
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * @class A layer consisting of a single HTML element that is moved and scaled to cover
+<span class='line'> 22</span> * the layer.
+<span class='line'> 23</span> * @example
+<span class='line'> 24</span> * var image = new bigshot.Image (...);
+<span class='line'> 25</span> * image.addLayer (
+<span class='line'> 26</span> * new bigshot.HTMLElementLayer (this, this.imgElement, this.parameters.width, this.parameters.height)
+<span class='line'> 27</span> * );
+<span class='line'> 28</span> * @param {bigshot.ImageBase} image the image this hotspot layer will be part of
+<span class='line'> 29</span> * @param {HTMLElement} element the element to present in this layer
+<span class='line'> 30</span> * @param {int} width the width, in image pixels (display size at zoom level 0), of the HTML element
+<span class='line'> 31</span> * @param {int} height the height, in image pixels (display size at zoom level 0), of the HTML element
+<span class='line'> 32</span> * @augments bigshot.Layer
+<span class='line'> 33</span> */</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="NAME">bigshot.HTMLElementLayer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">image</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.hotspots</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">this.browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image.createLayerContainer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.parentContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image.getContainer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">this.parentContainer.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">height</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">this.resize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 46</span>
+<span class='line'> 47</span> </span><span class="NAME">bigshot.HTMLElementLayer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">getContainer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.image.getZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tx0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">ty0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">setMaxTiles</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mtx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mty</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 72</span>
+<span class='line'> 73</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.HTMLElementLayer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.Layer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__Hotspot.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__Hotspot.js.html
new file mode 100644
index 00000000..62aca052
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__Hotspot.js.html
@@ -0,0 +1,85 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new hotspot instance.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Base class for hotspots in a {@link bigshot.HotspotLayer}. See {@link bigshot.HotspotLayer} for
+<span class='line'> 21</span> * examples.
+<span class='line'> 22</span> *
+<span class='line'> 23</span> * @param {number} x x-coordinate of the top-left corner, given in full image pixels
+<span class='line'> 24</span> * @param {number} y y-coordinate of the top-left corner, given in full image pixels
+<span class='line'> 25</span> * @param {number} w width of the hotspot, given in full image pixels
+<span class='line'> 26</span> * @param {number} h height of the hotspot, given in full image pixels
+<span class='line'> 27</span> * @see bigshot.HotspotLayer
+<span class='line'> 28</span> * @see bigshot.LabeledHotspot
+<span class='line'> 29</span> * @see bigshot.LinkHotspot
+<span class='line'> 30</span> * @constructor
+<span class='line'> 31</span> */</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="NAME">bigshot.Hotspot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">element.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">element.style.overflow</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"visible"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 43</span>
+<span class='line'> 44</span> </span><span class="NAME">bigshot.Hotspot.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">browser</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 49</span> * Lays out the hotspot in the viewport.
+<span class='line'> 50</span> *
+<span class='line'> 51</span> * @name bigshot.Hotspot#layout
+<span class='line'> 52</span> * @param x0 x-coordinate of top-left corner of the full image in css pixels
+<span class='line'> 53</span> * @param y0 y-coordinate of top-left corner of the full image in css pixels
+<span class='line'> 54</span> * @param zoomFactor the zoom factor.
+<span class='line'> 55</span> * @function
+<span class='line'> 56</span> */</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sh</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 69</span> * Returns the HTMLDivElement used to show the hotspot.
+<span class='line'> 70</span> * Clients can access this element in order to style it.
+<span class='line'> 71</span> *
+<span class='line'> 72</span> * @type HTMLDivElement
+<span class='line'> 73</span> */</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="NAME">getElement</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.element</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 78</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__HotspotLayer.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__HotspotLayer.js.html
new file mode 100644
index 00000000..16ac95a1
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__HotspotLayer.js.html
@@ -0,0 +1,92 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new hotspot layer. The layer must be added to the image using
+<span class='line'> 19</span> * {@link bigshot.ImageBase#addLayer}.
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * @class A hotspot layer.
+<span class='line'> 22</span> * @example
+<span class='line'> 23</span> * var image = new bigshot.Image (...);
+<span class='line'> 24</span> * var hotspotLayer = new bigshot.HotspotLayer (image);
+<span class='line'> 25</span> * var hotspot = new bigshot.LinkHotspot (100, 100, 200, 100,
+<span class='line'> 26</span> * "Bigshot on Google Code",
+<span class='line'> 27</span> * "http://code.google.com/p/bigshot/");
+<span class='line'> 28</span> *
+<span class='line'> 29</span> * // Style the hotspot a bit
+<span class='line'> 30</span> * hotspot.getElement ().className = "hotspot";
+<span class='line'> 31</span> * hotspot.getLabel ().className = "label";
+<span class='line'> 32</span> *
+<span class='line'> 33</span> * hotspotLayer.addHotspot (hotspot);
+<span class='line'> 34</span> *
+<span class='line'> 35</span> * image.addLayer (hotspotLayer);
+<span class='line'> 36</span> *
+<span class='line'> 37</span> * @param {bigshot.ImageBase} image the image this hotspot layer will be part of
+<span class='line'> 38</span> * @augments bigshot.Layer
+<span class='line'> 39</span> * @constructor
+<span class='line'> 40</span> */</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="NAME">bigshot.HotspotLayer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">image</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="NAME">this.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">this.hotspots</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">this.browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image.createLayerContainer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">this.parentContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image.getContainer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">this.resize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 49</span>
+<span class='line'> 50</span> </span><span class="NAME">bigshot.HotspotLayer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">getContainer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.image.getZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tx0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">ty0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.hotspots.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">this.hotspots</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">setMaxTiles</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mtx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mty</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 74</span> * Adds a hotspot to the layer.
+<span class='line'> 75</span> *
+<span class='line'> 76</span> * @param {bigshot.Hotspot} hotspot the hotspot to add.
+<span class='line'> 77</span> */</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="NAME">addHotspot</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hotspot</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.container.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hotspot.getElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="NAME">this.hotspots.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hotspot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 83</span>
+<span class='line'> 84</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.HotspotLayer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.Layer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__Image.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__Image.js.html
new file mode 100644
index 00000000..860bd3dd
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__Image.js.html
@@ -0,0 +1,100 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span>
+<span class='line'> 18</span> </span><span class="COMM">/**
+<span class='line'> 19</span> * Creates a new tiled image viewer. (Note: See {@link bigshot.ImageBase#dispose} for important information.)
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * @example
+<span class='line'> 22</span> * var bsi = new bigshot.Image (
+<span class='line'> 23</span> * new bigshot.ImageParameters ({
+<span class='line'> 24</span> * basePath : "/bigshot.php?file=myshot.bigshot",
+<span class='line'> 25</span> * fileSystemType : "archive",
+<span class='line'> 26</span> * container : document.getElementById ("bigshot_div")
+<span class='line'> 27</span> * }));
+<span class='line'> 28</span> *
+<span class='line'> 29</span> * @param {bigshot.ImageParameters} parameters the image parameters. Required fields are: &lt;code>basePath&lt;/code> and &lt;code>container&lt;/code>.
+<span class='line'> 30</span> * If you intend to use the archive filesystem, you need to set the &lt;code>fileSystemType&lt;/code> to &lt;code>"archive"&lt;/code>
+<span class='line'> 31</span> * as well.
+<span class='line'> 32</span> * @see bigshot.ImageBase#dispose
+<span class='line'> 33</span> * @class A tiled, zoomable image viewer.
+<span class='line'> 34</span> *
+<span class='line'> 35</span> * &lt;h3 id="creating-a-wrapping-image">Creating a Wrapping Image&lt;/h3>
+<span class='line'> 36</span> *
+<span class='line'> 37</span> * &lt;p>If you have set the wrapX or wrapY parameters in the {@link bigshot.ImageParameters}, the
+<span class='line'> 38</span> * image must be an integer multiple of the tile size at the desired minimum zoom level, otherwise
+<span class='line'> 39</span> * there will be a gap at the wrap point:
+<span class='line'> 40</span> *
+<span class='line'> 41</span> * &lt;p>The way to figure out the proper input size is this:
+<span class='line'> 42</span> *
+<span class='line'> 43</span> * &lt;ol>
+<span class='line'> 44</span> * &lt;li>&lt;p>Decide on a tile size and call this &lt;i>tileSize&lt;/i>.&lt;/p>&lt;/li>
+<span class='line'> 45</span> * &lt;li>&lt;p>Decide on a minimum integer zoom level, and call this &lt;i>minZoom&lt;/i>.&lt;/p>&lt;/li>
+<span class='line'> 46</span> * &lt;li>&lt;p>Compute &lt;i>tileSize * 2&lt;sup>-minZoom&lt;/sup>&lt;/i>, call this &lt;i>S&lt;/i>.&lt;/p>&lt;/li>
+<span class='line'> 47</span> * &lt;li>&lt;p>The source image size along the wrapped axis must be evenly divisible by &lt;i>S&lt;/i>.&lt;/p>&lt;/li>
+<span class='line'> 48</span> * &lt;/ol>
+<span class='line'> 49</span> *
+<span class='line'> 50</span> * &lt;p>An example:&lt;/p>
+<span class='line'> 51</span> *
+<span class='line'> 52</span> * &lt;ol>
+<span class='line'> 53</span> * &lt;li>&lt;p>I have an image that is 23148x3242 pixels.&lt;/p>&lt;/li>
+<span class='line'> 54</span> * &lt;li>&lt;p>I chose 256x256 pixel tiles: &lt;i>tileSize = 256&lt;/i>.&lt;/p>&lt;/li>
+<span class='line'> 55</span> * &lt;li>&lt;p>When displaying the image, I want the user to be able to zoom out so that the
+<span class='line'> 56</span> * whole image is less than or equal to 600 pixels tall. Since the image is 3242 pixels
+<span class='line'> 57</span> * tall originally, I will need a &lt;i>minZoom&lt;/i> of -3. A &lt;i>minZoom&lt;/i> of -2 would only let me
+<span class='line'> 58</span> * zoom out to 1/4 (2&lt;sup>-2&lt;/sup>), or an image that is 810 pixels tall. A &lt;i>minZoom&lt;/i> of -3, however lets me
+<span class='line'> 59</span> * zoom out to 1/8 (2&lt;sup>-3&lt;/sup>), or an image that is 405 pixels tall. Thus: &lt;i>minZoom = -3&lt;/i>&lt;/p>&lt;/li>
+<span class='line'> 60</span> * &lt;li>&lt;p>Computing &lt;i>S&lt;/i> gives: &lt;i>S = 256 * 2&lt;sup>3&lt;/sup> = 256 * 8 = 2048&lt;/i>&lt;/p>&lt;/li>
+<span class='line'> 61</span> * &lt;li>&lt;p>I want it to wrap along the X axis. Therefore I may have to adjust the width,
+<span class='line'> 62</span> * currently 23148 pixels.&lt;/p>&lt;/li>
+<span class='line'> 63</span> * &lt;li>&lt;p>Rounding 23148 down to the nearest multiple of 2048 gives 22528. (23148 divided by 2048 is 11.3, and 11 times 2048 is 22528.)&lt;/p>&lt;/li>
+<span class='line'> 64</span> * &lt;li>&lt;p>I will shrink my source image to be 22528 pixels wide before building the image pyramid,
+<span class='line'> 65</span> * and I will set the &lt;code>minZoom&lt;/code> parameter to -3 in the {@link bigshot.ImageParameters} when creating
+<span class='line'> 66</span> * the image. (I will also set &lt;code>wrapX&lt;/code> to &lt;code>true&lt;/code>.)&lt;/p>&lt;/li>
+<span class='line'> 67</span> * &lt;/ol>
+<span class='line'> 68</span> *
+<span class='line'> 69</span> * @augments bigshot.ImageBase
+<span class='line'> 70</span> */</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="NAME">bigshot.Image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.setupFileSystem</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">parameters.merge</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters.fileSystem.getDescriptor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.ImageBase.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 77</span>
+<span class='line'> 78</span> </span><span class="NAME">bigshot.Image.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">setupLayers</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="NAME">this.thisTileCache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.ImageTileCache</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="NAME">that.layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="NAME">this.addLayer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.TileLayer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.thisTileCache</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 90</span>
+<span class='line'> 91</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.Image</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.ImageBase</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span>
+<span class='line'> 93</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageBase.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageBase.js.html
new file mode 100644
index 00000000..aff91593
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageBase.js.html
@@ -0,0 +1,1323 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span>
+<span class='line'> 18</span> </span><span class="COMM">/**
+<span class='line'> 19</span> * Sets up base image functionality.
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * @param {bigshot.ImageParameters} parameters the image parameters
+<span class='line'> 22</span> * @class Base class for image viewers.
+<span class='line'> 23</span> * @extends bigshot.EventDispatcher
+<span class='line'> 24</span> */</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="NAME">bigshot.ImageBase</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="COMM">// Base class init</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.EventDispatcher.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.flying</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.height</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.width</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.height</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.minZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.minZoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.maxZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.maxZoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.tileSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.overlap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">this.imageTileCache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">this.dragged</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">this.layers</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.currentGesture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">this.onresizeHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">that.onresize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 57</span> * Helper function to consume events.
+<span class='line'> 58</span> * @private
+<span class='line'> 59</span> */</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.preventDefault</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">event.preventDefault</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 68</span> * Helper function to translate touch events to mouse-like events.
+<span class='line'> 69</span> * @private
+<span class='line'> 70</span> */</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">translateEvent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.clientX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">event</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.changedTouches</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.changedTouches</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">clientY</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="NAME">changedTouches</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.changedTouches</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">this.setupLayers</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="NAME">this.resize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="STRN">"DOMMouseScroll"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="NAME">that.mouseWheel</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="STRN">"mousewheel"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="NAME">that.mouseWheel</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="STRN">"dblclick"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="NAME">that.mouseDoubleClick</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="STRN">"mousedown"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseDown</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="STRN">"gesturestart"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">that.gestureStart</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="STRN">"gesturechange"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="NAME">that.gestureChange</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="STRN">"gestureend"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="NAME">that.gestureEnd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="STRN">"touchstart"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseDown</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">translateEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="STRN">"mouseup"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseUp</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="STRN">"touchend"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseUp</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">translateEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="STRN">"mousemove"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseMove</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="STRN">"mouseout"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="COMM">//that.dragMouseUp (e);</span><span class="WHIT">
+<span class='line'>134</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="STRN">"touchmove"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseMove</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">translateEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="NAME">this.addEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'resize'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.onresizeHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="NAME">this.zoomToFit</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>145</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>146</span>
+<span class='line'>147</span> </span><span class="NAME">bigshot.ImageBase.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>149</span> * Browser helper and compatibility functions.
+<span class='line'>150</span> *
+<span class='line'>151</span> * @private
+<span class='line'>152</span> * @type bigshot.Browser
+<span class='line'>153</span> */</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="NAME">browser</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>157</span> * Adds all event listeners to the container object.
+<span class='line'>158</span> * @private
+<span class='line'>159</span> */</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="NAME">addEventListeners</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>167</span> * Removes all event listeners from the container object.
+<span class='line'>168</span> * @private
+<span class='line'>169</span> */</span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="NAME">removeEventListeners</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.unregisterListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>174</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>177</span> * Sets up the initial layers of the image. Override in subclass.
+<span class='line'>178</span> */</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="NAME">setupLayers</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>183</span> * Returns the base 2 logarithm of the maximum texture stretching, allowing for device pixel scaling.
+<span class='line'>184</span> * @type number
+<span class='line'>185</span> * @private
+<span class='line'>186</span> */</span><span class="WHIT">
+<span class='line'>187</span> </span><span class="WHIT"> </span><span class="NAME">getTextureStretch</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>188</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.maxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.browser.getDevicePixelScale</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.LN2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>189</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ts</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>190</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>191</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>193</span> * Constrains the x and y coordinates to allowed values
+<span class='line'>194</span> * @param {number} x the initial x coordinate
+<span class='line'>195</span> * @param {number} y the initial y coordinate
+<span class='line'>196</span> * @return {number} .x the constrained x coordinate
+<span class='line'>197</span> * @return {number} .y the constrained y coordinate
+<span class='line'>198</span> */</span><span class="WHIT">
+<span class='line'>199</span> </span><span class="WHIT"> </span><span class="NAME">clampXY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>200</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewportWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>201</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewportHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>202</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>203</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">realZoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>204</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>205</span> Constrain X and Y
+<span class='line'>206</span> */</span><span class="WHIT">
+<span class='line'>207</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewportWidthInImagePixels</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">viewportWidth</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">realZoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>208</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewportHeightInImagePixels</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">viewportHeight</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">realZoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>209</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>210</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">constrain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">viewportSizeInImagePixels</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">imageSizeInImagePixels</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>211</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">min</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">viewportSizeInImagePixels</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>212</span> </span><span class="WHIT"> </span><span class="NAME">min</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">imageSizeInImagePixels</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">min</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>213</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">min</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>214</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">min</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>215</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>216</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>217</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">max</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">imageSizeInImagePixels</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">viewportSizeInImagePixels</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>218</span> </span><span class="WHIT"> </span><span class="NAME">max</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">imageSizeInImagePixels</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">max</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>219</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">max</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>220</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">max</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>221</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>222</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>223</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>224</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>225</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>226</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>227</span> </span><span class="WHIT"> </span><span class="NAME">o.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">constrain</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">viewportWidthInImagePixels</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>228</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>229</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>230</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>231</span> </span><span class="WHIT"> </span><span class="NAME">o.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">constrain</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">viewportHeightInImagePixels</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>232</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>233</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>234</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>235</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>236</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>237</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>238</span> * Lays out all layers according to the current
+<span class='line'>239</span> * x, y and zoom values.
+<span class='line'>240</span> *
+<span class='line'>241</span> * @public
+<span class='line'>242</span> */</span><span class="WHIT">
+<span class='line'>243</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>244</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewportWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>245</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewportHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>246</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>247</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomWithStretch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.maxZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.zoom</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.getTextureStretch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.minZoom</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>248</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>249</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoomWithStretch</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>250</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>251</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>252</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clamped</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clampXY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>253</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>254</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.parameters.wrapY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>255</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clamped.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>256</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>257</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>258</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.parameters.wrapX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>259</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clamped.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>260</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>261</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>262</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tileWidthInRealPixels</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>263</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>264</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fractionalZoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>265</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tileDisplayWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fractionalZoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>266</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>267</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">widthInTiles</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">tileWidthInRealPixels</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>268</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">heightInTiles</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">tileWidthInRealPixels</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>269</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">centerInTilesX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">tileWidthInRealPixels</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>270</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">centerInTilesY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">tileWidthInRealPixels</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>271</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>272</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">topLeftInTilesX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">centerInTilesX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">viewportWidth</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">tileDisplayWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>273</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">topLeftInTilesY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">centerInTilesY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">viewportHeight</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">tileDisplayWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>274</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>275</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">topLeftTileX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">topLeftInTilesX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>276</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">topLeftTileY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">topLeftInTilesY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>277</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">topLeftTileXoffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">topLeftInTilesX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">topLeftTileX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tileDisplayWidth</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>278</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">topLeftTileYoffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.round</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">topLeftInTilesY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">topLeftTileY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tileDisplayWidth</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>279</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>280</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.layers.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>281</span> </span><span class="WHIT"> </span><span class="NAME">this.layers</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>282</span> </span><span class="WHIT"> </span><span class="NAME">zoomWithStretch</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>283</span> </span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">topLeftTileXoffset</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">tileDisplayWidth</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">topLeftTileYoffset</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">tileDisplayWidth</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>284</span> </span><span class="WHIT"> </span><span class="NAME">topLeftTileX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeftTileY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>285</span> </span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileDisplayWidth</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileDisplayWidth</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>287</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>288</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>289</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>290</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>291</span> * Resizes the layers of this image.
+<span class='line'>292</span> *
+<span class='line'>293</span> * @public
+<span class='line'>294</span> */</span><span class="WHIT">
+<span class='line'>295</span> </span><span class="WHIT"> </span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>296</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tilesW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>297</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tilesH</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>298</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.layers.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>299</span> </span><span class="WHIT"> </span><span class="NAME">this.layers</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tilesW</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tilesH</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>300</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>301</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>302</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>303</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>304</span> * Creates a HTML div container for a layer. This method
+<span class='line'>305</span> * is called by the layer's constructor to obtain a
+<span class='line'>306</span> * container.
+<span class='line'>307</span> *
+<span class='line'>308</span> * @public
+<span class='line'>309</span> * @type HTMLDivElement
+<span class='line'>310</span> */</span><span class="WHIT">
+<span class='line'>311</span> </span><span class="WHIT"> </span><span class="NAME">createLayerContainer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>312</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">layerContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>313</span> </span><span class="WHIT"> </span><span class="NAME">layerContainer.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>314</span> </span><span class="WHIT"> </span><span class="NAME">layerContainer.style.overflow</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"hidden"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>315</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">layerContainer</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>316</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>317</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>318</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>319</span> * Returns the div element used as viewport.
+<span class='line'>320</span> *
+<span class='line'>321</span> * @public
+<span class='line'>322</span> * @type HTMLDivElement
+<span class='line'>323</span> */</span><span class="WHIT">
+<span class='line'>324</span> </span><span class="WHIT"> </span><span class="NAME">getContainer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>325</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>326</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>327</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>328</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>329</span> * Adds a new layer to the image.
+<span class='line'>330</span> *
+<span class='line'>331</span> * @public
+<span class='line'>332</span> * @see bigshot.HotspotLayer for usage example
+<span class='line'>333</span> * @param {bigshot.Layer} layer the layer to add.
+<span class='line'>334</span> */</span><span class="WHIT">
+<span class='line'>335</span> </span><span class="WHIT"> </span><span class="NAME">addLayer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">layer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>336</span> </span><span class="WHIT"> </span><span class="NAME">this.container.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">layer.getContainer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>337</span> </span><span class="WHIT"> </span><span class="NAME">this.layers.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">layer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>338</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>339</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>340</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>341</span> * Clamps the zoom value to be between minZoom and maxZoom.
+<span class='line'>342</span> *
+<span class='line'>343</span> * @param {number} zoom the zoom value
+<span class='line'>344</span> * @type number
+<span class='line'>345</span> */</span><span class="WHIT">
+<span class='line'>346</span> </span><span class="WHIT"> </span><span class="NAME">clampZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>347</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.maxZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.minZoom</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>348</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>349</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>350</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>351</span> * Sets the current zoom value.
+<span class='line'>352</span> *
+<span class='line'>353</span> * @private
+<span class='line'>354</span> * @param {number} zoom the zoom value.
+<span class='line'>355</span> * @param {boolean} [layout] trigger a viewport update after setting. Defaults to &lt;code>false&lt;/code>.
+<span class='line'>356</span> */</span><span class="WHIT">
+<span class='line'>357</span> </span><span class="WHIT"> </span><span class="NAME">setZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">updateViewport</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>358</span> </span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clampZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>359</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.zoom</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.getTextureStretch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>360</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>361</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">maxTileX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>362</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">maxTileY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>363</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.layers.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>364</span> </span><span class="WHIT"> </span><span class="NAME">this.layers</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">setMaxTiles</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">maxTileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxTileY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>365</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>366</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">updateViewport</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>367</span> </span><span class="WHIT"> </span><span class="NAME">this.layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>368</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>369</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>370</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>371</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>372</span> * Sets the maximum zoom value. The maximum magnification (of the full-size image)
+<span class='line'>373</span> * is 2&lt;sup>maxZoom&lt;/sup>. Set to 0.0 to avoid pixelation.
+<span class='line'>374</span> *
+<span class='line'>375</span> * @public
+<span class='line'>376</span> * @param {number} maxZoom the maximum zoom value
+<span class='line'>377</span> */</span><span class="WHIT">
+<span class='line'>378</span> </span><span class="WHIT"> </span><span class="NAME">setMaxZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">maxZoom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>379</span> </span><span class="WHIT"> </span><span class="NAME">this.maxZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxZoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>380</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>381</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>382</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>383</span> * Gets the maximum zoom value. The maximum magnification (of the full-size image)
+<span class='line'>384</span> * is 2&lt;sup>maxZoom&lt;/sup>.
+<span class='line'>385</span> *
+<span class='line'>386</span> * @public
+<span class='line'>387</span> * @type number
+<span class='line'>388</span> */</span><span class="WHIT">
+<span class='line'>389</span> </span><span class="WHIT"> </span><span class="NAME">getMaxZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>390</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.maxZoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>391</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>392</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>393</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>394</span> * Sets the minimum zoom value. The minimum magnification (of the full-size image)
+<span class='line'>395</span> * is 2&lt;sup>minZoom&lt;/sup>, so a minZoom of &lt;code>-3&lt;/code> means that the smallest
+<span class='line'>396</span> * image shown will be one-eighth of the full-size image.
+<span class='line'>397</span> *
+<span class='line'>398</span> * @public
+<span class='line'>399</span> * @param {number} minZoom the minimum zoom value for this image
+<span class='line'>400</span> */</span><span class="WHIT">
+<span class='line'>401</span> </span><span class="WHIT"> </span><span class="NAME">setMinZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">minZoom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>402</span> </span><span class="WHIT"> </span><span class="NAME">this.minZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minZoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>403</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>404</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>405</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>406</span> * Gets the minimum zoom value. The minimum magnification (of the full-size image)
+<span class='line'>407</span> * is 2&lt;sup>minZoom&lt;/sup>, so a minZoom of &lt;code>-3&lt;/code> means that the smallest
+<span class='line'>408</span> * image shown will be one-eighth of the full-size image.
+<span class='line'>409</span> *
+<span class='line'>410</span> * @public
+<span class='line'>411</span> * @type number
+<span class='line'>412</span> */</span><span class="WHIT">
+<span class='line'>413</span> </span><span class="WHIT"> </span><span class="NAME">getMinZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>414</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.minZoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>415</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>416</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>417</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>418</span> * Adjusts a coordinate so that the center of zoom
+<span class='line'>419</span> * remains constant during zooming operations. The
+<span class='line'>420</span> * method is intended to be called twice, once for x
+<span class='line'>421</span> * and once for y. The &lt;code>current&lt;/code> and
+<span class='line'>422</span> * &lt;code>centerOfZoom&lt;/code> values will be the current
+<span class='line'>423</span> * and the center for the x and y, respectively.
+<span class='line'>424</span> *
+<span class='line'>425</span> * @example
+<span class='line'>426</span> * this.x = this.adjustCoordinateForZoom (this.x, zoomCenterX, oldZoom, newZoom);
+<span class='line'>427</span> * this.y = this.adjustCoordinateForZoom (this.y, zoomCenterY, oldZoom, newZoom);
+<span class='line'>428</span> *
+<span class='line'>429</span> * @param {number} current the current value of the coordinate
+<span class='line'>430</span> * @param {number} centerOfZoom the center of zoom along the coordinate axis
+<span class='line'>431</span> * @param {number} oldZoom the old zoom value
+<span class='line'>432</span> * @param {number} oldZoom the new zoom value
+<span class='line'>433</span> * @type number
+<span class='line'>434</span> * @returns the new value for the coordinate
+<span class='line'>435</span> */</span><span class="WHIT">
+<span class='line'>436</span> </span><span class="WHIT"> </span><span class="NAME">adjustCoordinateForZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">centerOfZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oldZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>437</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomRatio</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oldZoom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>438</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">centerOfZoom</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">centerOfZoom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomRatio</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>439</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>440</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>441</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>442</span> * Begins a potential drag event.
+<span class='line'>443</span> *
+<span class='line'>444</span> * @private
+<span class='line'>445</span> */</span><span class="WHIT">
+<span class='line'>446</span> </span><span class="WHIT"> </span><span class="NAME">gestureStart</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>447</span> </span><span class="WHIT"> </span><span class="NAME">this.currentGesture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>448</span> </span><span class="WHIT"> </span><span class="NAME">startZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>449</span> </span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.scale</span><span class="WHIT">
+<span class='line'>450</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>451</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>452</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>453</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>454</span> * Ends a gesture.
+<span class='line'>455</span> *
+<span class='line'>456</span> * @param {Event} event the &lt;code>gestureend&lt;/code> event
+<span class='line'>457</span> * @private
+<span class='line'>458</span> */</span><span class="WHIT">
+<span class='line'>459</span> </span><span class="WHIT"> </span><span class="NAME">gestureEnd</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>460</span> </span><span class="WHIT"> </span><span class="NAME">this.currentGesture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>461</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.dragStart</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>462</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart.hadGesture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>463</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>464</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>465</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>466</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>467</span> * Adjusts the zoom level based on the scale property of the
+<span class='line'>468</span> * gesture.
+<span class='line'>469</span> *
+<span class='line'>470</span> * @private
+<span class='line'>471</span> */</span><span class="WHIT">
+<span class='line'>472</span> </span><span class="WHIT"> </span><span class="NAME">gestureChange</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>473</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentGesture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>474</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.dragStart</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>475</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart.hadGesture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>476</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>477</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>478</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clampZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentGesture.startZoom</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.scale</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>479</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oldZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>480</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentGesture.clientX</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.currentGesture.clientY</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>481</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">centerOfZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clientToImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentGesture.clientX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.currentGesture.clientY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>482</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>483</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.adjustCoordinateForZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">centerOfZoom.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oldZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>484</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ny</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.adjustCoordinateForZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">centerOfZoom.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oldZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>485</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>486</span> </span><span class="WHIT"> </span><span class="NAME">this.moveTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ny</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>487</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>488</span> </span><span class="WHIT"> </span><span class="NAME">this.setZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">newZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>489</span> </span><span class="WHIT"> </span><span class="NAME">this.layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>490</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>491</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>492</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>493</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>494</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>495</span> * Begins a potential drag event.
+<span class='line'>496</span> *
+<span class='line'>497</span> * @private
+<span class='line'>498</span> */</span><span class="WHIT">
+<span class='line'>499</span> </span><span class="WHIT"> </span><span class="NAME">dragMouseDown</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>500</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>501</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>502</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientY</span><span class="WHIT">
+<span class='line'>503</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>504</span> </span><span class="WHIT"> </span><span class="NAME">this.dragLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>505</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>506</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientY</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>507</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>508</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>509</span> </span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1000000</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>510</span> </span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>511</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>512</span> </span><span class="WHIT"> </span><span class="NAME">this.dragged</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>513</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>514</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>515</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>516</span> * Handles a mouse drag event by panning the image.
+<span class='line'>517</span> * Also sets the dragged flag to indicate that the
+<span class='line'>518</span> * following &lt;code>click&lt;/code> event should be ignored.
+<span class='line'>519</span> * @private
+<span class='line'>520</span> */</span><span class="WHIT">
+<span class='line'>521</span> </span><span class="WHIT"> </span><span class="NAME">dragMouseMove</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>522</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentGesture</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">event.changedTouches</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">event.changedTouches.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>523</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>524</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>525</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">event.changedTouches.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>526</span> </span><span class="WHIT"> </span><span class="NAME">cx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">event.changedTouches</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">clientX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>527</span> </span><span class="WHIT"> </span><span class="NAME">cy</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">event.changedTouches</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">clientY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>528</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>529</span> </span><span class="WHIT"> </span><span class="NAME">this.currentGesture.clientX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cx</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">event.changedTouches.length</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>530</span> </span><span class="WHIT"> </span><span class="NAME">this.currentGesture.clientY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cy</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">event.changedTouches.length</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>531</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>532</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>533</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentGesture</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>534</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>535</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragStart.x</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>536</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragStart.y</span><span class="WHIT">
+<span class='line'>537</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>538</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta.x</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">delta.y</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>539</span> </span><span class="WHIT"> </span><span class="NAME">this.dragged</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>540</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>541</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>542</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">realX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta.x</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>543</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">realY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta.y</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>544</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>545</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>546</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>547</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientY</span><span class="WHIT">
+<span class='line'>548</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>549</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>550</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragLast.time</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>551</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>552</span> </span><span class="WHIT"> </span><span class="NAME">this.dragLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>553</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.dragLast.clientX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">event.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>554</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.dragLast.clientY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">event.clientY</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>555</span> </span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>556</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>557</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientY</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>558</span> </span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>559</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>560</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>561</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>562</span> </span><span class="WHIT"> </span><span class="NAME">this.moveTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">realX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">realY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>563</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>564</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>565</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>566</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>567</span> * Ends a drag event by freeing the associated structures.
+<span class='line'>568</span> * @private
+<span class='line'>569</span> */</span><span class="WHIT">
+<span class='line'>570</span> </span><span class="WHIT"> </span><span class="NAME">dragMouseUp</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>571</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentGesture</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.dragStart.hadGesture</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>572</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>573</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.dragged</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>574</span> </span><span class="WHIT"> </span><span class="NAME">this.mouseClick</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>575</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>576</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>577</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dragLast.dx</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>578</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dragLast.dy</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>579</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>580</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dragLast.dt</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>581</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dtb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragLast.time</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>582</span> </span><span class="WHIT"> </span><span class="NAME">this.dragLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>583</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>584</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ds</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>585</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.05</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">dtb</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">250</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.parameters.fling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>586</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>587</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>588</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>589</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>590</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>591</span> </span><span class="WHIT"> </span><span class="NAME">this.flyTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">250</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">250</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>592</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>593</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>594</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>595</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>596</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>597</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>598</span> * Mouse double-click handler. Pans to the clicked point and
+<span class='line'>599</span> * zooms in half a zoom level (approx 40%).
+<span class='line'>600</span> * @private
+<span class='line'>601</span> */</span><span class="WHIT">
+<span class='line'>602</span> </span><span class="WHIT"> </span><span class="NAME">mouseDoubleClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>603</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">eventData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createImageEventData</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>604</span> </span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"dblclick"</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>605</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>606</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientY</span><span class="WHIT">
+<span class='line'>607</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>608</span> </span><span class="WHIT"> </span><span class="NAME">this.fireEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"dblclick"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eventData</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>609</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">eventData.defaultPrevented</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>610</span> </span><span class="WHIT"> </span><span class="NAME">this.flyTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">eventData.imageX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eventData.imageY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>611</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>612</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>613</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>614</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>615</span> * Returns the current zoom level.
+<span class='line'>616</span> *
+<span class='line'>617</span> * @public
+<span class='line'>618</span> * @type number
+<span class='line'>619</span> */</span><span class="WHIT">
+<span class='line'>620</span> </span><span class="WHIT"> </span><span class="NAME">getZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>621</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>622</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>623</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>624</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>625</span> * Stops any current flyTo operation and sets the current position.
+<span class='line'>626</span> *
+<span class='line'>627</span> * @param [x] the new x-coordinate
+<span class='line'>628</span> * @param [y] the new y-coordinate
+<span class='line'>629</span> * @param [zoom] the new zoom level
+<span class='line'>630</span> * @param [updateViewport=true] updates the viewport
+<span class='line'>631</span> * @public
+<span class='line'>632</span> */</span><span class="WHIT">
+<span class='line'>633</span> </span><span class="WHIT"> </span><span class="NAME">moveTo</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">updateViewport</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>634</span> </span><span class="WHIT"> </span><span class="NAME">this.stopFlying</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>635</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>636</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>637</span> </span><span class="WHIT"> </span><span class="NAME">this.setPosition</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>638</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>639</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>640</span> </span><span class="WHIT"> </span><span class="NAME">this.setZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>641</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>642</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">updateViewport</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">updateViewport</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>643</span> </span><span class="WHIT"> </span><span class="NAME">this.layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>644</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>645</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>646</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>647</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>648</span> * Sets the current position.
+<span class='line'>649</span> *
+<span class='line'>650</span> * @param [x] the new x-coordinate
+<span class='line'>651</span> * @param [y] the new y-coordinate
+<span class='line'>652</span> * @param [updateViewport=true] if the viewport should be updated
+<span class='line'>653</span> * @private
+<span class='line'>654</span> */</span><span class="WHIT">
+<span class='line'>655</span> </span><span class="WHIT"> </span><span class="NAME">setPosition</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">updateViewport</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>656</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clamped</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clampXY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>657</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>658</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>659</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.wrapX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>660</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>661</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>662</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>663</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>664</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clamped.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>665</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>666</span> </span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>667</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>668</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>669</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>670</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.wrapY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>671</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>672</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>673</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>674</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>675</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clamped.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>676</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>677</span> </span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.height</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>678</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>679</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>680</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">updateViewport</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>681</span> </span><span class="WHIT"> </span><span class="NAME">this.layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>682</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>683</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>684</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>685</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>686</span> * Helper function for calculating zoom levels.
+<span class='line'>687</span> *
+<span class='line'>688</span> * @public
+<span class='line'>689</span> * @returns the zoom level at which the given number of full-image pixels
+<span class='line'>690</span> * occupy the given number of screen pixels.
+<span class='line'>691</span> * @param {number} imageDimension the image dimension in full-image pixels
+<span class='line'>692</span> * @param {number} containerDimension the container dimension in screen pixels
+<span class='line'>693</span> * @type number
+<span class='line'>694</span> */</span><span class="WHIT">
+<span class='line'>695</span> </span><span class="WHIT"> </span><span class="NAME">fitZoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">imageDimension</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">containerDimension</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>696</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">containerDimension</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">imageDimension</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>697</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scale</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.LN2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>698</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>699</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>700</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>701</span> * Returns the maximum zoom level at which the full image
+<span class='line'>702</span> * is visible in the viewport.
+<span class='line'>703</span> * @public
+<span class='line'>704</span> * @type number
+<span class='line'>705</span> */</span><span class="WHIT">
+<span class='line'>706</span> </span><span class="WHIT"> </span><span class="NAME">getZoomToFitValue</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>707</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>708</span> </span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>709</span> </span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.height</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>710</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>711</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>712</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>713</span> * Returns the zoom level at which the image fills the whole
+<span class='line'>714</span> * viewport.
+<span class='line'>715</span> * @public
+<span class='line'>716</span> * @type number
+<span class='line'>717</span> */</span><span class="WHIT">
+<span class='line'>718</span> </span><span class="WHIT"> </span><span class="NAME">getZoomToFillValue</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>719</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>720</span> </span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>721</span> </span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.height</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>722</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>723</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>724</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>725</span> * Adjust the zoom level to fit the image in the viewport.
+<span class='line'>726</span> * @public
+<span class='line'>727</span> */</span><span class="WHIT">
+<span class='line'>728</span> </span><span class="WHIT"> </span><span class="NAME">zoomToFit</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>729</span> </span><span class="WHIT"> </span><span class="NAME">this.moveTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getZoomToFitValue</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>730</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>731</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>732</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>733</span> * Adjust the zoom level to fit the image in the viewport.
+<span class='line'>734</span> * @public
+<span class='line'>735</span> */</span><span class="WHIT">
+<span class='line'>736</span> </span><span class="WHIT"> </span><span class="NAME">zoomToFill</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>737</span> </span><span class="WHIT"> </span><span class="NAME">this.moveTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getZoomToFillValue</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>738</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>739</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>740</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>741</span> * Adjust the zoom level to fit the
+<span class='line'>742</span> * image height in the viewport.
+<span class='line'>743</span> * @public
+<span class='line'>744</span> */</span><span class="WHIT">
+<span class='line'>745</span> </span><span class="WHIT"> </span><span class="NAME">zoomToFitHeight</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>746</span> </span><span class="WHIT"> </span><span class="NAME">this.moveTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.height</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>747</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>748</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>749</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>750</span> * Adjust the zoom level to fit the
+<span class='line'>751</span> * image width in the viewport.
+<span class='line'>752</span> * @public
+<span class='line'>753</span> */</span><span class="WHIT">
+<span class='line'>754</span> </span><span class="WHIT"> </span><span class="NAME">zoomToFitWidth</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>755</span> </span><span class="WHIT"> </span><span class="NAME">this.moveTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>756</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>757</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>758</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>759</span> * Smoothly adjust the zoom level to fit the
+<span class='line'>760</span> * image height in the viewport.
+<span class='line'>761</span> * @public
+<span class='line'>762</span> */</span><span class="WHIT">
+<span class='line'>763</span> </span><span class="WHIT"> </span><span class="NAME">flyZoomToFitHeight</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>764</span> </span><span class="WHIT"> </span><span class="NAME">this.flyTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.height</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.height</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>765</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>766</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>767</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>768</span> * Smoothly adjust the zoom level to fit the
+<span class='line'>769</span> * image width in the viewport.
+<span class='line'>770</span> * @public
+<span class='line'>771</span> */</span><span class="WHIT">
+<span class='line'>772</span> </span><span class="WHIT"> </span><span class="NAME">flyZoomToFitWidth</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>773</span> </span><span class="WHIT"> </span><span class="NAME">this.flyTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>774</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>775</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>776</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>777</span> * Smoothly adjust the zoom level to fit the
+<span class='line'>778</span> * full image in the viewport.
+<span class='line'>779</span> * @public
+<span class='line'>780</span> */</span><span class="WHIT">
+<span class='line'>781</span> </span><span class="WHIT"> </span><span class="NAME">flyZoomToFit</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>782</span> </span><span class="WHIT"> </span><span class="NAME">this.flyTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.height</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getZoomToFitValue</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>783</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>784</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>785</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>786</span> * Converts client-relative screen coordinates to image coordinates.
+<span class='line'>787</span> *
+<span class='line'>788</span> * @param {number} clientX the client x-coordinate
+<span class='line'>789</span> * @param {number} clientY the client y-coordinate
+<span class='line'>790</span> *
+<span class='line'>791</span> * @returns {number} .x the image x-coordinate
+<span class='line'>792</span> * @returns {number} .y the image y-coordinate
+<span class='line'>793</span> * @type Object
+<span class='line'>794</span> */</span><span class="WHIT">
+<span class='line'>795</span> </span><span class="WHIT"> </span><span class="NAME">clientToImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clientX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>796</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>797</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>798</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>799</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT">
+<span class='line'>800</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>801</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>802</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>803</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>804</span> * Handles mouse wheel actions.
+<span class='line'>805</span> * @private
+<span class='line'>806</span> */</span><span class="WHIT">
+<span class='line'>807</span> </span><span class="WHIT"> </span><span class="NAME">mouseWheelHandler</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>808</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomDelta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>809</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>810</span> </span><span class="WHIT"> </span><span class="NAME">zoomDelta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>811</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>812</span> </span><span class="WHIT"> </span><span class="NAME">zoomDelta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>813</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>814</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>815</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoomDelta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>816</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">centerOfZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clientToImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.clientX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">event.clientY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>817</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.maxZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">zoomDelta</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.minZoom</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>818</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>819</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.adjustCoordinateForZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">centerOfZoom.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>820</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ny</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.adjustCoordinateForZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">centerOfZoom.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>821</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>822</span> </span><span class="WHIT"> </span><span class="NAME">this.flyTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ny</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>823</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>824</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>825</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>826</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>827</span> * Translates mouse wheel events.
+<span class='line'>828</span> * @private
+<span class='line'>829</span> */</span><span class="WHIT">
+<span class='line'>830</span> </span><span class="WHIT"> </span><span class="NAME">mouseWheel</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>831</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>832</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">/* For IE. */</span><span class="WHIT">
+<span class='line'>833</span> </span><span class="WHIT"> </span><span class="NAME">event</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.event</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>834</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.wheelDelta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">/* IE/Opera. */</span><span class="WHIT">
+<span class='line'>835</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">event.wheelDelta</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">120</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>836</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>837</span> * In Opera 9, delta differs in sign as compared to IE.
+<span class='line'>838</span> */</span><span class="WHIT">
+<span class='line'>839</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window.opera</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>840</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>841</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.detail</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">/* Mozilla case. */</span><span class="WHIT">
+<span class='line'>842</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>843</span> * In Mozilla, sign of delta is different than in IE.
+<span class='line'>844</span> * Also, delta is multiple of 3.
+<span class='line'>845</span> */</span><span class="WHIT">
+<span class='line'>846</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">event.detail</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>847</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>848</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>849</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>850</span> * If delta is nonzero, handle it.
+<span class='line'>851</span> * Basically, delta is now positive if wheel was scrolled up,
+<span class='line'>852</span> * and negative, if wheel was scrolled down.
+<span class='line'>853</span> */</span><span class="WHIT">
+<span class='line'>854</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>855</span> </span><span class="WHIT"> </span><span class="NAME">this.mouseWheelHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">event</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>856</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>857</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>858</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>859</span> * Prevent default actions caused by mouse wheel.
+<span class='line'>860</span> * That might be ugly, but we handle scrolls somehow
+<span class='line'>861</span> * anyway, so don't bother here..
+<span class='line'>862</span> */</span><span class="WHIT">
+<span class='line'>863</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.preventDefault</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>864</span> </span><span class="WHIT"> </span><span class="NAME">event.preventDefault</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>865</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>866</span> </span><span class="WHIT"> </span><span class="NAME">event.returnValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>867</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>868</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>869</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>870</span> * Triggers a right-sizing of all layers.
+<span class='line'>871</span> * Called on window resize via the {@link bigshot.ImageBase#onresizeHandler} stub.
+<span class='line'>872</span> * @public
+<span class='line'>873</span> */</span><span class="WHIT">
+<span class='line'>874</span> </span><span class="WHIT"> </span><span class="NAME">onresize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>875</span> </span><span class="WHIT"> </span><span class="NAME">this.resize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>876</span> </span><span class="WHIT"> </span><span class="NAME">this.layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>877</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>878</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>879</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>880</span> * Returns the current x-coordinate, which is the full-image x coordinate
+<span class='line'>881</span> * in the center of the viewport.
+<span class='line'>882</span> * @public
+<span class='line'>883</span> * @type number
+<span class='line'>884</span> */</span><span class="WHIT">
+<span class='line'>885</span> </span><span class="WHIT"> </span><span class="NAME">getX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>886</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>887</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>888</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>889</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>890</span> * Returns the current y-coordinate, which is the full-image x coordinate
+<span class='line'>891</span> * in the center of the viewport.
+<span class='line'>892</span> * @public
+<span class='line'>893</span> * @type number
+<span class='line'>894</span> */</span><span class="WHIT">
+<span class='line'>895</span> </span><span class="WHIT"> </span><span class="NAME">getY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>896</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>897</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>898</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>899</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>900</span> * Interrupts the current {@link #flyTo}, if one is active.
+<span class='line'>901</span> * @public
+<span class='line'>902</span> */</span><span class="WHIT">
+<span class='line'>903</span> </span><span class="WHIT"> </span><span class="NAME">stopFlying</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>904</span> </span><span class="WHIT"> </span><span class="NAME">this.flying</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>905</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>906</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>907</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>908</span> * Smoothly flies to the specified position.
+<span class='line'>909</span> *
+<span class='line'>910</span> * @public
+<span class='line'>911</span> * @param {number} [x=current x] the new x-coordinate
+<span class='line'>912</span> * @param {number} [y=current y] the new y-coordinate
+<span class='line'>913</span> * @param {number} [zoom=current zoom] the new zoom level
+<span class='line'>914</span> * @param {boolean} [uniformApproach=false] if true, uses the same interpolation curve for x, y and zoom.
+<span class='line'>915</span> */</span><span class="WHIT">
+<span class='line'>916</span> </span><span class="WHIT"> </span><span class="NAME">flyTo</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">uniformApproach</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>917</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>918</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>919</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>920</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>921</span> </span><span class="WHIT"> </span><span class="NAME">zoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">zoom</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">zoom</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>922</span> </span><span class="WHIT"> </span><span class="NAME">uniformApproach</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">uniformApproach</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">uniformApproach</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>923</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>924</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>925</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>926</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>927</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>928</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clamped</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clampXY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>929</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.wrapX</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">clamped.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>930</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.wrapY</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">clamped.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>931</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.maxZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.minZoom</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>932</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>933</span> </span><span class="WHIT"> </span><span class="NAME">this.flying</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>934</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">flyingAtStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.flying</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>935</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>936</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>937</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>938</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">approach</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">step</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">linear</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>939</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>940</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>941</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">diff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">step</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>942</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>943</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">linear</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>944</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>945</span> </span><span class="WHIT"> </span><span class="NAME">diff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">diff</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>946</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>947</span> </span><span class="WHIT"> </span><span class="NAME">diff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">diff</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>948</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>949</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>950</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">diff</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>951</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>952</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>953</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>954</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>955</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.flying</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">flyingAtStart</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>956</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>957</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>958</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">approach</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">startX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">targetX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">uniformApproach</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">uniformApproach</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">0.2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>959</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ny</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">approach</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">startY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">targetY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">uniformApproach</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">uniformApproach</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">0.2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>960</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">approach</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">startZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">targetZoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>961</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">done</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>962</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>963</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.getZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>964</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>965</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nx</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">targetX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>966</span> </span><span class="WHIT"> </span><span class="NAME">nx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">targetX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>967</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>968</span> </span><span class="WHIT"> </span><span class="NAME">done</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>969</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>970</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ny</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">targetY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>971</span> </span><span class="WHIT"> </span><span class="NAME">ny</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">targetY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>972</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>973</span> </span><span class="WHIT"> </span><span class="NAME">done</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>974</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>975</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nz</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">targetZoom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0.02</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>976</span> </span><span class="WHIT"> </span><span class="NAME">nz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">targetZoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>977</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>978</span> </span><span class="WHIT"> </span><span class="NAME">done</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>979</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>980</span> </span><span class="WHIT"> </span><span class="NAME">that.setPosition</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ny</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>981</span> </span><span class="WHIT"> </span><span class="NAME">that.setZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nz</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>982</span> </span><span class="WHIT"> </span><span class="NAME">that.layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>983</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">done</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>984</span> </span><span class="WHIT"> </span><span class="NAME">that.browser.requestAnimationFrame</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>985</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>986</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>987</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>988</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.requestAnimationFrame</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>989</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>990</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>991</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>992</span> * Returns the maximum zoom level at which a rectangle with the given dimensions
+<span class='line'>993</span> * fit into the viewport.
+<span class='line'>994</span> *
+<span class='line'>995</span> * @public
+<span class='line'>996</span> * @param {number} w the width of the rectangle, given in full-image pixels
+<span class='line'>997</span> * @param {number} h the height of the rectangle, given in full-image pixels
+<span class='line'>998</span> * @type number
+<span class='line'>999</span> * @returns the zoom level that will precisely fit the given rectangle
+<span class='line'>1000</span> */</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1001</span> </span><span class="WHIT"> </span><span class="NAME">rectVisibleAtZoomLevel</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1002</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>1003</span> </span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1004</span> </span><span class="WHIT"> </span><span class="NAME">this.fitZoom</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1005</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1006</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1007</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1008</span> * Returns the base size in screen pixels of the two zoom touch areas.
+<span class='line'>1009</span> * The zoom out border will be getTouchAreaBaseSize() pixels wide,
+<span class='line'>1010</span> * and the center zoom in hotspot will be 2*getTouchAreaBaseSize() pixels wide
+<span class='line'>1011</span> * and tall.
+<span class='line'>1012</span> * @deprecated
+<span class='line'>1013</span> * @type number
+<span class='line'>1014</span> * @public
+<span class='line'>1015</span> */</span><span class="WHIT">
+<span class='line'>1016</span> </span><span class="WHIT"> </span><span class="NAME">getTouchAreaBaseSize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1017</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">averageSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.container.clientWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1018</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">averageSize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container.clientWidth</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1019</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1020</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1021</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1022</span> * Creates a new {@link bigshot.ImageEvent} using the supplied data object,
+<span class='line'>1023</span> * transforming the client x- and y-coordinates to local and image coordinates.
+<span class='line'>1024</span> * The returned event object will have the {@link bigshot.ImageEvent#localX},
+<span class='line'>1025</span> * {@link bigshot.ImageEvent#localY}, {@link bigshot.ImageEvent#imageX},
+<span class='line'>1026</span> * {@link bigshot.ImageEvent#imageY}, {@link bigshot.Event#target} and
+<span class='line'>1027</span> * {@link bigshot.Event#currentTarget} fields set.
+<span class='line'>1028</span> *
+<span class='line'>1029</span> * @param {Object} data data object with initial values for the event object
+<span class='line'>1030</span> * @param {number} data.clientX the clientX of the event
+<span class='line'>1031</span> * @param {number} data.clientY the clientY of the event
+<span class='line'>1032</span> * @returns the new event object
+<span class='line'>1033</span> * @type bigshot.ImageEvent
+<span class='line'>1034</span> */</span><span class="WHIT">
+<span class='line'>1035</span> </span><span class="WHIT"> </span><span class="NAME">createImageEventData</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1036</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">elementPos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.getElementPosition</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1037</span> </span><span class="WHIT"> </span><span class="NAME">data.localX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.clientX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">elementPos.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1038</span> </span><span class="WHIT"> </span><span class="NAME">data.localY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.clientY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">elementPos.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1039</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1040</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.zoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1041</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1042</span> </span><span class="WHIT"> </span><span class="NAME">data.imageX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.localX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1043</span> </span><span class="WHIT"> </span><span class="NAME">data.imageY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.localY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1044</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1045</span> </span><span class="WHIT"> </span><span class="NAME">data.target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1046</span> </span><span class="WHIT"> </span><span class="NAME">data.currentTarget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1047</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1048</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.ImageEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1049</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1050</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1051</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1052</span> * Handles mouse click events. If the touch UI is active,
+<span class='line'>1053</span> * we'll pan and/or zoom, as appropriate. If not, we just ignore
+<span class='line'>1054</span> * the event.
+<span class='line'>1055</span> * @private
+<span class='line'>1056</span> */</span><span class="WHIT">
+<span class='line'>1057</span> </span><span class="WHIT"> </span><span class="NAME">mouseClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1058</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">eventData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createImageEventData</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1059</span> </span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1060</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1061</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.clientY</span><span class="WHIT">
+<span class='line'>1062</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1063</span> </span><span class="WHIT"> </span><span class="NAME">this.fireEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eventData</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1064</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>1065</span> if (!eventData.defaultPrevented) {
+<span class='line'>1066</span> if (!this.parameters.touchUI) {
+<span class='line'>1067</span> return;
+<span class='line'>1068</span> }
+<span class='line'>1069</span> if (this.dragged) {
+<span class='line'>1070</span> return;
+<span class='line'>1071</span> }
+<span class='line'>1072</span>
+<span class='line'>1073</span> var zoomOutBorderSize = this.getTouchAreaBaseSize ();
+<span class='line'>1074</span> var zoomInHotspotSize = this.getTouchAreaBaseSize ();
+<span class='line'>1075</span>
+<span class='line'>1076</span> if (Math.abs (clickPos.x) > (this.container.clientWidth / 2 - zoomOutBorderSize) || Math.abs (clickPos.y) > (this.container.clientHeight / 2 - zoomOutBorderSize)) {
+<span class='line'>1077</span> this.flyTo (this.x, this.y, this.zoom - 0.5);
+<span class='line'>1078</span> } else {
+<span class='line'>1079</span> var newZoom = this.zoom;
+<span class='line'>1080</span> if (Math.abs (clickPos.x) &lt; zoomInHotspotSize && Math.abs (clickPos.y) &lt; zoomInHotspotSize) {
+<span class='line'>1081</span> newZoom += 0.5;
+<span class='line'>1082</span> }
+<span class='line'>1083</span> var scale = Math.pow (2, this.zoom);
+<span class='line'>1084</span> clickPos.x /= scale;
+<span class='line'>1085</span> clickPos.y /= scale;
+<span class='line'>1086</span> this.flyTo (this.x + clickPos.x, this.y + clickPos.y, newZoom);
+<span class='line'>1087</span> }
+<span class='line'>1088</span> }
+<span class='line'>1089</span> */</span><span class="WHIT">
+<span class='line'>1090</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1091</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1092</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1093</span> * Briefly shows the touch ui zones. See the {@link bigshot.ImageParameters#touchUI}
+<span class='line'>1094</span> * documentation for an explanation of the touch ui.
+<span class='line'>1095</span> *
+<span class='line'>1096</span> * @public
+<span class='line'>1097</span> * @deprecated All common touch gestures are supported by default.
+<span class='line'>1098</span> * @see bigshot.ImageParameters#touchUI
+<span class='line'>1099</span> * @param {int} [delay] milliseconds before fading out
+<span class='line'>1100</span> * @param {int} [fadeOut] milliseconds to fade out the zone overlays in
+<span class='line'>1101</span> */</span><span class="WHIT">
+<span class='line'>1102</span> </span><span class="WHIT"> </span><span class="NAME">showTouchUI</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delay</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fadeOut</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1103</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">delay</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1104</span> </span><span class="WHIT"> </span><span class="NAME">delay</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2500</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1105</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1106</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">fadeOut</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1107</span> </span><span class="WHIT"> </span><span class="NAME">fadeOut</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1108</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1109</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1110</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomOutBorderSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getTouchAreaBaseSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1111</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomInHotspotSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getTouchAreaBaseSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1112</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">centerX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1113</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">centerY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1114</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1115</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">frameDiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1116</span> </span><span class="WHIT"> </span><span class="NAME">frameDiv.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1117</span> </span><span class="WHIT"> </span><span class="NAME">frameDiv.style.zIndex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"9999"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1118</span> </span><span class="WHIT"> </span><span class="NAME">frameDiv.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.9</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1119</span> </span><span class="WHIT"> </span><span class="NAME">frameDiv.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1120</span> </span><span class="WHIT"> </span><span class="NAME">frameDiv.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1121</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1122</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">centerSpotAnchor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1123</span> </span><span class="WHIT"> </span><span class="NAME">centerSpotAnchor.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1124</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1125</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">centerSpot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1126</span> </span><span class="WHIT"> </span><span class="NAME">centerSpot.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"relative"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1127</span> </span><span class="WHIT"> </span><span class="NAME">centerSpot.style.background</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"black"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1128</span> </span><span class="WHIT"> </span><span class="NAME">centerSpot.style.textAlign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"center"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1129</span> </span><span class="WHIT"> </span><span class="NAME">centerSpot.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">centerY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">zoomInHotspotSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1130</span> </span><span class="WHIT"> </span><span class="NAME">centerSpot.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">centerX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">zoomInHotspotSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1131</span> </span><span class="WHIT"> </span><span class="NAME">centerSpot.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomInHotspotSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1132</span> </span><span class="WHIT"> </span><span class="NAME">centerSpot.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomInHotspotSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1133</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1134</span> </span><span class="WHIT"> </span><span class="NAME">frameDiv.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">centerSpotAnchor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1135</span> </span><span class="WHIT"> </span><span class="NAME">centerSpotAnchor.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">centerSpot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1136</span> </span><span class="WHIT"> </span><span class="NAME">centerSpot.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"&lt;span style='display:inline-box; position:relative; vertical-align:middle; font-size: 20pt; top: 10pt; color:white'>ZOOM IN&lt;/span>"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1137</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1138</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomOutBorderAnchor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1139</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorderAnchor.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1140</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1141</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">zoomOutBorder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1142</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"relative"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1143</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.border</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">zoomOutBorderSize</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px solid black"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1144</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1145</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1146</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.textAlign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"center"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1147</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1148</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1149</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.MozBoxSizing</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1150</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.boxSizing</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1151</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.style.WebkitBoxSizing</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1152</span> </span><span class="WHIT"> </span><span class="STRN">"border-box"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1153</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1154</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorder.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"&lt;span style='position:relative; font-size: 20pt; top: -25pt; color:white'>ZOOM OUT&lt;/span>"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1155</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1156</span> </span><span class="WHIT"> </span><span class="NAME">zoomOutBorderAnchor.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoomOutBorder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1157</span> </span><span class="WHIT"> </span><span class="NAME">frameDiv.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoomOutBorderAnchor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1158</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1159</span> </span><span class="WHIT"> </span><span class="NAME">this.container.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">frameDiv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1160</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1161</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1162</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.9</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1163</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fadeOutSteps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fadeOut</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1164</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fadeOutSteps</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1165</span> </span><span class="WHIT"> </span><span class="NAME">fadeOutSteps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1166</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1167</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1168</span> </span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0.9</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">fadeOutSteps</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1169</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1170</span> </span><span class="WHIT"> </span><span class="NAME">that.container.removeChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">frameDiv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1171</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1172</span> </span><span class="WHIT"> </span><span class="NAME">frameDiv.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1173</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1174</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1175</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1176</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delay</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1177</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1178</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1179</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1180</span> * Forces exit from full screen mode, if we're there.
+<span class='line'>1181</span> * @public
+<span class='line'>1182</span> */</span><span class="WHIT">
+<span class='line'>1183</span> </span><span class="WHIT"> </span><span class="NAME">exitFullScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1184</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullScreenHandler</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1185</span> </span><span class="WHIT"> </span><span class="NAME">this.removeEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1186</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.close</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1187</span> </span><span class="WHIT"> </span><span class="NAME">this.addEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1188</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1189</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1190</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1191</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1192</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1193</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1194</span> * Maximizes the image to cover the browser viewport.
+<span class='line'>1195</span> * The container div is removed from its parent node upon entering
+<span class='line'>1196</span> * full screen mode. When leaving full screen mode, the container
+<span class='line'>1197</span> * is appended to its old parent node. To avoid rearranging the
+<span class='line'>1198</span> * nodes, wrap the container in an extra div.
+<span class='line'>1199</span> *
+<span class='line'>1200</span> * &lt;p>For unknown reasons (probably security), browsers will
+<span class='line'>1201</span> * not let you open a window that covers the entire screen.
+<span class='line'>1202</span> * Even when specifying "fullscreen=yes", all you get is a window
+<span class='line'>1203</span> * that has a title bar and only covers the desktop (not any task
+<span class='line'>1204</span> * bars or the like). For now, this is the best that I can do,
+<span class='line'>1205</span> * but should the situation change I'll update this to be
+<span class='line'>1206</span> * full-screen&lt;i>-ier&lt;/i>.
+<span class='line'>1207</span> * @public
+<span class='line'>1208</span> */</span><span class="WHIT">
+<span class='line'>1209</span> </span><span class="WHIT"> </span><span class="NAME">fullScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onClose</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1210</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullScreenHandler</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1211</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1212</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1213</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1214</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">message</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1215</span> </span><span class="WHIT"> </span><span class="NAME">message.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1216</span> </span><span class="WHIT"> </span><span class="NAME">message.style.fontSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"16pt"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1217</span> </span><span class="WHIT"> </span><span class="NAME">message.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"128px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1218</span> </span><span class="WHIT"> </span><span class="NAME">message.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"100%"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1219</span> </span><span class="WHIT"> </span><span class="NAME">message.style.color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"white"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1220</span> </span><span class="WHIT"> </span><span class="NAME">message.style.padding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"16px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1221</span> </span><span class="WHIT"> </span><span class="NAME">message.style.zIndex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"9999"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1222</span> </span><span class="WHIT"> </span><span class="NAME">message.style.textAlign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"center"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1223</span> </span><span class="WHIT"> </span><span class="NAME">message.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.75"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1224</span> </span><span class="WHIT"> </span><span class="NAME">message.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"&lt;span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.&lt;/span>"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1225</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1226</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1227</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1228</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.FullScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1229</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.restoreSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1230</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1231</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.addOnResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1232</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.fullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">that.fullScreenHandler.isFullScreen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1233</span> </span><span class="WHIT"> </span><span class="NAME">that.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1234</span> </span><span class="WHIT"> </span><span class="NAME">that.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1235</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1236</span> </span><span class="WHIT"> </span><span class="NAME">that.onresize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1237</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1238</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1239</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.addOnClose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1240</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1241</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1242</span> </span><span class="WHIT"> </span><span class="NAME">div.removeChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1243</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1244</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1245</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1246</span> </span><span class="WHIT"> </span><span class="NAME">that.fullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1247</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1248</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1249</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onClose</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1250</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.addOnClose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1251</span> </span><span class="WHIT"> </span><span class="NAME">onClose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1252</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1253</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1254</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1255</span> </span><span class="WHIT"> </span><span class="NAME">this.removeEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1256</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.open</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1257</span> </span><span class="WHIT"> </span><span class="NAME">this.addEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1258</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullScreenHandler.getRootElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1259</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.getRootElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1260</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1261</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1262</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.75</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1263</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1264</span> </span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.02</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1265</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1266</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1267</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1268</span> </span><span class="WHIT"> </span><span class="NAME">div.removeChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1269</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1270</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1271</span> </span><span class="WHIT"> </span><span class="NAME">message.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1272</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1273</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1274</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1275</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1276</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1277</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3500</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1278</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1279</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1280</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1281</span> </span><span class="WHIT"> </span><span class="NAME">that.fullScreenHandler.close</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1282</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1283</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1284</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1285</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1286</span> * Unregisters event handlers and other page-level hooks. The client need not call this
+<span class='line'>1287</span> * method unless bigshot images are created and removed from the page
+<span class='line'>1288</span> * dynamically. In that case, this method must be called when the client wishes to
+<span class='line'>1289</span> * free the resources allocated by the image. Otherwise the browser will garbage-collect
+<span class='line'>1290</span> * all resources automatically.
+<span class='line'>1291</span> * @public
+<span class='line'>1292</span> */</span><span class="WHIT">
+<span class='line'>1293</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1294</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.unregisterListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"resize"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onresizeHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1295</span> </span><span class="WHIT"> </span><span class="NAME">this.removeEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1296</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1297</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1298</span>
+<span class='line'>1299</span> </span><span class="COMM">/**
+<span class='line'>1300</span> * Fired when the user double-clicks on the image
+<span class='line'>1301</span> *
+<span class='line'>1302</span> * @name bigshot.ImageBase#dblclick
+<span class='line'>1303</span> * @event
+<span class='line'>1304</span> * @param {bigshot.ImageEvent} event the event object
+<span class='line'>1305</span> */</span><span class="WHIT">
+<span class='line'>1306</span>
+<span class='line'>1307</span> </span><span class="COMM">/**
+<span class='line'>1308</span> * Fired when the user clicks on (but does not drag) the image
+<span class='line'>1309</span> *
+<span class='line'>1310</span> * @name bigshot.ImageBase#click
+<span class='line'>1311</span> * @event
+<span class='line'>1312</span> * @param {bigshot.ImageEvent} event the event object
+<span class='line'>1313</span> */</span><span class="WHIT">
+<span class='line'>1314</span>
+<span class='line'>1315</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.ImageBase</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.EventDispatcher</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1316</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageEvent.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageEvent.js.html
new file mode 100644
index 00000000..c6bea4d1
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageEvent.js.html
@@ -0,0 +1,89 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates an image event.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Base class for events dispatched by bigshot.ImageBase.
+<span class='line'> 21</span> * @param {Object} data a data object whose fields will be used to set the
+<span class='line'> 22</span> * corresponding fields of the event object.
+<span class='line'> 23</span> * @extends bigshot.Event
+<span class='line'> 24</span> * @see bigshot.ImageBase
+<span class='line'> 25</span> */</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="NAME">bigshot.ImageEvent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.Event.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 29</span>
+<span class='line'> 30</span> </span><span class="COMM">/**
+<span class='line'> 31</span> * The image X coordinate of the event, if any.
+<span class='line'> 32</span> *
+<span class='line'> 33</span> * @name bigshot.ImageEvent#imageX
+<span class='line'> 34</span> * @field
+<span class='line'> 35</span> * @type number
+<span class='line'> 36</span> */</span><span class="WHIT">
+<span class='line'> 37</span>
+<span class='line'> 38</span> </span><span class="COMM">/**
+<span class='line'> 39</span> * The image Y coordinate of the event, if any.
+<span class='line'> 40</span> *
+<span class='line'> 41</span> * @name bigshot.ImageEvent#imageY
+<span class='line'> 42</span> * @field
+<span class='line'> 43</span> * @type number
+<span class='line'> 44</span> */</span><span class="WHIT">
+<span class='line'> 45</span>
+<span class='line'> 46</span> </span><span class="COMM">/**
+<span class='line'> 47</span> * The client X coordinate of the event, if any.
+<span class='line'> 48</span> *
+<span class='line'> 49</span> * @name bigshot.ImageEvent#clientX
+<span class='line'> 50</span> * @field
+<span class='line'> 51</span> * @type number
+<span class='line'> 52</span> */</span><span class="WHIT">
+<span class='line'> 53</span>
+<span class='line'> 54</span> </span><span class="COMM">/**
+<span class='line'> 55</span> * The client Y coordinate of the event, if any.
+<span class='line'> 56</span> *
+<span class='line'> 57</span> * @name bigshot.ImageEvent#clientY
+<span class='line'> 58</span> * @field
+<span class='line'> 59</span> * @type number
+<span class='line'> 60</span> */</span><span class="WHIT">
+<span class='line'> 61</span>
+<span class='line'> 62</span> </span><span class="COMM">/**
+<span class='line'> 63</span> * The local X coordinate of the event, if any.
+<span class='line'> 64</span> *
+<span class='line'> 65</span> * @name bigshot.ImageEvent#localX
+<span class='line'> 66</span> * @field
+<span class='line'> 67</span> * @type number
+<span class='line'> 68</span> */</span><span class="WHIT">
+<span class='line'> 69</span>
+<span class='line'> 70</span> </span><span class="COMM">/**
+<span class='line'> 71</span> * The local Y coordinate of the event, if any.
+<span class='line'> 72</span> *
+<span class='line'> 73</span> * @name bigshot.ImageEvent#localY
+<span class='line'> 74</span> * @field
+<span class='line'> 75</span> * @type number
+<span class='line'> 76</span> */</span><span class="WHIT">
+<span class='line'> 77</span>
+<span class='line'> 78</span>
+<span class='line'> 79</span> </span><span class="NAME">bigshot.ImageEvent.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span>
+<span class='line'> 82</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.ImageEvent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.Event</span><span class="PUNC">)</span><span class="PUNC">;</span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageParameters.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageParameters.js.html
new file mode 100644
index 00000000..36398014
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageParameters.js.html
@@ -0,0 +1,262 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new image parameter object and populates it with default values for
+<span class='line'> 19</span> * all values not explicitly given.
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * @class ImageParameters parameter object.
+<span class='line'> 22</span> * You need not set any fields that can be read from the image descriptor that
+<span class='line'> 23</span> * MakeImagePyramid creates. See the {@link bigshot.Image} documentation for
+<span class='line'> 24</span> * required parameters.
+<span class='line'> 25</span> *
+<span class='line'> 26</span> * &lt;p>Usage:
+<span class='line'> 27</span> *
+<span class='line'> 28</span> * @example
+<span class='line'> 29</span> * var bsi = new bigshot.Image (
+<span class='line'> 30</span> * new bigshot.ImageParameters ({
+<span class='line'> 31</span> * basePath : "/bigshot.php?file=myshot.bigshot",
+<span class='line'> 32</span> * fileSystemType : "archive",
+<span class='line'> 33</span> * container : document.getElementById ("bigshot_div")
+<span class='line'> 34</span> * }));
+<span class='line'> 35</span> *
+<span class='line'> 36</span> * @param values named parameter map, see the fields below for parameter names and types.
+<span class='line'> 37</span> * @see bigshot.Image
+<span class='line'> 38</span> */</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="NAME">bigshot.ImageParameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 41</span> * Size of low resolution preview image along the longest image
+<span class='line'> 42</span> * dimension. The preview is assumed to have the same aspect
+<span class='line'> 43</span> * ratio as the full image (specified by width and height).
+<span class='line'> 44</span> *
+<span class='line'> 45</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'> 46</span> * @type int
+<span class='line'> 47</span> * @public
+<span class='line'> 48</span> */</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.posterSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 52</span> * Url for the image tile to show while the tile is loading and no
+<span class='line'> 53</span> * low-resolution preview is available.
+<span class='line'> 54</span> *
+<span class='line'> 55</span> * @default &lt;code>null&lt;/code>, which results in an all-black image
+<span class='line'> 56</span> * @type String
+<span class='line'> 57</span> * @public
+<span class='line'> 58</span> */</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">this.emptyImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 62</span> * Suffix to append to the tile filenames. Typically &lt;code>".jpg"&lt;/code> or
+<span class='line'> 63</span> * &lt;code>".png"&lt;/code>.
+<span class='line'> 64</span> *
+<span class='line'> 65</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'> 66</span> * @type String
+<span class='line'> 67</span> */</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 71</span> * The width of the full image; in pixels.
+<span class='line'> 72</span> *
+<span class='line'> 73</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'> 74</span> * @type int
+<span class='line'> 75</span> */</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 79</span> * The height of the full image; in pixels.
+<span class='line'> 80</span> *
+<span class='line'> 81</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'> 82</span> * @type int
+<span class='line'> 83</span> */</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 87</span> * For {@link bigshot.Image} and {@link bigshot.SimpleImage}, the &lt;code>div&lt;/code>
+<span class='line'> 88</span> * to use as a container for the image.
+<span class='line'> 89</span> *
+<span class='line'> 90</span> * @type HTMLDivElement
+<span class='line'> 91</span> */</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 95</span> * The minimum zoom value. Zoom values are specified as a magnification; where
+<span class='line'> 96</span> * 2&lt;sup>n&lt;/sup> is the magnification and n is the zoom value. So a zoom value of
+<span class='line'> 97</span> * 2 means a 4x magnification of the full image. -3 means showing an image that
+<span class='line'> 98</span> * is a eighth (1/8 or 1/2&lt;sup>3&lt;/sup>) of the full size.
+<span class='line'> 99</span> *
+<span class='line'>100</span> * @type number
+<span class='line'>101</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'>102</span> */</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="NAME">this.minZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>106</span> * The maximum zoom value. Zoom values are specified as a magnification; where
+<span class='line'>107</span> * 2&lt;sup>n&lt;/sup> is the magnification and n is the zoom value. So a zoom value of
+<span class='line'>108</span> * 2 means a 4x magnification of the full image. -3 means showing an image that
+<span class='line'>109</span> * is a eighth (1/8 or 1/2&lt;sup>3&lt;/sup>) of the full size.
+<span class='line'>110</span> *
+<span class='line'>111</span> * @type number
+<span class='line'>112</span> * @default 0.0
+<span class='line'>113</span> */</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="NAME">this.maxZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>117</span> * Size of one tile in pixels.
+<span class='line'>118</span> *
+<span class='line'>119</span> * @type int
+<span class='line'>120</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'>121</span> */</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>125</span> * Tile overlap. Not implemented.
+<span class='line'>126</span> *
+<span class='line'>127</span> * @type int
+<span class='line'>128</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'>129</span> */</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="NAME">this.overlap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>133</span> * Flag indicating that the image should wrap horizontally. The image wraps on tile
+<span class='line'>134</span> * boundaries; so in order to get a seamless wrap at zoom level -n; the image width must
+<span class='line'>135</span> * be evenly divisible by &lt;code>tileSize * 2^n&lt;/code>. Set the minZoom value appropriately.
+<span class='line'>136</span> *
+<span class='line'>137</span> * @type boolean
+<span class='line'>138</span> * @default false
+<span class='line'>139</span> */</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="NAME">this.wrapX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>143</span> * Flag indicating that the image should wrap vertically. The image wraps on tile
+<span class='line'>144</span> * boundaries; so in order to get a seamless wrap at zoom level -n; the image height must
+<span class='line'>145</span> * be evenly divisible by &lt;code>tileSize * 2^n&lt;/code>. Set the minZoom value appropriately.
+<span class='line'>146</span> *
+<span class='line'>147</span> * @type boolean
+<span class='line'>148</span> * @default false
+<span class='line'>149</span> */</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="NAME">this.wrapY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>153</span> * Base path for the image. This is filesystem dependent; but for the two most common cases
+<span class='line'>154</span> * the following should be set
+<span class='line'>155</span> *
+<span class='line'>156</span> * &lt;ul>
+<span class='line'>157</span> * &lt;li>&lt;b>archive&lt;/b>= The basePath is &lt;code>"&lt;path&gt;/bigshot.php?file=&lt;path-to-bigshot-archive-relative-to-bigshot.php&gt;"&lt;/code>;
+<span class='line'>158</span> * for example; &lt;code>"/bigshot.php?file=images/bigshot-sample.bigshot"&lt;/code>.
+<span class='line'>159</span> * &lt;li>&lt;b>folder&lt;/b>= The basePath is &lt;code>"&lt;path-to-image-folder&gt;"&lt;/code>;
+<span class='line'>160</span> * for example; &lt;code>"/images/bigshot-sample"&lt;/code>.
+<span class='line'>161</span> * &lt;/ul>
+<span class='line'>162</span> *
+<span class='line'>163</span> * @type String
+<span class='line'>164</span> */</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="NAME">this.basePath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>167</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>168</span> * The file system type. Used to create a filesystem instance unless
+<span class='line'>169</span> * the fileSystem field is set. Possible values are &lt;code>"archive"&lt;/code>,
+<span class='line'>170</span> * &lt;code>"folder"&lt;/code> or &lt;code>"dzi"&lt;/code>.
+<span class='line'>171</span> *
+<span class='line'>172</span> * @type String
+<span class='line'>173</span> * @default "folder"
+<span class='line'>174</span> */</span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="NAME">this.fileSystemType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"folder"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>177</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>178</span> * A reference to a filesystem implementation. If set; it overrides the
+<span class='line'>179</span> * fileSystemType field.
+<span class='line'>180</span> *
+<span class='line'>181</span> * @default set depending on value of bigshot.ImageParameters.fileSystemType
+<span class='line'>182</span> * @type bigshot.FileSystem
+<span class='line'>183</span> */</span><span class="WHIT">
+<span class='line'>184</span> </span><span class="WHIT"> </span><span class="NAME">this.fileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>185</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>186</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>187</span> * Object used to load data files.
+<span class='line'>188</span> *
+<span class='line'>189</span> * @default bigshot.DefaultDataLoader
+<span class='line'>190</span> * @type bigshot.DataLoader
+<span class='line'>191</span> */</span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="NAME">this.dataLoader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.DefaultDataLoader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>193</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>194</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>195</span> * Enable the touch-friendly ui. The touch-friendly UI splits the viewport into
+<span class='line'>196</span> * three click-sensitive regions:
+<span class='line'>197</span> * &lt;p style="text-align:center">&lt;img src="../images/touch-ui.png"/>&lt;/p>
+<span class='line'>198</span> *
+<span class='line'>199</span> * &lt;p>Clicking (or tapping with a finger) on the outer region causes the viewport to zoom out.
+<span class='line'>200</span> * Clicking anywhere within the middle, "pan", region centers the image on the spot clicked.
+<span class='line'>201</span> * Finally, clicking in the center hotspot will center the image on the spot clicked and zoom
+<span class='line'>202</span> * in half a zoom level.
+<span class='line'>203</span> *
+<span class='line'>204</span> * &lt;p>As before, you can drag to pan anywhere.
+<span class='line'>205</span> *
+<span class='line'>206</span> * &lt;p>If you have navigation tools for mouse users that hover over the image container, it
+<span class='line'>207</span> * is recommended that any click events on them are kept from bubbling, otherwise the click
+<span class='line'>208</span> * will propagate to the touch ui. One way is to use the
+<span class='line'>209</span> * {@link bigshot.Browser#stopMouseEventBubbling} method:
+<span class='line'>210</span> *
+<span class='line'>211</span> * @example
+<span class='line'>212</span> * var browser = new bigshot.Browser ();
+<span class='line'>213</span> * browser.stopMouseEventBubbling (document.getElementById ("myBigshotControlDiv"));
+<span class='line'>214</span> *
+<span class='line'>215</span> * @see bigshot.ImageBase#showTouchUI
+<span class='line'>216</span> *
+<span class='line'>217</span> * @type boolean
+<span class='line'>218</span> * @default true
+<span class='line'>219</span> * @deprecated Bigshot supports all common touch-gestures.
+<span class='line'>220</span> */</span><span class="WHIT">
+<span class='line'>221</span> </span><span class="WHIT"> </span><span class="NAME">this.touchUI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>222</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>223</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>224</span> * Lets you "fling" the image.
+<span class='line'>225</span> *
+<span class='line'>226</span> * @type boolean
+<span class='line'>227</span> * @default true
+<span class='line'>228</span> */</span><span class="WHIT">
+<span class='line'>229</span> </span><span class="WHIT"> </span><span class="NAME">this.fling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>230</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>231</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>232</span> * The maximum amount that a tile will be stretched until we try to show
+<span class='line'>233</span> * the next more detailed level.
+<span class='line'>234</span> *
+<span class='line'>235</span> * @type float
+<span class='line'>236</span> * @default 1.0
+<span class='line'>237</span> */</span><span class="WHIT">
+<span class='line'>238</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>239</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>240</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>241</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>242</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>243</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>244</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>245</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>246</span> </span><span class="WHIT"> </span><span class="NAME">this.merge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">values</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">overwrite</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>247</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>248</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">overwrite</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>249</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>250</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>251</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>252</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>253</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>254</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>255</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageTileCache.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageTileCache.js.html
new file mode 100644
index 00000000..7c912a8f
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageTileCache.js.html
@@ -0,0 +1,276 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new cache instance.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Tile cache for the {@link bigshot.TileLayer}.
+<span class='line'> 21</span> * @constructor
+<span class='line'> 22</span> */</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="NAME">bigshot.ImageTileCache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onLoaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 29</span> * Reduced-resolution preview of the full image.
+<span class='line'> 30</span> * Loaded from the "poster" image created by
+<span class='line'> 31</span> * MakeImagePyramid
+<span class='line'> 32</span> *
+<span class='line'> 33</span> * @private
+<span class='line'> 34</span> * @type HTMLImageElement
+<span class='line'> 35</span> */</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">this.fullImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">parameters.dataLoader.loadImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters.fileSystem.getPosterFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">that.fullImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onCacheInit</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 45</span> * Maximum number of tiles in the cache.
+<span class='line'> 46</span> * @private
+<span class='line'> 47</span> * @type int
+<span class='line'> 48</span> */</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.maxCacheSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">512</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTileX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTileY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">this.cachedImages</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.requestedImages</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">this.usedImages</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">this.lastOnLoadFiredAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">this.imageRequests</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">this.lruMap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.LRUMap</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.onLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">onLoaded</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">this.browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.tileSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">this.POSTER_ZOOM_LEVEL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters.posterSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters.height</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 63</span>
+<span class='line'> 64</span> </span><span class="NAME">bigshot.ImageTileCache.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">resetUsed</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">this.usedImages</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">setMaxTiles</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mtx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mty</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTileX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mtx</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTileY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mty</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="NAME">getPartialImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPartialImageFromDownsampled</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.tileSize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.tileSize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPartialImageFromPoster</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">img</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="NAME">getPartialImageFromPoster</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullImage</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.fullImage.complete</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">posterScale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fullImage.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.parameters.width</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tileSizeAtZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">posterScale</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">this.parameters.tileSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tileX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.createPartialImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullImage</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.fullImage.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">createPartialImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sourceImage</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">expectedSourceImageSize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">canvas</span><span class="PUNC">[</span><span class="STRN">"width"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="NAME">canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="NAME">canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">canvas.getContext</span><span class="PUNC">(</span><span class="STRN">'2d'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sourceImage.width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">expectedSourceImageSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">sourceImage.width</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">w0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sourceImage.width</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">dw</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">w0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">sourceImage.height</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">h0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sourceImage.height</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">h0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="NAME">ctx.drawImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sourceImage</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">0.1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">0.1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dw</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="COMM">// DOM INDEX error on iPad.</span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>134</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="NAME">getPartialImageFromDownsampled</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="COMM">// Give up if the poster image has higher resolution.</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoomLevel</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.POSTER_ZOOM_LEVEL</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.parameters.minZoom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getImageKey</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>145</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sourceImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.cachedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>146</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sourceImage</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="NAME">this.requestImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sourceImage</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.createPartialImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sourceImage</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.tileSize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.tileSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.tileSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="PUNC">--</span><span class="NAME">zoomLevel</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>167</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getPartialImageFromDownsampled</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>168</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>169</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="NAME">getEmptyImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"img"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.emptyImage</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>174</span> </span><span class="WHIT"> </span><span class="NAME">tile.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.emptyImage</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="NAME">tile.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"data:image/gif,GIF89a%01%00%01%00%80%00%00%00%00%00%FF%FF%FF!%F9%04%00%00%00%00%00%2C%00%00%00%00%01%00%01%00%00%02%02D%01%00%3B"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>177</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>178</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="NAME">getImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.maxTileX</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.maxTileY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>183</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getEmptyImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>184</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>185</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>186</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getImageKey</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>187</span> </span><span class="WHIT"> </span><span class="NAME">this.lruMap.access</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>188</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>189</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cachedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>190</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.usedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>191</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.dataLoader.loadImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getImageFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="NAME">tile.isPartial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>193</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>194</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>195</span> </span><span class="WHIT"> </span><span class="NAME">this.usedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>196</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.cachedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>197</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">img</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>198</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>199</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>200</span> </span><span class="WHIT"> </span><span class="NAME">this.requestImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>201</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPartialImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>202</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>203</span> </span><span class="WHIT"> </span><span class="NAME">img.isPartial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>204</span> </span><span class="WHIT"> </span><span class="NAME">this.cachedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">img</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>205</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getEmptyImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>207</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">img</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>208</span> </span><span class="WHIT"> </span><span class="NAME">img.isPartial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>209</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>210</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>211</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">img</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>212</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>213</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>214</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>215</span> </span><span class="WHIT"> </span><span class="NAME">requestImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>216</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getImageKey</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>217</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.requestedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>218</span> </span><span class="WHIT"> </span><span class="NAME">this.imageRequests</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>219</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>220</span> </span><span class="WHIT"> </span><span class="NAME">this.requestedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>221</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters.dataLoader.loadImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getImageFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>222</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">that.requestedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>223</span> </span><span class="WHIT"> </span><span class="NAME">that.imageRequests</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>224</span> </span><span class="WHIT"> </span><span class="NAME">tile.isPartial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>225</span> </span><span class="WHIT"> </span><span class="NAME">that.cachedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>226</span> </span><span class="WHIT"> </span><span class="NAME">that.fireOnLoad</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>227</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>228</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>229</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>230</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>231</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>232</span> * Fires the onload event, if it hasn't been fired for at least 50 ms
+<span class='line'>233</span> */</span><span class="WHIT">
+<span class='line'>234</span> </span><span class="WHIT"> </span><span class="NAME">fireOnLoad</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>235</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>236</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.imageRequests</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">now.getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.lastOnLoadFiredAt</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>237</span> </span><span class="WHIT"> </span><span class="NAME">this.purgeCache</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>238</span> </span><span class="WHIT"> </span><span class="NAME">this.lastOnLoadFiredAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">now.getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>239</span> </span><span class="WHIT"> </span><span class="NAME">this.onLoaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>240</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>241</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>242</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>243</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>244</span> * Removes the least-recently used objects from the cache,
+<span class='line'>245</span> * if the size of the cache exceeds the maximum cache size.
+<span class='line'>246</span> * A maximum of four objects will be removed per call.
+<span class='line'>247</span> *
+<span class='line'>248</span> * @private
+<span class='line'>249</span> */</span><span class="WHIT">
+<span class='line'>250</span> </span><span class="WHIT"> </span><span class="NAME">purgeCache</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>251</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>252</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.lruMap.getSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.maxCacheSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>253</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">leastUsed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.lruMap.leastUsed</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>254</span> </span><span class="WHIT"> </span><span class="NAME">this.lruMap.remove</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">leastUsed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>255</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.cachedImages</span><span class="PUNC">[</span><span class="NAME">leastUsed</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>256</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>257</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>258</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>259</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>260</span> </span><span class="WHIT"> </span><span class="NAME">getImageKey</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>261</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"I"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>262</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>263</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>264</span> </span><span class="WHIT"> </span><span class="NAME">getImageFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>265</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.fileSystem.getImageFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>266</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>267</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>268</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>269</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageVRTileCache.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageVRTileCache.js.html
new file mode 100644
index 00000000..b318da60
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__ImageVRTileCache.js.html
@@ -0,0 +1,51 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class A VR tile cache backed by a {@link bigshot.ImageTileCache}.
+<span class='line'> 19</span> * @augments bigshot.VRTileCache
+<span class='line'> 20</span> */</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="NAME">bigshot.ImageVRTileCache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 22</span> </span><span class="WHIT"> </span><span class="NAME">this.imageTileCache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.ImageTileCache</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="COMM">// Keep the imageTileCache from wrapping around.</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.setMaxTiles</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">999999</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">999999</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 27</span>
+<span class='line'> 28</span> </span><span class="NAME">bigshot.ImageVRTileCache.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">getTexture</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.getImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">purge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.resetUsed</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 42</span>
+<span class='line'> 43</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.ImageVRTileCache"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.VRTileCache</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__LRUMap.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__LRUMap.js.html
new file mode 100644
index 00000000..3ae2f8a6
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__LRUMap.js.html
@@ -0,0 +1,113 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new, empty, LRUMap instance.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Implementation of a Least-Recently-Used cache map.
+<span class='line'> 21</span> * Used by the ImageTileCache to keep track of cache entries.
+<span class='line'> 22</span> * @constructor
+<span class='line'> 23</span> */</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="NAME">bigshot.LRUMap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 26</span> * Key to last-accessed time mapping.
+<span class='line'> 27</span> *
+<span class='line'> 28</span> * @type Object
+<span class='line'> 29</span> */</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.keyToTime</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 33</span> * Current time counter. Incremented for each access of
+<span class='line'> 34</span> * a key in the map.
+<span class='line'> 35</span> * @type int
+<span class='line'> 36</span> */</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.counter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 40</span> * Current size of the map.
+<span class='line'> 41</span> * @type int
+<span class='line'> 42</span> */</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">this.size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 45</span>
+<span class='line'> 46</span> </span><span class="NAME">bigshot.LRUMap.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 48</span> * Marks access to an item, represented by its key in the map.
+<span class='line'> 49</span> * The key's last-accessed time is updated to the current time
+<span class='line'> 50</span> * and the current time is incremented by one step.
+<span class='line'> 51</span> *
+<span class='line'> 52</span> * @param {String} key the key associated with the accessed item
+<span class='line'> 53</span> */</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">access</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">this.remove</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">this.keyToTime</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.counter</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">this.counter</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">this.size</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 62</span> * Removes a key from the map.
+<span class='line'> 63</span> *
+<span class='line'> 64</span> * @param {String} key the key to remove
+<span class='line'> 65</span> * @returns true iff the key existed in the map.
+<span class='line'> 66</span> * @type boolean
+<span class='line'> 67</span> */</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">remove</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.keyToTime</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.keyToTime</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="PUNC">--</span><span class="NAME">this.size</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 79</span> * Returns the current number of keys in the map.
+<span class='line'> 80</span> * @type int
+<span class='line'> 81</span> */</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="NAME">getSize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.size</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 87</span> * Returns the key in the map with the lowest
+<span class='line'> 88</span> * last-accessed time. This is done as a linear
+<span class='line'> 89</span> * search through the map. It could be done much
+<span class='line'> 90</span> * faster with a sorted map, but unless this becomes
+<span class='line'> 91</span> * a bottleneck it is just not worth the effort.
+<span class='line'> 92</span> * @type String
+<span class='line'> 93</span> */</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">leastUsed</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">least</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.counter</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">leastKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.keyToTime</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.keyToTime</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">least</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">least</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.keyToTime</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="NAME">leastKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">leastKey</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>106</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__LabeledHotspot.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__LabeledHotspot.js.html
new file mode 100644
index 00000000..d83ad7a0
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__LabeledHotspot.js.html
@@ -0,0 +1,72 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new labeled hotspot instance.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class A hotspot with a label under it. The label element can be accessed using
+<span class='line'> 21</span> * the getLabel method and styled as any HTMLElement. See {@link bigshot.HotspotLayer} for
+<span class='line'> 22</span> * examples.
+<span class='line'> 23</span> *
+<span class='line'> 24</span> * @see bigshot.HotspotLayer
+<span class='line'> 25</span> * @param {number} x x-coordinate of the top-left corner, given in full image pixels
+<span class='line'> 26</span> * @param {number} y y-coordinate of the top-left corner, given in full image pixels
+<span class='line'> 27</span> * @param {number} w width of the hotspot, given in full image pixels
+<span class='line'> 28</span> * @param {number} h height of the hotspot, given in full image pixels
+<span class='line'> 29</span> * @param {String} labelText text of the label
+<span class='line'> 30</span> * @augments bigshot.Hotspot
+<span class='line'> 31</span> */</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="NAME">bigshot.LabeledHotspot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">labelText</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.Hotspot.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">this.label.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"relative"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.label.style.display</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"inline-block"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.getElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.label.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">labelText</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">this.labelSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.getElementSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 43</span>
+<span class='line'> 44</span> </span><span class="NAME">bigshot.LabeledHotspot.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 46</span> * Returns the label element.
+<span class='line'> 47</span> *
+<span class='line'> 48</span> * @type HTMLDivElement
+<span class='line'> 49</span> */</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">getLabel</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.label</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">this.layout._super.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.label.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sh</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">this.label.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.labelSize.w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span>
+<span class='line'> 63</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.LabeledHotspot</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.Hotspot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span>
+<span class='line'> 65</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__Layer.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__Layer.js.html
new file mode 100644
index 00000000..2aa65ff3
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__Layer.js.html
@@ -0,0 +1,72 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Abstract interface description for a Layer.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Abstract interface description for a layer.
+<span class='line'> 21</span> */</span><span class="WHIT">
+<span class='line'> 22</span> </span><span class="NAME">bigshot.Layer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 24</span>
+<span class='line'> 25</span> </span><span class="NAME">bigshot.Layer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 27</span> * Returns the layer container.
+<span class='line'> 28</span> *
+<span class='line'> 29</span> * @type HTMLDivElement
+<span class='line'> 30</span> */</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">getContainer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 34</span> * Sets the maximum number of image tiles that will be visible in the image.
+<span class='line'> 35</span> *
+<span class='line'> 36</span> * @param {int} x the number of tiles horizontally
+<span class='line'> 37</span> * @param {int} y the number of tiles vertically
+<span class='line'> 38</span> */</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">setMaxTiles</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 42</span> * Called when the image's viewport is resized.
+<span class='line'> 43</span> *
+<span class='line'> 44</span> * @param {int} w the new width of the viewport, in css pixels
+<span class='line'> 45</span> * @param {int} h the new height of the viewport, in css pixels
+<span class='line'> 46</span> */</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 50</span> * Lays out the layer.
+<span class='line'> 51</span> *
+<span class='line'> 52</span> * @param {number} zoom the zoom level, adjusted for texture stretching
+<span class='line'> 53</span> * @param {number} x0 the x-coordinate of the top-left corner of the top-left tile in css pixels
+<span class='line'> 54</span> * @param {number} y0 the y-coordinate of the top-left corner of the top-left tile in css pixels
+<span class='line'> 55</span> * @param {number} tx0 column number (starting at zero) of the top-left tile
+<span class='line'> 56</span> * @param {number} ty0 row number (starting at zero) of the top-left tile
+<span class='line'> 57</span> * @param {number} size the {@link bigshot.ImageParameters#tileSize} - width of each
+<span class='line'> 58</span> * image tile in pixels - of the image
+<span class='line'> 59</span> * @param {number} stride offset (vertical and horizontal) from the top-left corner
+<span class='line'> 60</span> * of a tile to the next tile's top-left corner.
+<span class='line'> 61</span> * @param {number} opacity the opacity of the layer as a CSS opacity value.
+<span class='line'> 62</span> */</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 65</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__LinkHotspot.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__LinkHotspot.js.html
new file mode 100644
index 00000000..23ab38c4
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__LinkHotspot.js.html
@@ -0,0 +1,49 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new link-hotspot instance.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class A labeled hotspot that takes the user to another
+<span class='line'> 21</span> * location when it is clicked on. See {@link bigshot.HotspotLayer} for
+<span class='line'> 22</span> * examples.
+<span class='line'> 23</span> *
+<span class='line'> 24</span> * @see bigshot.HotspotLayer
+<span class='line'> 25</span> * @param {number} x x-coordinate of the top-left corner, given in full image pixels
+<span class='line'> 26</span> * @param {number} y y-coordinate of the top-left corner, given in full image pixels
+<span class='line'> 27</span> * @param {number} w width of the hotspot, given in full image pixels
+<span class='line'> 28</span> * @param {number} h height of the hotspot, given in full image pixels
+<span class='line'> 29</span> * @param {String} labelText text of the label
+<span class='line'> 30</span> * @param {String} url url to go to on click
+<span class='line'> 31</span> * @augments bigshot.LabeledHotspot
+<span class='line'> 32</span> * @constructor
+<span class='line'> 33</span> */</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="NAME">bigshot.LinkHotspot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">labelText</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.LabeledHotspot.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">labelText</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"click"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">document.location.href</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span>
+<span class='line'> 41</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.LinkHotspot</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.LabeledHotspot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__Object.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__Object.js.html
new file mode 100644
index 00000000..b72f0216
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__Object.js.html
@@ -0,0 +1,100 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class Object-oriented support functions, used to make JavaScript
+<span class='line'> 19</span> * a bit more palatable to a Java-head.
+<span class='line'> 20</span> */</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="NAME">bigshot.Object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 22</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 23</span> * Extends a base class with a derived class.
+<span class='line'> 24</span> *
+<span class='line'> 25</span> * @param {Function} derived the derived-class
+<span class='line'> 26</span> * @param {Function} base the base-class
+<span class='line'> 27</span> */</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">extend</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">derived</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">base</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">base.prototype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">derived.prototype</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">derived.prototype</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">_super</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">base.prototype</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">derived.prototype</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">base.prototype</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 39</span> * Resolves a name relative to &lt;code>self&lt;/code>.
+<span class='line'> 40</span> *
+<span class='line'> 41</span> * @param {String} name the name to resolve
+<span class='line'> 42</span> * @type {Object}
+<span class='line'> 43</span> */</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">resolve</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name.split</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clazz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">self</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">c.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">clazz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clazz</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">clazz</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">validate</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clazzName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iface</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">ifdef</span><span class="WHIT"> </span><span class="NAME">DEBUG</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">console.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Validating "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clazzName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clazz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.resolve</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clazzName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">iface.prototype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">clazz.prototype</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clazzName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" doesn't implement "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">endif</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 66</span> * Utility function to show an object's fields in a message box.
+<span class='line'> 67</span> *
+<span class='line'> 68</span> * @param {Object} o the object
+<span class='line'> 69</span> */</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">alertr</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">sb</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">":"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">alert</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sb</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 79</span> * Utility function to show an object's fields in the console log.
+<span class='line'> 80</span> *
+<span class='line'> 81</span> * @param {Object} o the object
+<span class='line'> 82</span> */</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">logr</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="NAME">sb</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">":"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">console</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="NAME">console.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sb</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 93</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__PointHotspot.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__PointHotspot.js.html
new file mode 100644
index 00000000..f0fb4821
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__PointHotspot.js.html
@@ -0,0 +1,74 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new labeled hotspot instance.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class A point hotspot consisting of an image.
+<span class='line'> 21</span> *
+<span class='line'> 22</span> * @see bigshot.HotspotLayer
+<span class='line'> 23</span> * @param {number} x x-coordinate of the center corner, given in full image pixels
+<span class='line'> 24</span> * @param {number} y y-coordinate of the center corner, given in full image pixels
+<span class='line'> 25</span> * @param {number} w width of the hotspot, given in screen pixels
+<span class='line'> 26</span> * @param {number} h height of the hotspot, given in screen pixels
+<span class='line'> 27</span> * @param {number} xo x-offset, given in screen pixels
+<span class='line'> 28</span> * @param {number} yo y-offset, given in screen pixels
+<span class='line'> 29</span> * @param {HTMLElement} element the HTML element to position
+<span class='line'> 30</span> * @param {String} [imageUrl] the image to use as hotspot sprite
+<span class='line'> 31</span> * @augments bigshot.Hotspot
+<span class='line'> 32</span> */</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="NAME">bigshot.PointHotspot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">yo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">imageUrl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.Hotspot.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.xo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xo</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">this.yo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">yo</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">imageUrl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">el</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">el.style.backgroundImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"url('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">imageUrl</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"')"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">el.style.backgroundRepeat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"no-repeat"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 44</span>
+<span class='line'> 45</span> </span><span class="NAME">bigshot.PointHotspot.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 47</span> * Returns the label element.
+<span class='line'> 48</span> *
+<span class='line'> 49</span> * @type HTMLDivElement
+<span class='line'> 50</span> */</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">getLabel</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.label</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.xo</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zoomFactor</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.yo</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span>
+<span class='line'> 65</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.PointHotspot</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.Hotspot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span>
+<span class='line'> 67</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__SimpleFileSystem.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__SimpleFileSystem.js.html
new file mode 100644
index 00000000..61fdd0a9
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__SimpleFileSystem.js.html
@@ -0,0 +1,65 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new instance of a filesystem adapter for the SimpleImage class.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Filesystem adapter for bigshot.SimpleImage. This class is not
+<span class='line'> 21</span> * supposed to be used outside of the {@link bigshot.SimpleImage} class.
+<span class='line'> 22</span> * @param {bigshot.ImageParameters} parameters the associated image parameters
+<span class='line'> 23</span> * @augments bigshot.FileSystem
+<span class='line'> 24</span> * @see bigshot.SimpleImage
+<span class='line'> 25</span> */</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="NAME">bigshot.SimpleFileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 29</span>
+<span class='line'> 30</span>
+<span class='line'> 31</span> </span><span class="NAME">bigshot.SimpleFileSystem.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">getDescriptor</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">getPosterFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">getFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">getImageFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">getPrefix</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">setPrefix</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.prefix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 56</span>
+<span class='line'> 57</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.SimpleFileSystem"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.FileSystem</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__SimpleImage.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__SimpleImage.js.html
new file mode 100644
index 00000000..d856e49c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__SimpleImage.js.html
@@ -0,0 +1,102 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span>
+<span class='line'> 18</span> </span><span class="COMM">/**
+<span class='line'> 19</span> * Creates a new image viewer. (Note: See {@link bigshot.SimpleImage#dispose} for important information.)
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * @example
+<span class='line'> 22</span> * var bsi = new bigshot.SimpleImage (
+<span class='line'> 23</span> * new bigshot.ImageParameters ({
+<span class='line'> 24</span> * basePath : "myimage.jpg",
+<span class='line'> 25</span> * width : 681,
+<span class='line'> 26</span> * height : 1024,
+<span class='line'> 27</span> * container : document.getElementById ("bigshot_div")
+<span class='line'> 28</span> * }));
+<span class='line'> 29</span> *
+<span class='line'> 30</span> * @param {bigshot.ImageParameters} parameters the image parameters. Required fields are: &lt;code>container&lt;/code>.
+<span class='line'> 31</span> * If the &lt;code>imgElement&lt;/code> parameter is not given, then &lt;code>basePath&lt;/code>, &lt;code>width&lt;/code> and &lt;code>height&lt;/code> are also required. The
+<span class='line'> 32</span> * following parameters are not supported and should be left as defaults: &lt;code>fileSystem&lt;/code>, &lt;code>fileSystemType&lt;/code>,
+<span class='line'> 33</span> * &lt;code>maxTextureMagnification&lt;/code> and &lt;code>tileSize&lt;/code>. &lt;code>wrapX&lt;/code> and &lt;code>wrapY&lt;/code> may only be used if the imgElement is &lt;b>not&lt;/b>
+<span class='line'> 34</span> * set.
+<span class='line'> 35</span> *
+<span class='line'> 36</span> * @param {HTMLImageElement} [imgElement] an img element to use. The element should have &lt;code>style.position = "absolute"&lt;/code>.
+<span class='line'> 37</span> * @see bigshot.ImageBase#dispose
+<span class='line'> 38</span> * @class A zoomable image viewer.
+<span class='line'> 39</span> * @augments bigshot.ImageBase
+<span class='line'> 40</span> */</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="NAME">bigshot.SimpleImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">imgElement</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="NAME">parameters.merge</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">fileSystem</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">fileSystemType</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"simple"</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">maxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">tileSize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1024</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">imgElement</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">parameters.merge</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">imgElement.width</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">height</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">imgElement.height</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">this.imgElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">imgElement</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters.width</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">parameters.height</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"No imgElement and missing width or height in ImageParameters"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.setupFileSystem</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.ImageBase.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 64</span>
+<span class='line'> 65</span> </span><span class="NAME">bigshot.SimpleImage.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">setupLayers</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.imgElement</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'> 69</span> this.imgElement = document.createElement ("img");
+<span class='line'> 70</span> this.imgElement.src = this.parameters.basePath;
+<span class='line'> 71</span> this.imgElement.style.position = "absolute";
+<span class='line'> 72</span> */</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">this.imgElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="NAME">this.imgElement.style.backgroundImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"url('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameters.basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"')"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">this.imgElement.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.parameters.wrapX</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.parameters.wrapY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="NAME">this.imgElement.style.backgroundRepeat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"no-repeat"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.wrapX</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.parameters.wrapY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.imgElement.style.backgroundRepeat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"repeat-x"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.parameters.wrapX</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.parameters.wrapY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="NAME">this.imgElement.style.backgroundRepeat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"repeat-y"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.wrapX</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.parameters.wrapY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">this.imgElement.style.backgroundRepeat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"repeat"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">this.addLayer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.HTMLDivElementLayer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.imgElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.height</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.wrapX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.wrapY</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span>
+<span class='line'> 93</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.SimpleImage</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.ImageBase</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 94</span>
+<span class='line'> 95</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__TextureTileCache.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__TextureTileCache.js.html
new file mode 100644
index 00000000..25103e1a
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__TextureTileCache.js.html
@@ -0,0 +1,213 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new cache instance.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Tile texture cache for a {@link bigshot.VRFace}.
+<span class='line'> 21</span> * @augments bigshot.VRTileCache
+<span class='line'> 22</span> * @param {function()} onLoaded function that is called whenever a texture tile has been loaded
+<span class='line'> 23</span> * @param {function()} onCacheInit function that is called when the texture cache is fully initialized
+<span class='line'> 24</span> * @param {bigshot.VRPanoramaParameters} parameters image parameters
+<span class='line'> 25</span> * @param {bigshot.WebGL} _webGl WebGL instance to use
+<span class='line'> 26</span> */</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="NAME">bigshot.TextureTileCache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onLoaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">_webGl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_webGl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 32</span> * Reduced-resolution preview of the full image.
+<span class='line'> 33</span> * Loaded from the "poster" image created by
+<span class='line'> 34</span> * MakeImagePyramid
+<span class='line'> 35</span> *
+<span class='line'> 36</span> * @private
+<span class='line'> 37</span> * @type HTMLImageElement
+<span class='line'> 38</span> */</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.fullImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.dataLoader.loadImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters.fileSystem.getPosterFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 42</span> * Maximum number of WebGL textures in the cache. This is the
+<span class='line'> 43</span> * "L1" cache.
+<span class='line'> 44</span> *
+<span class='line'> 45</span> * @private
+<span class='line'> 46</span> * @type int
+<span class='line'> 47</span> */</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTextureCacheSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">512</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 51</span> * Maximum number of HTMLImageElement images in the cache. This is the
+<span class='line'> 52</span> * "L2" cache.
+<span class='line'> 53</span> *
+<span class='line'> 54</span> * @private
+<span class='line'> 55</span> * @type int
+<span class='line'> 56</span> */</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">this.maxImageCacheSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2048</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.cachedTextures</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">this.cachedImages</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">this.requestedImages</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">this.lastOnLoadFiredAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">this.imageRequests</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.tileSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">this.imageLruMap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.LRUMap</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">this.textureLruMap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.LRUMap</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">this.onLoaded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">onLoaded</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">this.browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">this.disposed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 70</span>
+<span class='line'> 71</span> </span><span class="NAME">bigshot.TextureTileCache.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">getPartialTexture</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullImage.complete</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">canvas</span><span class="PUNC">[</span><span class="STRN">"width"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="NAME">canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ctx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">canvas.getContext</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"2d"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">posterScale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.posterSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">posterWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">posterScale</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">this.parameters.width</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">posterHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">posterScale</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">this.parameters.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tileSizeAtZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">posterScale</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.tileSize</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.parameters.overlap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tileX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">posterWidth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">posterWidth</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">dw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sy</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sh</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">posterHeight</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">sh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">posterHeight</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.partialImageSize</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sh</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileSizeAtZoom</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">ctx.drawImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullImage</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sy</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sh</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.webGl.createImageTextureFromImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">canvas</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.textureMinFilter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.textureMagFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="NAME">setCachedTexture</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newTexture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cachedTextures</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.deleteTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cachedTextures</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">this.cachedTextures</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newTexture</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="NAME">getTexture</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getImageKey</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="NAME">this.textureLruMap.access</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="NAME">this.imageLruMap.access</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cachedTextures</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.cachedTextures</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cachedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="NAME">this.setCachedTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl.createImageTextureFromImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cachedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.textureMinFilter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.textureMagFilter</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.cachedTextures</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="NAME">this.requestImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">partial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPartialTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">partial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>134</span> </span><span class="WHIT"> </span><span class="NAME">this.setCachedTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">partial</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">partial</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="NAME">requestImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getImageKey</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.requestedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="NAME">this.imageRequests</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>145</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters.dataLoader.loadImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getImageFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>146</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.disposed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="NAME">that.cachedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="NAME">that.setCachedTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.webGl.createImageTextureFromImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.parameters.textureMinFilter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.parameters.textureMagFilter</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">that.requestedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="NAME">that.imageRequests</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.imageRequests</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">now.getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.lastOnLoadFiredAt</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">that.lastOnLoadFiredAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">now.getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="NAME">that.onLoaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">this.requestedImages</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="NAME">purge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="NAME">this.purgeCache</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.textureLruMap</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.cachedTextures</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.maxTextureCacheSize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">leastUsedKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="NAME">that.webGl.deleteTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.cachedTextures</span><span class="PUNC">[</span><span class="NAME">leastUsedKey</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>167</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>168</span> </span><span class="WHIT"> </span><span class="NAME">this.purgeCache</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.imageLruMap</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.cachedImages</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.maxImageCacheSize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">leastUsedKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>169</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="NAME">purgeCache</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lruMap</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cache</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxCacheSize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onEvict</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">64</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>174</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lruMap.getSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">maxCacheSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">leastUsed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lruMap.leastUsed</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="NAME">lruMap.remove</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">leastUsed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>177</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onEvict</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>178</span> </span><span class="WHIT"> </span><span class="NAME">onEvict</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">leastUsed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">cache</span><span class="PUNC">[</span><span class="NAME">leastUsed</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>183</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>184</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>185</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>186</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>187</span> </span><span class="WHIT"> </span><span class="NAME">getImageKey</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>188</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"I"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileX</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>189</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>190</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>191</span> </span><span class="WHIT"> </span><span class="NAME">getImageFilename</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.fileSystem.getImageFilename</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>193</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>194</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>195</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>196</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>197</span> </span><span class="WHIT"> </span><span class="NAME">this.disposed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>198</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.cachedTextures</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>199</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.deleteTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cachedTextures</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>200</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>201</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>202</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>203</span>
+<span class='line'>204</span>
+<span class='line'>205</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.TextureTileCache"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.VRTileCache</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>206</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__TexturedQuad.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__TexturedQuad.js.html
new file mode 100644
index 00000000..af49c585
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__TexturedQuad.js.html
@@ -0,0 +1,29 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class Abstract base for textured quads.
+<span class='line'> 19</span> */</span><span class="WHIT">
+<span class='line'> 20</span> </span><span class="NAME">bigshot.TexturedQuad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 22</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__TexturedQuadScene.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__TexturedQuadScene.js.html
new file mode 100644
index 00000000..9d48897c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__TexturedQuadScene.js.html
@@ -0,0 +1,41 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class Abstract base for textured quad scenes.
+<span class='line'> 19</span> */</span><span class="WHIT">
+<span class='line'> 20</span> </span><span class="NAME">bigshot.TexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 22</span>
+<span class='line'> 23</span> </span><span class="NAME">bigshot.TexturedQuadScene.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 25</span> * Adds a quad to the scene.
+<span class='line'> 26</span> */</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">addQuad</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">quad</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 30</span> * Renders the scene.
+<span class='line'> 31</span> */</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__TileLayer.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__TileLayer.js.html
new file mode 100644
index 00000000..329bcb56
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__TileLayer.js.html
@@ -0,0 +1,172 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new image layer.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @param {bigshot.ImageBase} image the image that this layer is part of
+<span class='line'> 21</span> * @param {bigshot.ImageParameters} parameters the associated image parameters
+<span class='line'> 22</span> * @param {number} w the current width in css pixels of the viewport
+<span class='line'> 23</span> * @param {number} h the current height in css pixels of the viewport
+<span class='line'> 24</span> * @param {bigshot.ImageTileCache} itc the tile cache to use
+<span class='line'> 25</span> * @class A tiled, zoomable image layer.
+<span class='line'> 26</span> * @constructor
+<span class='line'> 27</span> */</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="NAME">bigshot.TileLayer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">image</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">itc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.rows</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image.createLayerContainer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.parentContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image.getContainer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">this.imageTileCache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">itc</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.resize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 41</span>
+<span class='line'> 42</span> </span><span class="NAME">bigshot.TileLayer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">getContainer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">this.pixelWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">this.pixelHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parentContainer.clientHeight</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">this.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">this.rows</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.removeAllChildren</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">r</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">row</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">c</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tileAnchor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">tileAnchor.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">tileAnchor.style.overflow</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"hidden"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">tileAnchor.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">tileAnchor.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"relative"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.border</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"hidden"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.visibility</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"hidden"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">tile.bigshotData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="NAME">row.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">this.container.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileAnchor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="NAME">tileAnchor.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">this.rows.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">row</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="NAME">zoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">zoom</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 82</span>
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.resetUsed</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.h</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">r</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.w</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">c</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rows</span><span class="PUNC">[</span><span class="NAME">r</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bigshotData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tile.bigshotData</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.pixelWidth</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.pixelHeight</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshotData.visible</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.visible</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.visibility</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"hidden"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">bigshotData.visible</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.visible</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="NAME">tile.style.visibility</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"visible"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tx0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ty0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.wrapX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.maxTileX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.maxTileX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.maxTileX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.wrapY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.maxTileY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.maxTileY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.maxTileY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">imageKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">zoom</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isOutside</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.maxTileX</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.maxTileY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isOutside</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">bigshotData.isOutside</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.getImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.removeAllChildren</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="NAME">tile.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">image</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.isOutside</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.imageKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"EMPTY"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>134</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.image.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.image.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.getImage</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.isOutside</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshotData.imageKey</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">imageKey</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">bigshotData.isPartial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.removeAllChildren</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="NAME">tile.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">image</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>145</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.imageKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">imageKey</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>146</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.isPartial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">image.isPartial</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.image.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="NAME">bigshotData.image.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">stride</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">setMaxTiles</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mtx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mty</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="NAME">this.imageTileCache.setMaxTiles</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mtx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mty</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>162</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>163</span>
+<span class='line'>164</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.TileLayer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.Layer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>165</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__TimedWeakReference.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__TimedWeakReference.js.html
new file mode 100644
index 00000000..6afae98f
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__TimedWeakReference.js.html
@@ -0,0 +1,145 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 17</span>
+<span class='line'> 18</span> </span><span class="COMM">/**
+<span class='line'> 19</span> * Creates a new instance of the cached resource. May return
+<span class='line'> 20</span> * null, in which case that value is cached. The function
+<span class='line'> 21</span> * may be called multiple times, but a corresponding call to
+<span class='line'> 22</span> * the dispose function will always occur inbetween.
+<span class='line'> 23</span> * @name bigshot.TimedWeakReference.Create
+<span class='line'> 24</span> * @function
+<span class='line'> 25</span> */</span><span class="WHIT">
+<span class='line'> 26</span>
+<span class='line'> 27</span> </span><span class="COMM">/**
+<span class='line'> 28</span> * Disposes a of the cached resource.
+<span class='line'> 29</span> * @name bigshot.TimedWeakReference.Dispose
+<span class='line'> 30</span> * @function
+<span class='line'> 31</span> * @param {Object} resource the resource that was created
+<span class='line'> 32</span> * by the create function
+<span class='line'> 33</span> */</span><span class="WHIT">
+<span class='line'> 34</span>
+<span class='line'> 35</span> </span><span class="COMM">/**
+<span class='line'> 36</span> * Creates a new instance.
+<span class='line'> 37</span> *
+<span class='line'> 38</span> * @class Caches a lazy-created resource for a given time before
+<span class='line'> 39</span> * disposing it.
+<span class='line'> 40</span> *
+<span class='line'> 41</span> * @param {bigshot.TimedWeakReference.Create} create a function that creates the
+<span class='line'> 42</span> * held resource. May be called multiple times, but not without a call to
+<span class='line'> 43</span> * dispose inbetween.
+<span class='line'> 44</span> * @param {bigshot.TimedWeakReference.Dispose} dispose a function that disposes the
+<span class='line'> 45</span> * resource created by create.
+<span class='line'> 46</span> * @param {int} interval the polling interval in milliseconds. If the last
+<span class='line'> 47</span> * access time is further back than one interval, the held resource is
+<span class='line'> 48</span> * disposed (and will be re-created
+<span class='line'> 49</span> * on the next call to get).
+<span class='line'> 50</span> */</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="NAME">bigshot.TimedWeakReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">create</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">interval</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">this.object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.hasObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">this.fnCreate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">create</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">this.fnDispose</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">this.lastAccess</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">this.hasTimer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.interval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">interval</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span>
+<span class='line'> 61</span> </span><span class="NAME">bigshot.TimedWeakReference.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 63</span> * Disposes of this instance. The resource is disposed.
+<span class='line'> 64</span> */</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">this.clear</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 70</span> * Gets the resource. The resource is created if needed.
+<span class='line'> 71</span> * The last access time is updated.
+<span class='line'> 72</span> */</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">get</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hasObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">this.hasObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">this.object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fnCreate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="NAME">this.startTimer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.lastAccess</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.object</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 84</span> * Forcibly disposes the held resource, if any.
+<span class='line'> 85</span> */</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="NAME">clear</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">this.hasObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="NAME">this.fnDispose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">this.object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">this.stopTimer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 96</span> * Stops the polling timer if it is running.
+<span class='line'> 97</span> * @private
+<span class='line'> 98</span> */</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">stopTimer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasTimer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">clearTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.timerId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="NAME">this.hasTimer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>107</span> * Starts the polling timer if it isn't already running.
+<span class='line'>108</span> * @private
+<span class='line'>109</span> */</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="NAME">startTimer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hasTimer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="NAME">this.hasTimer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="NAME">this.timerId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="NAME">that.hasTimer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="NAME">that.update</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.interval</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>122</span> * Disposes of the held resource if it hasn't been
+<span class='line'>123</span> * accessed in {@link #interval} milliseconds.
+<span class='line'>124</span> * @private
+<span class='line'>125</span> */</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="NAME">update</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.lastAccess</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.interval</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="NAME">this.clear</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="NAME">this.startTimer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>134</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>137</span>
+<span class='line'>138</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__TransformStack.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__TransformStack.js.html
new file mode 100644
index 00000000..498d3327
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__TransformStack.js.html
@@ -0,0 +1,165 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new transformation stack, initialized to the identity transform.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class A 3D transformation stack.
+<span class='line'> 21</span> */</span><span class="WHIT">
+<span class='line'> 22</span> </span><span class="NAME">bigshot.TransformStack</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 24</span> * The current transform matrix.
+<span class='line'> 25</span> *
+<span class='line'> 26</span> * @type Matrix
+<span class='line'> 27</span> */</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 31</span> * The object-to-world transform matrix stack.
+<span class='line'> 32</span> *
+<span class='line'> 33</span> * @type Matrix[]
+<span class='line'> 34</span> */</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrixStack</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.reset</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 39</span>
+<span class='line'> 40</span> </span><span class="NAME">bigshot.TransformStack.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 42</span> * Pushes the current world transform onto the stack
+<span class='line'> 43</span> * and returns a new, identical one.
+<span class='line'> 44</span> *
+<span class='line'> 45</span> * @return the new world transform matrix
+<span class='line'> 46</span> * @param {Matrix} [matrix] the new world transform.
+<span class='line'> 47</span> * If omitted, the current is used
+<span class='line'> 48</span> * @type Matrix
+<span class='line'> 49</span> */</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">push</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">matrix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">matrix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrixStack.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">matrix.dup</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matrix.dup</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">mvMatrix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrixStack.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mvMatrix.dup</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">mvMatrix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 62</span> * Pops the last-pushed world transform off the stack, thereby restoring it.
+<span class='line'> 63</span> *
+<span class='line'> 64</span> * @type Matrix
+<span class='line'> 65</span> * @return the previously-pushed matrix
+<span class='line'> 66</span> */</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">pop</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mvMatrixStack.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Invalid popMatrix!"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mvMatrixStack.pop</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">mvMatrix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 76</span> * Resets the world transform to the identity transform.
+<span class='line'> 77</span> */</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="NAME">reset</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Matrix.I</span><span class="PUNC">(</span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 83</span> * Multiplies the current world transform with a matrix.
+<span class='line'> 84</span> *
+<span class='line'> 85</span> * @param {Matrix} matrix the matrix to multiply with
+<span class='line'> 86</span> */</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="NAME">multiply</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">matrix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">matrix.x</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mvMatrix</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 92</span> * Adds a translation to the world transform matrix.
+<span class='line'> 93</span> *
+<span class='line'> 94</span> * @param {bigshot.Point3D} vector the translation vector
+<span class='line'> 95</span> */</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="NAME">translate</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vector</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Matrix.Translation</span><span class="PUNC">(</span><span class="NAME">$V</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">vector.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vector.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vector.z</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ensure4x4</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">this.multiply</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>102</span> * Adds a rotation to the world transform matrix.
+<span class='line'>103</span> *
+<span class='line'>104</span> * @param {number} ang the angle in degrees to rotate
+<span class='line'>105</span> * @param {bigshot.Point3D} vector the rotation vector
+<span class='line'>106</span> */</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="NAME">rotate</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ang</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vector</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">arad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ang</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Matrix.Rotation</span><span class="PUNC">(</span><span class="NAME">arad</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">$V</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">vector.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vector.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vector.z</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ensure4x4</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="NAME">this.multiply</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>114</span> * Adds a rotation around the x-axis to the world transform matrix.
+<span class='line'>115</span> *
+<span class='line'>116</span> * @param {number} ang the angle in degrees to rotate
+<span class='line'>117</span> */</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">rotateX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ang</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="NAME">this.rotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ang</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>123</span> * Adds a rotation around the y-axis to the world transform matrix.
+<span class='line'>124</span> *
+<span class='line'>125</span> * @param {number} ang the angle in degrees to rotate
+<span class='line'>126</span> */</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="NAME">rotateY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ang</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="NAME">this.rotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ang</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>132</span> * Adds a rotation around the z-axis to the world transform matrix.
+<span class='line'>133</span> *
+<span class='line'>134</span> * @param {number} ang the angle in degrees to rotate
+<span class='line'>135</span> */</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="NAME">rotateZ</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ang</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="NAME">this.rotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ang</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>141</span> * Multiplies the current matrix with a
+<span class='line'>142</span> * perspective transformation matrix.
+<span class='line'>143</span> *
+<span class='line'>144</span> * @param {number} fovy vertical field of view
+<span class='line'>145</span> * @param {number} aspect viewport aspect ratio
+<span class='line'>146</span> * @param {number} znear near image plane
+<span class='line'>147</span> * @param {number} zfar far image plane
+<span class='line'>148</span> */</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="NAME">perspective</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fovy</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aspect</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">znear</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zfar</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">makePerspective</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fovy</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aspect</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">znear</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zfar</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="NAME">this.multiply</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="NAME">matrix</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.mvMatrix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>158</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__VREvent.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__VREvent.js.html
new file mode 100644
index 00000000..028bc795
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__VREvent.js.html
@@ -0,0 +1,99 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates an image event.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Base class for events dispatched by bigshot.VRPanorama.
+<span class='line'> 21</span> * @param {Object} data a data object whose fields will be used to set the
+<span class='line'> 22</span> * corresponding fields of the event object.
+<span class='line'> 23</span> * @extends bigshot.Event
+<span class='line'> 24</span> * @see bigshot.VRPanorama
+<span class='line'> 25</span> */</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="NAME">bigshot.VREvent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.Event.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 29</span>
+<span class='line'> 30</span> </span><span class="COMM">/**
+<span class='line'> 31</span> * The yaw coordinate of the event, if any.
+<span class='line'> 32</span> *
+<span class='line'> 33</span> * @name bigshot.VREvent#yaw
+<span class='line'> 34</span> * @field
+<span class='line'> 35</span> * @type number
+<span class='line'> 36</span> */</span><span class="WHIT">
+<span class='line'> 37</span>
+<span class='line'> 38</span> </span><span class="COMM">/**
+<span class='line'> 39</span> * The pitch coordinate of the event, if any.
+<span class='line'> 40</span> *
+<span class='line'> 41</span> * @name bigshot.VREvent#pitch
+<span class='line'> 42</span> * @field
+<span class='line'> 43</span> * @type number
+<span class='line'> 44</span> */</span><span class="WHIT">
+<span class='line'> 45</span>
+<span class='line'> 46</span> </span><span class="COMM">/**
+<span class='line'> 47</span> * The client X coordinate of the event, if any.
+<span class='line'> 48</span> *
+<span class='line'> 49</span> * @name bigshot.VREvent#clientX
+<span class='line'> 50</span> * @field
+<span class='line'> 51</span> * @type number
+<span class='line'> 52</span> */</span><span class="WHIT">
+<span class='line'> 53</span>
+<span class='line'> 54</span> </span><span class="COMM">/**
+<span class='line'> 55</span> * The client Y coordinate of the event, if any.
+<span class='line'> 56</span> *
+<span class='line'> 57</span> * @name bigshot.VREvent#clientY
+<span class='line'> 58</span> * @field
+<span class='line'> 59</span> * @type number
+<span class='line'> 60</span> */</span><span class="WHIT">
+<span class='line'> 61</span>
+<span class='line'> 62</span> </span><span class="COMM">/**
+<span class='line'> 63</span> * The local X coordinate of the event, if any.
+<span class='line'> 64</span> *
+<span class='line'> 65</span> * @name bigshot.VREvent#localX
+<span class='line'> 66</span> * @field
+<span class='line'> 67</span> * @type number
+<span class='line'> 68</span> */</span><span class="WHIT">
+<span class='line'> 69</span>
+<span class='line'> 70</span> </span><span class="COMM">/**
+<span class='line'> 71</span> * The local Y coordinate of the event, if any.
+<span class='line'> 72</span> *
+<span class='line'> 73</span> * @name bigshot.VREvent#localY
+<span class='line'> 74</span> * @field
+<span class='line'> 75</span> * @type number
+<span class='line'> 76</span> */</span><span class="WHIT">
+<span class='line'> 77</span>
+<span class='line'> 78</span> </span><span class="COMM">/**
+<span class='line'> 79</span> * A x,y,z triplet specifying a 3D ray from the viewer in the direction the
+<span class='line'> 80</span> * event took place. The same as the yaw and pitch fields, but in Cartesian
+<span class='line'> 81</span> * coordinates.
+<span class='line'> 82</span> *
+<span class='line'> 83</span> * @name bigshot.VREvent#ray
+<span class='line'> 84</span> * @field
+<span class='line'> 85</span> * @type xyz-triplet
+<span class='line'> 86</span> */</span><span class="WHIT">
+<span class='line'> 87</span>
+<span class='line'> 88</span>
+<span class='line'> 89</span> </span><span class="NAME">bigshot.VREvent.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span>
+<span class='line'> 92</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.VREvent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.Event</span><span class="PUNC">)</span><span class="PUNC">;</span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__VRFace.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRFace.js.html
new file mode 100644
index 00000000..5b51c587
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRFace.js.html
@@ -0,0 +1,332 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new VR cube face.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class a VR cube face. The {@link bigshot.VRPanorama} instance holds
+<span class='line'> 21</span> * six of these.
+<span class='line'> 22</span> *
+<span class='line'> 23</span> * @param {bigshot.VRPanorama} owner the VR panorama this face is part of.
+<span class='line'> 24</span> * @param {String} key the identifier for the face. "f" is front, "b" is back, "u" is
+<span class='line'> 25</span> * up, "d" is down, "l" is left and "r" is right.
+<span class='line'> 26</span> * @param {bigshot.Point3D} topLeft_ the top-left corner of the quad.
+<span class='line'> 27</span> * @param {number} width_ the length of the sides of the face, expressed in multiples of u and v.
+<span class='line'> 28</span> * @param {bigshot.Point3D} u basis vector going from the top left corner along the top edge of the face
+<span class='line'> 29</span> * @param {bigshot.Point3D} v basis vector going from the top left corner along the left edge of the face
+<span class='line'> 30</span> */</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="NAME">bigshot.VRFace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">owner</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft_</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width_</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onLoaded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">this.owner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">owner</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">this.key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.topLeft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">topLeft_</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">width_</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.u</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.updated</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Object</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.owner.getParameters</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.owner.getParameters</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.setupFileSystem</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters.fileSystem.setPrefix</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"face_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters.merge</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.fileSystem.getDescriptor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 52</span> * Texture cache.
+<span class='line'> 53</span> *
+<span class='line'> 54</span> * @private
+<span class='line'> 55</span> */</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">this.tileCache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">owner.renderer.createTileCache</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="NAME">that.updated</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">owner.renderUpdated</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onLoaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">this.fullSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.width</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">this.overlap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.overlap</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.tileSize</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">this.minDivisions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fullZoom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullSize</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.overlap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.LN2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">singleTile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.log</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.overlap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.LN2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">this.maxDivisions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fullZoom</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">singleTile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTesselation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.maxTesselation</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this.parameters.maxTesselation</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.maxDivisions</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 71</span>
+<span class='line'> 72</span> </span><span class="NAME">bigshot.VRFace.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="NAME">browser</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">this.tileCache.dispose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 80</span> * Utility function to do a multiply-and-add of a 3d point.
+<span class='line'> 81</span> *
+<span class='line'> 82</span> * @private
+<span class='line'> 83</span> * @param p {bigshot.Point3D} the point to multiply
+<span class='line'> 84</span> * @param m {number} the number to multiply the elements of p with
+<span class='line'> 85</span> * @param a {bigshot.Point3D} the point to add
+<span class='line'> 86</span> * @return p * m + a
+<span class='line'> 87</span> */</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="NAME">pt3dMultAdd</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p.x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">a.x</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p.y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">a.y</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p.z</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">a.z</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 97</span> * Utility function to do an element-wise multiply of a 3d point.
+<span class='line'> 98</span> *
+<span class='line'> 99</span> * @private
+<span class='line'>100</span> * @param p {bigshot.Point3D} the point to multiply
+<span class='line'>101</span> * @param m {number} the number to multiply the elements of p with
+<span class='line'>102</span> * @return p * m
+<span class='line'>103</span> */</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="NAME">pt3dMult</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p.x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p.y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p.z</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>113</span> * Creates a textured quad.
+<span class='line'>114</span> *
+<span class='line'>115</span> * @private
+<span class='line'>116</span> */</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">generateFace</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.overlap</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tileCache.getTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">this.maxDivisions</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="NAME">scene.addQuad</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.owner.renderer.createTexturedQuad</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="NAME">this.pt3dMult</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="NAME">this.pt3dMult</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="NAME">texture</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="NAME">VISIBLE_NONE</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="NAME">VISIBLE_SOME</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="NAME">VISIBLE_ALL</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>134</span> * Tests whether the point is in the axis-aligned rectangle.
+<span class='line'>135</span> *
+<span class='line'>136</span> * @private
+<span class='line'>137</span> * @param point the point
+<span class='line'>138</span> * @param min top left corner of the rectangle
+<span class='line'>139</span> * @param max bottom right corner of the rectangle
+<span class='line'>140</span> */</span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="NAME">pointInRect</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">min</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">max</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point.x</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">min.x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">point.y</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">min.y</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">point.x</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">max.x</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">point.y</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">max.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>145</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>146</span> * Intersects a quadrilateral with the view frustum.
+<span class='line'>147</span> * The test is a simple rectangle intersection of the AABB of
+<span class='line'>148</span> * the transformed quad with the viewport.
+<span class='line'>149</span> *
+<span class='line'>150</span> * @private
+<span class='line'>151</span> * @return VISIBLE_NONE, VISIBLE_SOME or VISIBLE_ALL
+<span class='line'>152</span> */</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="NAME">intersectWithView</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">intersectWithView</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">transformed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">numNull</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tfl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">transformed.length</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tfl</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">numNull</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="NAME">tf.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">numNull</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.VISIBLE_NONE</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>167</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>168</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tf</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>169</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">minY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tf</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">maxY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>174</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewMinX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewMinY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>177</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewMaxX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.viewportWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>178</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">viewMaxY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.viewportHeight</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pointsInViewport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tf.length</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>183</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tf</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>184</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tiy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tf</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>185</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>186</span> </span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tix</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">tix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>187</span> </span><span class="WHIT"> </span><span class="NAME">minY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minY</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tiy</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">minY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">tiy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>188</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>189</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>190</span> </span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">tix</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">tix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>191</span> </span><span class="WHIT"> </span><span class="NAME">maxY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxY</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">tiy</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">maxY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">tiy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>193</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>194</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iminX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">viewMinX</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">viewMinX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>195</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iminY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minY</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">viewMinY</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">minY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">viewMinY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>196</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>197</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">imaxX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">viewMaxX</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">viewMaxX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>198</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">imaxY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxY</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">viewMaxY</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">maxY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">viewMaxY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>199</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>200</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">iminX</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">imaxX</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">iminY</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">imaxY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>201</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.VISIBLE_SOME</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>202</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>203</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>204</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.VISIBLE_NONE</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>205</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>206</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>207</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>208</span> * Quick and dirty computation of the on-screen distance in pixels
+<span class='line'>209</span> * between two 2d points. We use the max of the x and y differences.
+<span class='line'>210</span> * In case a point is null (that is, it's not on the screen), we
+<span class='line'>211</span> * return an arbitrarily high number.
+<span class='line'>212</span> *
+<span class='line'>213</span> * @private
+<span class='line'>214</span> */</span><span class="WHIT">
+<span class='line'>215</span> </span><span class="WHIT"> </span><span class="NAME">screenDistance</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">screenDistance</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>216</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p0</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>217</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>218</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>219</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p0.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1.x</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p0.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1.y</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>220</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>221</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>222</span> </span><span class="WHIT"> </span><span class="NAME">transformToScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>223</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.owner.renderer.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>224</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>225</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>226</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>227</span> * Optionally subdivides a quad into fourn new quads, depending on the
+<span class='line'>228</span> * position and on-screen size of the quad.
+<span class='line'>229</span> *
+<span class='line'>230</span> * @private
+<span class='line'>231</span> * @param {bigshot.WebGLTexturedQuadScene} scene the scene to add quads to
+<span class='line'>232</span> * @param {bigshot.Point3D} topLeft the top left corner of this quad
+<span class='line'>233</span> * @param {number} width the sides of the quad, expressed in multiples of u and v
+<span class='line'>234</span> * @param {int} divisions the current number of divisions done (increases by one for each
+<span class='line'>235</span> * split-in-four).
+<span class='line'>236</span> * @param {int} tx the tile column this face is in
+<span class='line'>237</span> * @param {int} ty the tile row this face is in
+<span class='line'>238</span> */</span><span class="WHIT">
+<span class='line'>239</span> </span><span class="WHIT"> </span><span class="NAME">generateSubdivisionFace</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">generateSubdivisionFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>240</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">transformed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>241</span> </span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>242</span> </span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">topLeft</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>243</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">topRight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pt3dMultAdd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">topRight</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>245</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>246</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bottomLeft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pt3dMultAdd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bottomLeft</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>248</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>249</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bottomRight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pt3dMultAdd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topRight</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>250</span> </span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bottomRight</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>251</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>252</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>253</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">numVisible</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.intersectWithView</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">transformed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>254</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>255</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">numVisible</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">this.VISIBLE_NONE</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>256</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>257</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>258</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>259</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dmax</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>260</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">transformed.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>261</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>262</span> </span><span class="WHIT"> </span><span class="NAME">dmax</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.screenDistance</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NAME">next</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dmax</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>263</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>264</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>265</span> </span><span class="WHIT"> </span><span class="COMM">// Convert the distance to physical pixels</span><span class="WHIT">
+<span class='line'>266</span> </span><span class="WHIT"> </span><span class="NAME">dmax</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.owner.browser.getDevicePixelScale</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>267</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>268</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">divisions</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.minDivisions</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>269</span> </span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>270</span> </span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>271</span> </span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>272</span> </span><span class="WHIT"> </span><span class="NAME">dmax</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.owner.maxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.overlap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>273</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.maxDivisions</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.maxTesselation</span><span class="WHIT">
+<span class='line'>274</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>275</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>276</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">center</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pt3dMultAdd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.u.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.v.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.u.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.v.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.u.z</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.v.z</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>277</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">midTop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pt3dMultAdd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>278</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">midLeft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pt3dMultAdd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>279</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>280</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tCenter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">center</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>281</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tMidLeft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">midLeft</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>282</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tMidTop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">midTop</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>283</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tMidRight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pt3dMultAdd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">midLeft</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>284</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tMidBottom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pt3dMultAdd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">midTop</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>285</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>286</span> </span><span class="WHIT"> </span><span class="NAME">this.generateSubdivisionFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tMidTop</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tCenter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tMidLeft</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>287</span> </span><span class="WHIT"> </span><span class="NAME">this.generateSubdivisionFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">midTop</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">tMidTop</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tMidRight</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tCenter</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>288</span> </span><span class="WHIT"> </span><span class="NAME">this.generateSubdivisionFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">midLeft</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">tMidLeft</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tCenter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tMidBottom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>289</span> </span><span class="WHIT"> </span><span class="NAME">this.generateSubdivisionFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">center</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">tCenter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tMidRight</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">transformed</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tMidBottom</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>290</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>291</span> </span><span class="WHIT"> </span><span class="NAME">this.generateFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topLeft</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ty</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">divisions</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>292</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>293</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>294</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>295</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>296</span> * Tests if the face has had any updated texture
+<span class='line'>297</span> * notifications from the tile cache.
+<span class='line'>298</span> *
+<span class='line'>299</span> * @public
+<span class='line'>300</span> */</span><span class="WHIT">
+<span class='line'>301</span> </span><span class="WHIT"> </span><span class="NAME">isUpdated</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>302</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.updated</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>303</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>304</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>305</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>306</span> * Renders this face into a scene.
+<span class='line'>307</span> *
+<span class='line'>308</span> * @public
+<span class='line'>309</span> * @param {bigshot.WebGLTexturedQuadScene} scene the scene to render into
+<span class='line'>310</span> */</span><span class="WHIT">
+<span class='line'>311</span> </span><span class="WHIT"> </span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>312</span> </span><span class="WHIT"> </span><span class="NAME">this.updated</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>313</span> </span><span class="WHIT"> </span><span class="NAME">this.viewportWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.owner.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>314</span> </span><span class="WHIT"> </span><span class="NAME">this.viewportHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.owner.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>315</span> </span><span class="WHIT"> </span><span class="NAME">this.generateSubdivisionFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.topLeft</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>316</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>317</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>318</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>319</span> * Performs post-render cleanup.
+<span class='line'>320</span> */</span><span class="WHIT">
+<span class='line'>321</span> </span><span class="WHIT"> </span><span class="NAME">endRender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>322</span> </span><span class="WHIT"> </span><span class="NAME">this.tileCache.purge</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>323</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>324</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>325</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__VRHotspot.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRHotspot.js.html
new file mode 100644
index 00000000..ffb9805c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRHotspot.js.html
@@ -0,0 +1,290 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Abstract base class for panorama hotspots.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class Abstract base class for panorama hotspots.
+<span class='line'> 21</span> *
+<span class='line'> 22</span> * A Hotspot is simply an HTML element that is moved / hidden etc.
+<span class='line'> 23</span> * to overlay a given position in the panorama.
+<span class='line'> 24</span> *
+<span class='line'> 25</span> * @param {bigshot.VRPanorama} panorama the panorama to attach this hotspot to
+<span class='line'> 26</span> */</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="NAME">bigshot.VRHotspot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">panorama</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">this.panorama</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">panorama</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 31</span> * The method to use for dealing with hotspots that extend outside the
+<span class='line'> 32</span> * viewport. Note that {@link #CLIP_ADJUST} et al are functions, not constants.
+<span class='line'> 33</span> * To set the value, you must call the function to get a clipping strategy:
+<span class='line'> 34</span> *
+<span class='line'> 35</span> * @example
+<span class='line'> 36</span> * var hotspot = ...;
+<span class='line'> 37</span> * // note the function call below ---------------v
+<span class='line'> 38</span> * hotspot.clippingStrategy = hotspot.CLIP_ADJUST ();
+<span class='line'> 39</span> *
+<span class='line'> 40</span> * @see bigshot.VRHotspot#CLIP_ADJUST
+<span class='line'> 41</span> * @see bigshot.VRHotspot#CLIP_CENTER
+<span class='line'> 42</span> * @see bigshot.VRHotspot#CLIP_FRACTION
+<span class='line'> 43</span> * @see bigshot.VRHotspot#CLIP_ZOOM
+<span class='line'> 44</span> * @see bigshot.VRHotspot#CLIP_FADE
+<span class='line'> 45</span> * @see bigshot.VRHotspot#clip
+<span class='line'> 46</span> * @type function(clipData)
+<span class='line'> 47</span> * @default bigshot.VRHotspot#CLIP_ADJUST
+<span class='line'> 48</span> */</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.clippingStrategy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bigshot.VRHotspot.CLIP_ADJUST</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">panorama</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 52</span>
+<span class='line'> 53</span> </span><span class="COMM">/**
+<span class='line'> 54</span> * Hides the hotspot if less than &lt;code>frac&lt;/code> of its area is visible.
+<span class='line'> 55</span> *
+<span class='line'> 56</span> * @param {number} frac the fraction (0.0 - 1.0) of the hotspot that must be visible for
+<span class='line'> 57</span> * it to be shown.
+<span class='line'> 58</span> * @type function(clipData)
+<span class='line'> 59</span> * @see bigshot.VRHotspot#clip
+<span class='line'> 60</span> * @see bigshot.VRHotspot#clippingStrategy
+<span class='line'> 61</span> */</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="NAME">bigshot.VRHotspot.CLIP_FRACTION</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">panorama</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">frac</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">full</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">visibleWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r.x1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">r.x0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">visibleHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r.y1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">r.y0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">visibleWidth</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">visibleHeight</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">visibleWidth</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">visibleHeight</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">full</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">frac</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 82</span>
+<span class='line'> 83</span> </span><span class="COMM">/**
+<span class='line'> 84</span> * Hides the hotspot if its center is outside the viewport.
+<span class='line'> 85</span> *
+<span class='line'> 86</span> * @type function(clipData)
+<span class='line'> 87</span> * @see bigshot.VRHotspot#clip
+<span class='line'> 88</span> * @see bigshot.VRHotspot#clippingStrategy
+<span class='line'> 89</span> */</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="NAME">bigshot.VRHotspot.CLIP_CENTER</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">panorama</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">c.x</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">c.x</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="NAME">c.y</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">c.y</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>100</span>
+<span class='line'>101</span> </span><span class="COMM">/**
+<span class='line'>102</span> * Resizes the hotspot to fit in the viewport. Hides the hotspot if
+<span class='line'>103</span> * it is completely outside the viewport.
+<span class='line'>104</span> *
+<span class='line'>105</span> * @type function(clipData)
+<span class='line'>106</span> * @see bigshot.VRHotspot#clip
+<span class='line'>107</span> * @see bigshot.VRHotspot#clippingStrategy
+<span class='line'>108</span> */</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="NAME">bigshot.VRHotspot.CLIP_ADJUST</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">panorama</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">clipData.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">clipData.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>129</span>
+<span class='line'>130</span> </span><span class="COMM">/**
+<span class='line'>131</span> * Shrinks the hotspot as it approaches the viewport edges.
+<span class='line'>132</span> *
+<span class='line'>133</span> * @param s The full size of the hotspot.
+<span class='line'>134</span> * @param s.w The full width of the hotspot, in pixels.
+<span class='line'>135</span> * @param s.h The full height of the hotspot, in pixels.
+<span class='line'>136</span> * @see bigshot.VRHotspot#clip
+<span class='line'>137</span> * @see bigshot.VRHotspot#clippingStrategy
+<span class='line'>138</span> */</span><span class="WHIT">
+<span class='line'>139</span> </span><span class="NAME">bigshot.VRHotspot.CLIP_ZOOM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">panorama</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxDistanceInViewportHeights</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">s.w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">s.h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s.w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s.h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>145</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>146</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">clipData.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">clipData.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">s.w</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">s.w</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">s.h</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">s.h</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">maxDistanceInViewportHeights</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>167</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>168</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>169</span> </span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s.w</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s.w</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>174</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>177</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>178</span> </span><span class="WHIT"> </span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>183</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>184</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>185</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>186</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>187</span>
+<span class='line'>188</span> </span><span class="COMM">/**
+<span class='line'>189</span> * Progressively fades the hotspot as it gets closer to the viewport edges.
+<span class='line'>190</span> *
+<span class='line'>191</span> * @param {number} borderSizeInPixels the distance from the edge, in pixels,
+<span class='line'>192</span> * where the hotspot is completely opaque.
+<span class='line'>193</span> * @see bigshot.VRHotspot#clip
+<span class='line'>194</span> * @see bigshot.VRHotspot#clippingStrategy
+<span class='line'>195</span> */</span><span class="WHIT">
+<span class='line'>196</span> </span><span class="NAME">bigshot.VRHotspot.CLIP_FADE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">panorama</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">borderSizeInPixels</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>197</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>198</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>199</span> </span><span class="WHIT"> </span><span class="NAME">clipData.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>200</span> </span><span class="WHIT"> </span><span class="NAME">clipData.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>201</span> </span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.w</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>202</span> </span><span class="WHIT"> </span><span class="NAME">panorama.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">clipData.h</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>203</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>204</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>205</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>206</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">borderSizeInPixels</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>207</span> </span><span class="WHIT"> </span><span class="NAME">clipData.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">borderSizeInPixels</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>208</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>209</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>210</span> </span><span class="WHIT"> </span><span class="NAME">clipData.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>211</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>212</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>213</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>214</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>215</span>
+<span class='line'>216</span> </span><span class="NAME">bigshot.VRHotspot.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>217</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>218</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>219</span> * Layout and resize the hotspot. Called by the panorama.
+<span class='line'>220</span> */</span><span class="WHIT">
+<span class='line'>221</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>222</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>223</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>224</span> * Helper function to rotate a point around an axis.
+<span class='line'>225</span> *
+<span class='line'>226</span> * @param {number} ang the angle
+<span class='line'>227</span> * @param {bigshot.Point3D} vector the vector to rotate around
+<span class='line'>228</span> * @param {Vector} point the point
+<span class='line'>229</span> * @type Vector
+<span class='line'>230</span> * @private
+<span class='line'>231</span> */</span><span class="WHIT">
+<span class='line'>232</span> </span><span class="WHIT"> </span><span class="NAME">rotate</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ang</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vector</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>233</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">arad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ang</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>234</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Matrix.Rotation</span><span class="PUNC">(</span><span class="NAME">arad</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">$V</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">vector.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vector.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vector.z</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ensure4x4</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>235</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">m.xPoint3Dhom1</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>236</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>237</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>238</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>239</span> * Converts the polar coordinates to world coordinates.
+<span class='line'>240</span> * The distance is assumed to be 1.0.
+<span class='line'>241</span> *
+<span class='line'>242</span> * @param yaw the yaw, in degrees
+<span class='line'>243</span> * @param pitch the pitch, in degrees
+<span class='line'>244</span> * @type bigshot.Point3D
+<span class='line'>245</span> */</span><span class="WHIT">
+<span class='line'>246</span> </span><span class="WHIT"> </span><span class="NAME">toVector</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">yaw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pitch</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>247</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>248</span> </span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">pitch</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>249</span> </span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">yaw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>250</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>251</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>252</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>253</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>254</span> * Converts the world-coordinate point p to screen coordinates.
+<span class='line'>255</span> *
+<span class='line'>256</span> * @param {bigshot.Point3D} p the world-coordinate point
+<span class='line'>257</span> * @type point
+<span class='line'>258</span> */</span><span class="WHIT">
+<span class='line'>259</span> </span><span class="WHIT"> </span><span class="NAME">toScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>260</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.panorama.renderer.transformToScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>261</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>262</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>263</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>264</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>265</span> * Clips the hotspot against the viewport. Both parameters
+<span class='line'>266</span> * are in/out. Clipping is done by adjusting the values of the
+<span class='line'>267</span> * parameters.
+<span class='line'>268</span> *
+<span class='line'>269</span> * @param clipData Information about the hotspot.
+<span class='line'>270</span> * @param {number} clipData.x the x-coordinate of the top-left corner of the hotspot, in pixels.
+<span class='line'>271</span> * @param {number} clipData.y the y-coordinate of the top-left corner of the hotspot, in pixels.
+<span class='line'>272</span> * @param {number} clipData.w the width of the hotspot, in pixels.
+<span class='line'>273</span> * @param {number} clipData.h the height of the hotspot, in pixels.
+<span class='line'>274</span> * @param {number} [clipData.opacity] the opacity of the hotspot, ranging from 0.0 (transparent)
+<span class='line'>275</span> * to 1.0 (opaque). If set, the opacity of the hotspot element is adjusted.
+<span class='line'>276</span> * @type boolean
+<span class='line'>277</span> * @return true if the hotspot is visible, false otherwise
+<span class='line'>278</span> */</span><span class="WHIT">
+<span class='line'>279</span> </span><span class="WHIT"> </span><span class="NAME">clip</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>280</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.clippingStrategy</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">clipData</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>281</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>282</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>283</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__VRPanorama.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRPanorama.js.html
new file mode 100644
index 00000000..fabfcec1
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRPanorama.js.html
@@ -0,0 +1,1726 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new VR panorama in a canvas. &lt;b>Requires WebGL or CSS3D support.&lt;/b>
+<span class='line'> 19</span> * (Note: See {@link bigshot.VRPanorama#dispose} for important information.)
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * &lt;h3 id="creating-a-cubemap">Creating a Cube Map&lt;/h3>
+<span class='line'> 22</span> *
+<span class='line'> 23</span> * &lt;p>The panorama consists of six image pyramids, one for each face of the VR cube.
+<span class='line'> 24</span> * Due to restrictions in WebGL, each texture tile must have a power-of-two (POT) size -
+<span class='line'> 25</span> * that is, 2, 4, ..., 128, 256, etc. Furthermore, due to the way the faces are tesselated
+<span class='line'> 26</span> * the largest image must consist of POT x POT tiles. The final restriction is that the
+<span class='line'> 27</span> * tiles must overlap for good seamless results.
+<span class='line'> 28</span> *
+<span class='line'> 29</span> * &lt;p>The MakeImagePyramid has some sensible defaults built-in. If you just use the
+<span class='line'> 30</span> * command line:
+<span class='line'> 31</span> *
+<span class='line'> 32</span> * &lt;code>&lt;pre>
+<span class='line'> 33</span> * java -jar bigshot.jar input.jpg temp/dzi \
+<span class='line'> 34</span> * --preset dzi-cubemap \
+<span class='line'> 35</span> * --format folders
+<span class='line'> 36</span> * &lt;/pre>&lt;/code>
+<span class='line'> 37</span> *
+<span class='line'> 38</span> * &lt;p>You will get 2034 pixels per face, and a tile size of 256 pixels with 2 pixels
+<span class='line'> 39</span> * overlap. If you don't like that, you can use the &lt;code>overlap&lt;/code>, &lt;code>face-size&lt;/code>
+<span class='line'> 40</span> * and &lt;code>tile-size&lt;/code> parameters. Let's take these one by one:
+<span class='line'> 41</span> *
+<span class='line'> 42</span> * &lt;ul>
+<span class='line'> 43</span> * &lt;li>&lt;p>&lt;code>overlap&lt;/code>: Overlap defines how much tiles should overlap, just to avoid
+<span class='line'> 44</span> * seams in the rendered results caused by finite numeric precision. The default is &lt;b>2&lt;/b>, which
+<span class='line'> 45</span> * I've found works great for me.&lt;/p>&lt;/li>
+<span class='line'> 46</span> * &lt;li>&lt;p>&lt;code>tile-size&lt;/code>: First you need to decide what POT size the output should be.
+<span class='line'> 47</span> * Then subtract the overlap value. For example, if you set overlap to 1, &lt;code>tile-size&lt;/code>
+<span class='line'> 48</span> * could be 127, 255, 511, or any 2&lt;sup>n&lt;/sup>-1 value.&lt;/p>&lt;/li>
+<span class='line'> 49</span> * &lt;li>&lt;p>&lt;code>face-size&lt;/code>: Finally, we decide on a size for the full cube face. This should be
+<span class='line'> 50</span> * tile-size * 2&lt;sup>n&lt;/sup>. Let's say we set n=3, which makes each face 8x8 tiles at the most zoomed-in
+<span class='line'> 51</span> * level. For a tile-size of 255, then, face-size is 255*2&lt;sup>3&lt;/sup> = 255*8 = &lt;b>2040&lt;/b>.&lt;/p>&lt;/li>
+<span class='line'> 52</span> * &lt;/ul>
+<span class='line'> 53</span> *
+<span class='line'> 54</span> * &lt;p>A command line for the hypothetical scenario above would be:
+<span class='line'> 55</span> *
+<span class='line'> 56</span> * &lt;code>&lt;pre>
+<span class='line'> 57</span> * java -jar bigshot.jar input.jpg temp/dzi \
+<span class='line'> 58</span> * --preset dzi-cubemap \
+<span class='line'> 59</span> * --overlap 1 \
+<span class='line'> 60</span> * --tile-size 255 \
+<span class='line'> 61</span> * --face-size 2040 \
+<span class='line'> 62</span> * --format folders
+<span class='line'> 63</span> * &lt;/pre>&lt;/code>
+<span class='line'> 64</span> *
+<span class='line'> 65</span> * &lt;p>If your tile size numbers don't add up, you'll get a warning like:
+<span class='line'> 66</span> *
+<span class='line'> 67</span> * &lt;code>&lt;pre>
+<span class='line'> 68</span> * WARNING: Resulting image tile size (tile-size + overlap) is not a power of two: 255
+<span class='line'> 69</span> * &lt;/pre>&lt;/code>
+<span class='line'> 70</span> *
+<span class='line'> 71</span> * &lt;p>If your face size don't add up, you'll get another warning:
+<span class='line'> 72</span> *
+<span class='line'> 73</span> * &lt;code>&lt;pre>
+<span class='line'> 74</span> * WARNING: face-size is not an even multiple of tile-size: 2040 % 254 != 0
+<span class='line'> 75</span> * &lt;/pre>&lt;/code>
+<span class='line'> 76</span> *
+<span class='line'> 77</span> * &lt;h3 id="integration-with-saladoplayer">Integration With SaladoPlayer&lt;/h3>
+<span class='line'> 78</span> *
+<span class='line'> 79</span> * &lt;p>&lt;a href="http://panozona.com/wiki/">SaladoPlayer&lt;/a> is a cool
+<span class='line'> 80</span> * Flash-based VR panorama viewer that can display Deep Zoom Images.
+<span class='line'> 81</span> * It can be used as a fallback for Bigshot for browsers that don't
+<span class='line'> 82</span> * support WebGL.
+<span class='line'> 83</span> *
+<span class='line'> 84</span> * &lt;p>Since Bigshot can use a Deep Zoom Image (DZI) via a {@link bigshot.DeepZoomImageFileSystem}
+<span class='line'> 85</span> * adapter, the common file format is DZI. There are two cases: The first is
+<span class='line'> 86</span> * when the DZI is served up as a folder structure, the second when
+<span class='line'> 87</span> * we pack the DZI into a Bigshot archive and serve it using bigshot.php.
+<span class='line'> 88</span> *
+<span class='line'> 89</span> * &lt;h4>Serving DZI as Folders&lt;/h4>
+<span class='line'> 90</span> *
+<span class='line'> 91</span> * &lt;p>This is an easy one. First, we generate the required DZIs:
+<span class='line'> 92</span> *
+<span class='line'> 93</span> * &lt;code>&lt;pre>
+<span class='line'> 94</span> * java -jar bigshot.jar input.jpg temp/dzi \
+<span class='line'> 95</span> * --preset dzi-cubemap \
+<span class='line'> 96</span> * --format folders
+<span class='line'> 97</span> * &lt;/pre>&lt;/code>
+<span class='line'> 98</span> *
+<span class='line'> 99</span> * &lt;p>We'll assume that we have the six DZI folders in "temp/dzi", and that
+<span class='line'>100</span> * they have "face_" as a common prefix (which is what Bigshot's MakeImagePyramid
+<span class='line'>101</span> * outputs). So we have, for example, "temp/dzi/face_f.xml" and the tiles for face_f
+<span class='line'>102</span> * in "temp/dzi/face_f/". Set up Bigshot like this:
+<span class='line'>103</span> *
+<span class='line'>104</span> * &lt;code>&lt;pre>
+<span class='line'>105</span> * bvr = new bigshot.VRPanorama (
+<span class='line'>106</span> * new bigshot.VRPanoramaParameters ({
+<span class='line'>107</span> * container : document.getElementById ("canvas"),
+<span class='line'>108</span> * basePath : "temp/dzi",
+<span class='line'>109</span> * fileSystemType : "dzi"
+<span class='line'>110</span> * }));
+<span class='line'>111</span> * &lt;/pre>&lt;/code>
+<span class='line'>112</span> *
+<span class='line'>113</span> * &lt;p>SaladoPlayer uses an XML config file, which in this case will
+<span class='line'>114</span> * look something like this:
+<span class='line'>115</span> *
+<span class='line'>116</span> * &lt;code>&lt;pre>
+<span class='line'>117</span> * &lt;SaladoPlayer>
+<span class='line'>118</span> * &lt;global debug="false" firstPanorama="pano"/>
+<span class='line'>119</span> * &lt;panoramas>
+<span class='line'>120</span> * &lt;panorama id="pano" path="temp/dzi/face_f.xml"/>
+<span class='line'>121</span> * &lt;/panoramas>
+<span class='line'>122</span> * &lt;/SaladoPlayer>
+<span class='line'>123</span> * &lt;/pre>&lt;/code>
+<span class='line'>124</span> *
+<span class='line'>125</span> * &lt;h4>Serving DZI as Archive&lt;/h4>
+<span class='line'>126</span> *
+<span class='line'>127</span> * &lt;p>This one is a bit more difficult. First we create a DZI as a bigshot archive:
+<span class='line'>128</span> *
+<span class='line'>129</span> * &lt;code>&lt;pre>
+<span class='line'>130</span> * java -jar bigshot.jar input.jpg temp/dzi.bigshot \
+<span class='line'>131</span> * --preset dzi-cubemap \
+<span class='line'>132</span> * --format archive
+<span class='line'>133</span> * &lt;/pre>&lt;/code>
+<span class='line'>134</span> *
+<span class='line'>135</span> * &lt;p>We'll assume that we have our Bigshot archive at
+<span class='line'>136</span> * "temp/dzi.bigshot". For this we will use the "entry" parameter of bigshot.php
+<span class='line'>137</span> * to serve up the right files:
+<span class='line'>138</span> *
+<span class='line'>139</span> * &lt;code>&lt;pre>
+<span class='line'>140</span> * bvr = new bigshot.VRPanorama (
+<span class='line'>141</span> * new bigshot.VRPanoramaParameters ({
+<span class='line'>142</span> * container : document.getElementById ("canvas"),
+<span class='line'>143</span> * basePath : "/bigshot.php?file=temp/dzi.bigshot&entry=",
+<span class='line'>144</span> * fileSystemType : "dzi"
+<span class='line'>145</span> * }));
+<span class='line'>146</span> * &lt;/pre>&lt;/code>
+<span class='line'>147</span> *
+<span class='line'>148</span> * &lt;p>SaladoPlayer uses an XML config file, which in this case will
+<span class='line'>149</span> * look something like this:
+<span class='line'>150</span> *
+<span class='line'>151</span> * &lt;code>&lt;pre>
+<span class='line'>152</span> * &lt;SaladoPlayer>
+<span class='line'>153</span> * &lt;global debug="false" firstPanorama="pano"/>
+<span class='line'>154</span> * &lt;panoramas>
+<span class='line'>155</span> * &lt;panorama id="pano" path="/bigshot.php?file=dzi.bigshot&amp;amp;entry=face_f.xml"/>
+<span class='line'>156</span> * &lt;/panoramas>
+<span class='line'>157</span> * &lt;/SaladoPlayer>
+<span class='line'>158</span> * &lt;/pre>&lt;/code>
+<span class='line'>159</span> *
+<span class='line'>160</span> * &lt;h3>Usage example:&lt;/h3>
+<span class='line'>161</span> * @example
+<span class='line'>162</span> * var bvr = new bigshot.VRPanorama (
+<span class='line'>163</span> * new bigshot.VRPanoramaParameters ({
+<span class='line'>164</span> * basePath : "/bigshot.php?file=myvr.bigshot",
+<span class='line'>165</span> * fileSystemType : "archive",
+<span class='line'>166</span> * container : document.getElementById ("bigshot_canvas")
+<span class='line'>167</span> * }));
+<span class='line'>168</span> * @class A cube-map VR panorama.
+<span class='line'>169</span> * @extends bigshot.EventDispatcher
+<span class='line'>170</span> *
+<span class='line'>171</span> * @param {bigshot.VRPanoramaParameters} parameters the panorama parameters.
+<span class='line'>172</span> *
+<span class='line'>173</span> * @see bigshot.VRPanoramaParameters
+<span class='line'>174</span> */</span><span class="WHIT">
+<span class='line'>175</span> </span><span class="NAME">bigshot.VRPanorama</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.EventDispatcher.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>177</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>178</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.maxTextureMagnification</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parameters.container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>183</span> </span><span class="WHIT"> </span><span class="NAME">this.browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.Browser</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>184</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>185</span> </span><span class="WHIT"> </span><span class="NAME">this.dragDistance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>186</span> </span><span class="WHIT"> </span><span class="NAME">this.hotspots</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>187</span> </span><span class="WHIT"> </span><span class="NAME">this.disposed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>188</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>189</span> </span><span class="WHIT"> </span><span class="NAME">this.transformOffsets</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>190</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">parameters.yawOffset</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>191</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">parameters.pitchOffset</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">parameters.rollOffset</span><span class="WHIT">
+<span class='line'>193</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>194</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>195</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>196</span> * Current camera state.
+<span class='line'>197</span> * @private
+<span class='line'>198</span> */</span><span class="WHIT">
+<span class='line'>199</span> </span><span class="WHIT"> </span><span class="NAME">this.state</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>200</span> </span><span class="WHIT"> </span><span class="NAME">rotation</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>201</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>202</span> * Pitch in degrees.
+<span class='line'>203</span> * @type float
+<span class='line'>204</span> * @private
+<span class='line'>205</span> */</span><span class="WHIT">
+<span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>207</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>208</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>209</span> * Yaw in degrees.
+<span class='line'>210</span> * @type float
+<span class='line'>211</span> * @private
+<span class='line'>212</span> */</span><span class="WHIT">
+<span class='line'>213</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>214</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>215</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT">
+<span class='line'>216</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>217</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>218</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>219</span> * Field of view (vertical) in degrees.
+<span class='line'>220</span> * @type float
+<span class='line'>221</span> * @private
+<span class='line'>222</span> */</span><span class="WHIT">
+<span class='line'>223</span> </span><span class="WHIT"> </span><span class="NAME">fov</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">45</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>224</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>225</span> </span><span class="WHIT"> </span><span class="NAME">translation</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>226</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>227</span> * Translation along X-axis.
+<span class='line'>228</span> * @private
+<span class='line'>229</span> * @type float
+<span class='line'>230</span> */</span><span class="WHIT">
+<span class='line'>231</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>232</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>233</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>234</span> * Translation along Y-axis.
+<span class='line'>235</span> * @private
+<span class='line'>236</span> * @type float
+<span class='line'>237</span> */</span><span class="WHIT">
+<span class='line'>238</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>239</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>240</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>241</span> * Translation along Z-axis.
+<span class='line'>242</span> * @private
+<span class='line'>243</span> * @type float
+<span class='line'>244</span> */</span><span class="WHIT">
+<span class='line'>245</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="WHIT">
+<span class='line'>246</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>247</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>248</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>249</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>250</span> * Renderer wrapper.
+<span class='line'>251</span> * @private
+<span class='line'>252</span> * @type bigshot.VRRenderer
+<span class='line'>253</span> */</span><span class="WHIT">
+<span class='line'>254</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>255</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.renderer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>256</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.renderer</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"css"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>257</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.CSS3DVRRenderer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>258</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.renderer</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"webgl"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>259</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.WebGLVRRenderer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>260</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>261</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Unknown renderer: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameters.renderer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>262</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>263</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>264</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>265</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.WebGLUtil.isWebGLSupported</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>266</span> </span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.WebGLVRRenderer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>267</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
+<span class='line'>268</span> </span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.CSS3DVRRenderer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>269</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>270</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>271</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>272</span> * List of render listeners to call at the start and end of each render.
+<span class='line'>273</span> *
+<span class='line'>274</span> * @private
+<span class='line'>275</span> */</span><span class="WHIT">
+<span class='line'>276</span> </span><span class="WHIT"> </span><span class="NAME">this.renderListeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>277</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>278</span> </span><span class="WHIT"> </span><span class="NAME">this.renderables</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>279</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>280</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>281</span> * Current value of the idle counter.
+<span class='line'>282</span> *
+<span class='line'>283</span> * @private
+<span class='line'>284</span> */</span><span class="WHIT">
+<span class='line'>285</span> </span><span class="WHIT"> </span><span class="NAME">this.idleCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>286</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>287</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>288</span> * Maximum value of the idle counter before any idle events start,
+<span class='line'>289</span> * such as autorotation.
+<span class='line'>290</span> *
+<span class='line'>291</span> * @private
+<span class='line'>292</span> */</span><span class="WHIT">
+<span class='line'>293</span> </span><span class="WHIT"> </span><span class="NAME">this.maxIdleCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>294</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>295</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>296</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>297</span> * Integer acting as a "permit". When the smoothRotate function
+<span class='line'>298</span> * is called, the current value is incremented and saved. If the number changes
+<span class='line'>299</span> * that particular call to smoothRotate stops. This way we avoid
+<span class='line'>300</span> * having multiple smoothRotate rotations going in parallel.
+<span class='line'>301</span> * @private
+<span class='line'>302</span> * @type int
+<span class='line'>303</span> */</span><span class="WHIT">
+<span class='line'>304</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothrotatePermit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>305</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>306</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>307</span> * Helper function to consume events.
+<span class='line'>308</span> * @private
+<span class='line'>309</span> */</span><span class="WHIT">
+<span class='line'>310</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>311</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.preventDefault</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>312</span> </span><span class="WHIT"> </span><span class="NAME">event.preventDefault</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>313</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>314</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>315</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>316</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>317</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>318</span> * Full screen handler.
+<span class='line'>319</span> *
+<span class='line'>320</span> * @private
+<span class='line'>321</span> */</span><span class="WHIT">
+<span class='line'>322</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>323</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>324</span> </span><span class="WHIT"> </span><span class="NAME">this.renderAsapPermitTaken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>325</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>326</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>327</span> * An element to use as reference when resizing the canvas element.
+<span class='line'>328</span> * If non-null, any onresize() calls will result in the canvas being
+<span class='line'>329</span> * resized to the size of this element.
+<span class='line'>330</span> *
+<span class='line'>331</span> * @private
+<span class='line'>332</span> */</span><span class="WHIT">
+<span class='line'>333</span> </span><span class="WHIT"> </span><span class="NAME">this.sizeContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>334</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>335</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>336</span> * The six cube faces.
+<span class='line'>337</span> *
+<span class='line'>338</span> * @type bigshot.VRFace[]
+<span class='line'>339</span> * @private
+<span class='line'>340</span> */</span><span class="WHIT">
+<span class='line'>341</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">facesInit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>342</span> </span><span class="WHIT"> </span><span class="NAME">facesLeft</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>343</span> </span><span class="WHIT"> </span><span class="NAME">faceLoaded</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>344</span> </span><span class="WHIT"> </span><span class="NAME">this.facesLeft</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>345</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.facesLeft</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>346</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.parameters.onload</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>347</span> </span><span class="WHIT"> </span><span class="NAME">that.parameters.onload</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>348</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>349</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>350</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>351</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>352</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">onFaceLoad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>353</span> </span><span class="WHIT"> </span><span class="NAME">facesInit.faceLoaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>354</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>355</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>356</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>357</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.VRFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"f"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onFaceLoad</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>358</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.VRFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"b"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onFaceLoad</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>359</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.VRFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"l"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onFaceLoad</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>360</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.VRFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"r"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onFaceLoad</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>361</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NUMB">4</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.VRFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"u"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onFaceLoad</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>362</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NUMB">5</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.VRFace</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"d"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onFaceLoad</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>363</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>364</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>365</span> * Helper function to translate touch events to mouse-like events.
+<span class='line'>366</span> * @private
+<span class='line'>367</span> */</span><span class="WHIT">
+<span class='line'>368</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">translateEvent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>369</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.clientX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>370</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">event</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>371</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>372</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>373</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.changedTouches</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>374</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.changedTouches</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">clientY</span><span class="WHIT">
+<span class='line'>375</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>376</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>377</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>378</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>379</span> </span><span class="WHIT"> </span><span class="NAME">this.lastTouchStartAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>380</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>381</span> </span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>382</span> </span><span class="WHIT"> </span><span class="STRN">"mousedown"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>383</span> </span><span class="WHIT"> </span><span class="NAME">that.smoothRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>384</span> </span><span class="WHIT"> </span><span class="NAME">that.resetIdle</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>385</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseDown</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>386</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>387</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>388</span> </span><span class="WHIT"> </span><span class="STRN">"mouseup"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>389</span> </span><span class="WHIT"> </span><span class="NAME">that.resetIdle</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>390</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseUp</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>391</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>392</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>393</span> </span><span class="WHIT"> </span><span class="STRN">"mousemove"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>394</span> </span><span class="WHIT"> </span><span class="NAME">that.resetIdle</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>395</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseMove</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>396</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>397</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>398</span> </span><span class="WHIT"> </span><span class="STRN">"gesturestart"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>399</span> </span><span class="WHIT"> </span><span class="NAME">that.gestureStart</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>400</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>401</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>402</span> </span><span class="WHIT"> </span><span class="STRN">"gesturechange"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>403</span> </span><span class="WHIT"> </span><span class="NAME">that.gestureChange</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>404</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>405</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>406</span> </span><span class="WHIT"> </span><span class="STRN">"gestureend"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>407</span> </span><span class="WHIT"> </span><span class="NAME">that.gestureEnd</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>408</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>409</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>410</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>411</span> </span><span class="WHIT"> </span><span class="STRN">"DOMMouseScroll"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>412</span> </span><span class="WHIT"> </span><span class="NAME">that.resetIdle</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>413</span> </span><span class="WHIT"> </span><span class="NAME">that.mouseWheel</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>414</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>415</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>416</span> </span><span class="WHIT"> </span><span class="STRN">"mousewheel"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>417</span> </span><span class="WHIT"> </span><span class="NAME">that.resetIdle</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>418</span> </span><span class="WHIT"> </span><span class="NAME">that.mouseWheel</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>419</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>420</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>421</span> </span><span class="WHIT"> </span><span class="STRN">"dblclick"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>422</span> </span><span class="WHIT"> </span><span class="NAME">that.mouseDoubleClick</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>423</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>424</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>425</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>426</span> </span><span class="WHIT"> </span><span class="STRN">"touchstart"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>427</span> </span><span class="WHIT"> </span><span class="NAME">that.smoothRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>428</span> </span><span class="WHIT"> </span><span class="NAME">that.lastTouchStartAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>429</span> </span><span class="WHIT"> </span><span class="NAME">that.resetIdle</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>430</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseDown</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">translateEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>431</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>432</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>433</span> </span><span class="WHIT"> </span><span class="STRN">"touchend"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>434</span> </span><span class="WHIT"> </span><span class="NAME">that.resetIdle</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>435</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">handled</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.dragMouseUp</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">translateEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>436</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">handled</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.lastTouchStartAt</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">350</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>437</span> </span><span class="WHIT"> </span><span class="NAME">that.mouseDoubleClick</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">translateEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>438</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>439</span> </span><span class="WHIT"> </span><span class="NAME">that.lastTouchStartAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>440</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>441</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>442</span> </span><span class="WHIT"> </span><span class="STRN">"touchmove"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>443</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.dragDistance</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">24</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>444</span> </span><span class="WHIT"> </span><span class="NAME">that.lastTouchStartAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>445</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>446</span> </span><span class="WHIT"> </span><span class="NAME">that.resetIdle</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>447</span> </span><span class="WHIT"> </span><span class="NAME">that.dragMouseMove</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">translateEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>448</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">consumeEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>449</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>450</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>451</span> </span><span class="WHIT"> </span><span class="NAME">this.addEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>452</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>453</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>454</span> * Stub function to call onresize on this instance.
+<span class='line'>455</span> *
+<span class='line'>456</span> * @private
+<span class='line'>457</span> */</span><span class="WHIT">
+<span class='line'>458</span> </span><span class="WHIT"> </span><span class="NAME">this.onresizeHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>459</span> </span><span class="WHIT"> </span><span class="NAME">that.onresize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>460</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>461</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>462</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'resize'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onresizeHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>463</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document.body</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'orientationchange'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onresizeHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>464</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>465</span> </span><span class="WHIT"> </span><span class="NAME">this.setPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>466</span> </span><span class="WHIT"> </span><span class="NAME">this.setYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>467</span> </span><span class="WHIT"> </span><span class="NAME">this.setFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">45.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>468</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>469</span>
+<span class='line'>470</span> </span><span class="COMM">/*
+<span class='line'>471</span> * Statics
+<span class='line'>472</span> */</span><span class="WHIT">
+<span class='line'>473</span>
+<span class='line'>474</span> </span><span class="COMM">/**
+<span class='line'>475</span> * When the mouse is pressed and dragged, the camera rotates
+<span class='line'>476</span> * proportionally to the length of the dragging.
+<span class='line'>477</span> *
+<span class='line'>478</span> * @constant
+<span class='line'>479</span> * @public
+<span class='line'>480</span> * @static
+<span class='line'>481</span> */</span><span class="WHIT">
+<span class='line'>482</span> </span><span class="NAME">bigshot.VRPanorama.DRAG_GRAB</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"grab"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>483</span>
+<span class='line'>484</span> </span><span class="COMM">/**
+<span class='line'>485</span> * When the mouse is pressed and dragged, the camera continuously
+<span class='line'>486</span> * rotates with a speed that is proportional to the length of the
+<span class='line'>487</span> * dragging.
+<span class='line'>488</span> *
+<span class='line'>489</span> * @constant
+<span class='line'>490</span> * @public
+<span class='line'>491</span> * @static
+<span class='line'>492</span> */</span><span class="WHIT">
+<span class='line'>493</span> </span><span class="NAME">bigshot.VRPanorama.DRAG_PAN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"pan"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>494</span>
+<span class='line'>495</span> </span><span class="COMM">/**
+<span class='line'>496</span> * @name bigshot.VRPanorama.RenderState
+<span class='line'>497</span> * @class The state the renderer is in when a {@link bigshot.VRPanorama.RenderListener} is called.
+<span class='line'>498</span> *
+<span class='line'>499</span> * @see bigshot.VRPanorama.ONRENDER_BEGIN
+<span class='line'>500</span> * @see bigshot.VRPanorama.ONRENDER_END
+<span class='line'>501</span> */</span><span class="WHIT">
+<span class='line'>502</span>
+<span class='line'>503</span> </span><span class="COMM">/**
+<span class='line'>504</span> * A RenderListener state parameter value used at the start of each render.
+<span class='line'>505</span> *
+<span class='line'>506</span> * @constant
+<span class='line'>507</span> * @public
+<span class='line'>508</span> * @static
+<span class='line'>509</span> * @type bigshot.VRPanorama.RenderState
+<span class='line'>510</span> */</span><span class="WHIT">
+<span class='line'>511</span> </span><span class="NAME">bigshot.VRPanorama.ONRENDER_BEGIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>512</span>
+<span class='line'>513</span> </span><span class="COMM">/**
+<span class='line'>514</span> * A RenderListener state parameter value used at the end of each render.
+<span class='line'>515</span> *
+<span class='line'>516</span> * @constant
+<span class='line'>517</span> * @public
+<span class='line'>518</span> * @static
+<span class='line'>519</span> * @type bigshot.VRPanorama.RenderState
+<span class='line'>520</span> */</span><span class="WHIT">
+<span class='line'>521</span> </span><span class="NAME">bigshot.VRPanorama.ONRENDER_END</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>522</span>
+<span class='line'>523</span> </span><span class="COMM">/**
+<span class='line'>524</span> * A RenderListener cause parameter indicating that a previously requested
+<span class='line'>525</span> * texture has loaded and a render is forced. The data parameter is not used.
+<span class='line'>526</span> *
+<span class='line'>527</span> * @constant
+<span class='line'>528</span> * @public
+<span class='line'>529</span> * @static
+<span class='line'>530</span> * @param {bigshot.VRPanorama.RenderCause}
+<span class='line'>531</span> */</span><span class="WHIT">
+<span class='line'>532</span> </span><span class="NAME">bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>533</span>
+<span class='line'>534</span> </span><span class="COMM">/**
+<span class='line'>535</span> * @name bigshot.VRPanorama.RenderCause
+<span class='line'>536</span> * @class The reason why the {@link bigshot.VRPanorama} is being rendered.
+<span class='line'>537</span> * Due to the events outside of the panorama, the VR panorama may be forced to
+<span class='line'>538</span> * re-render itself. When this happens, the {@link bigshot.VRPanorama.RenderListener}s
+<span class='line'>539</span> * receive a constant indicating the cause of the rendering.
+<span class='line'>540</span> *
+<span class='line'>541</span> * @see bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE
+<span class='line'>542</span> */</span><span class="WHIT">
+<span class='line'>543</span>
+<span class='line'>544</span> </span><span class="COMM">/**
+<span class='line'>545</span> * Specification for functions passed to {@link bigshot.VRPanorama#addRenderListener}.
+<span class='line'>546</span> *
+<span class='line'>547</span> * @name bigshot.VRPanorama.RenderListener
+<span class='line'>548</span> * @function
+<span class='line'>549</span> * @param {bigshot.VRPanorama.RenderState} state The state of the renderer. Can be {@link bigshot.VRPanorama.ONRENDER_BEGIN} or {@link bigshot.VRPanorama.ONRENDER_END}
+<span class='line'>550</span> * @param {bigshot.VRPanorama.RenderCause} [cause] The reason for rendering the scene. Can be undefined or {@link bigshot.VRPanorama.ONRENDER_TEXTURE_UPDATE}
+<span class='line'>551</span> * @param {Object} [data] An optional data object that is dependent on the cause. See the documentation
+<span class='line'>552</span> * for the different causes.
+<span class='line'>553</span> */</span><span class="WHIT">
+<span class='line'>554</span>
+<span class='line'>555</span> </span><span class="COMM">/**
+<span class='line'>556</span> * Specification for functions passed to {@link bigshot.VRPanorama#addRenderable}.
+<span class='line'>557</span> *
+<span class='line'>558</span> * @name bigshot.VRPanorama.Renderable
+<span class='line'>559</span> * @function
+<span class='line'>560</span> * @param {bigshot.VRRenderer} renderer The renderer object to use.
+<span class='line'>561</span> * @param {bigshot.TexturedQuadScene} scene The scene to render into.
+<span class='line'>562</span> */</span><span class="WHIT">
+<span class='line'>563</span>
+<span class='line'>564</span> </span><span class="COMM">/** */</span><span class="WHIT">
+<span class='line'>565</span> </span><span class="NAME">bigshot.VRPanorama.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>566</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>567</span> * Adds a hotstpot.
+<span class='line'>568</span> *
+<span class='line'>569</span> * @param {bigshot.VRHotspot} hs the hotspot to add
+<span class='line'>570</span> */</span><span class="WHIT">
+<span class='line'>571</span> </span><span class="WHIT"> </span><span class="NAME">addHotspot</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>572</span> </span><span class="WHIT"> </span><span class="NAME">this.hotspots.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>573</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>574</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>575</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>576</span> * Returns the {@link bigshot.VRPanoramaParameters} object used by this instance.
+<span class='line'>577</span> *
+<span class='line'>578</span> * @type bigshot.VRPanoramaParameters
+<span class='line'>579</span> */</span><span class="WHIT">
+<span class='line'>580</span> </span><span class="WHIT"> </span><span class="NAME">getParameters</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>581</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.parameters</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>582</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>583</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>584</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>585</span> * Sets the view translation.
+<span class='line'>586</span> *
+<span class='line'>587</span> * @param x translation of the viewer along the X axis
+<span class='line'>588</span> * @param y translation of the viewer along the Y axis
+<span class='line'>589</span> * @param z translation of the viewer along the Z axis
+<span class='line'>590</span> */</span><span class="WHIT">
+<span class='line'>591</span> </span><span class="WHIT"> </span><span class="NAME">setTranslation</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>592</span> </span><span class="WHIT"> </span><span class="NAME">this.state.translation.x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>593</span> </span><span class="WHIT"> </span><span class="NAME">this.state.translation.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>594</span> </span><span class="WHIT"> </span><span class="NAME">this.state.translation.z</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">z</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>595</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>596</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>597</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>598</span> * Returns the current view translation as an x-y-z triplet.
+<span class='line'>599</span> *
+<span class='line'>600</span> * @returns {number} x translation of the viewer along the X axis
+<span class='line'>601</span> * @returns {number} y translation of the viewer along the Y axis
+<span class='line'>602</span> * @returns {number} z translation of the viewer along the Z axis
+<span class='line'>603</span> */</span><span class="WHIT">
+<span class='line'>604</span> </span><span class="WHIT"> </span><span class="NAME">getTranslation</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>605</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.state.translation</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>606</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>607</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>608</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>609</span> * Sets the field of view.
+<span class='line'>610</span> *
+<span class='line'>611</span> * @param {number} fov the vertical field of view, in degrees
+<span class='line'>612</span> */</span><span class="WHIT">
+<span class='line'>613</span> </span><span class="WHIT"> </span><span class="NAME">setFov</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fov</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>614</span> </span><span class="WHIT"> </span><span class="NAME">fov</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.maxFov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>615</span> </span><span class="WHIT"> </span><span class="NAME">fov</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.minFov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>616</span> </span><span class="WHIT"> </span><span class="NAME">this.state.fov</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>617</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>618</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>619</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>620</span> * Gets the field of view.
+<span class='line'>621</span> *
+<span class='line'>622</span> * @return {number} the vertical field of view, in degrees
+<span class='line'>623</span> */</span><span class="WHIT">
+<span class='line'>624</span> </span><span class="WHIT"> </span><span class="NAME">getFov</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>625</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.state.fov</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>626</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>627</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>628</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>629</span> * Returns the angle (yaw, pitch) for a given pixel coordinate.
+<span class='line'>630</span> *
+<span class='line'>631</span> * @param {number} x the x-coordinate of the pixel, measured in pixels
+<span class='line'>632</span> * from the left edge of the panorama.
+<span class='line'>633</span> * @param {number} y the y-coordinate of the pixel, measured in pixels
+<span class='line'>634</span> * from the top edge of the panorama.
+<span class='line'>635</span> * @return {number} .yaw the yaw angle of the pixel (0 &lt;= yaw &lt; 360)
+<span class='line'>636</span> * @return {number} .pitch the pitch angle of the pixel (-180 &lt;= pitch &lt;= 180)
+<span class='line'>637</span> *
+<span class='line'>638</span> * @example
+<span class='line'>639</span> * var container = ...; // an HTML element
+<span class='line'>640</span> * var pano = ...; // a bigshot.VRPanorama
+<span class='line'>641</span> * ...
+<span class='line'>642</span> * container.addEventListener ("click", function (e) {
+<span class='line'>643</span> * var clickX = e.clientX - container.offsetX;
+<span class='line'>644</span> * var clickY = e.clientY - container.offsetY;
+<span class='line'>645</span> * var polar = pano.screenToPolar (clickX, clickY);
+<span class='line'>646</span> * alert ("You clicked at: " +
+<span class='line'>647</span> * "Yaw: " + polar.yaw +
+<span class='line'>648</span> * " Pitch: " + polar.pitch);
+<span class='line'>649</span> * });
+<span class='line'>650</span> */</span><span class="WHIT">
+<span class='line'>651</span> </span><span class="WHIT"> </span><span class="NAME">screenToPolar</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>652</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.screenToRayDelta</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>653</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$V</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">dray.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dray.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dray.z</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>654</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>655</span> </span><span class="WHIT"> </span><span class="NAME">ray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Matrix.RotationX</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180.0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ensure4x4</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ray</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>656</span> </span><span class="WHIT"> </span><span class="NAME">ray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Matrix.RotationY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">this.getYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180.0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ensure4x4</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ray</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>657</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>658</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ray.e</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>659</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ray.e</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>660</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ray.e</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>661</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>662</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dxz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dz</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dz</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>663</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>664</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dyaw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.atan2</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">dz</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>665</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dpitch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.atan2</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dy</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dxz</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>666</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>667</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>668</span> </span><span class="WHIT"> </span><span class="NAME">res.yaw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dyaw</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">360</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">360.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>669</span> </span><span class="WHIT"> </span><span class="NAME">res.pitch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dpitch</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>670</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>671</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>672</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>673</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>674</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>675</span> * Restricts the pitch value to be between the minPitch and maxPitch parameters.
+<span class='line'>676</span> *
+<span class='line'>677</span> * @param {number} p the pitch value
+<span class='line'>678</span> * @returns the constrained pitch value.
+<span class='line'>679</span> */</span><span class="WHIT">
+<span class='line'>680</span> </span><span class="WHIT"> </span><span class="NAME">snapPitch</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>681</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.maxPitch</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>682</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.minPitch</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>683</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>684</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>685</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>686</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>687</span> * Sets the current camera pitch.
+<span class='line'>688</span> *
+<span class='line'>689</span> * @param {number} p the pitch, in degrees
+<span class='line'>690</span> */</span><span class="WHIT">
+<span class='line'>691</span> </span><span class="WHIT"> </span><span class="NAME">setPitch</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>692</span> </span><span class="WHIT"> </span><span class="NAME">this.state.rotation.p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.snapPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>693</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>694</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>695</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>696</span> * Subtraction mod 360, sort of...
+<span class='line'>697</span> *
+<span class='line'>698</span> * @private
+<span class='line'>699</span> * @returns the angular distance with smallest magnitude to add to p0 to get to p1 % 360
+<span class='line'>700</span> */</span><span class="WHIT">
+<span class='line'>701</span> </span><span class="WHIT"> </span><span class="NAME">circleDistance</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>702</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>703</span> </span><span class="WHIT"> </span><span class="COMM">// p1 is somewhere clockwise to p0</span><span class="WHIT">
+<span class='line'>704</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// move clockwise</span><span class="WHIT">
+<span class='line'>705</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">360</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// move counterclockwise, first -p0 to get to 0, then p1 - 360.</span><span class="WHIT">
+<span class='line'>706</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>707</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>708</span> </span><span class="WHIT"> </span><span class="COMM">// p1 is somewhere counterclockwise to p0</span><span class="WHIT">
+<span class='line'>709</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// move counterclockwise</span><span class="WHIT">
+<span class='line'>710</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">360</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// move clockwise, first (360-p= to get to 0, then another p1 degrees</span><span class="WHIT">
+<span class='line'>711</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>712</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>713</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>714</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>715</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>716</span> * Subtraction mod 360, sort of...
+<span class='line'>717</span> *
+<span class='line'>718</span> * @private
+<span class='line'>719</span> */</span><span class="WHIT">
+<span class='line'>720</span> </span><span class="WHIT"> </span><span class="NAME">circleSnapTo</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>721</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.circleDistance</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>722</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.circleDistance</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>723</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>724</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>725</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>726</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>727</span> * Constrains a yaw value to the required minimum and maximum values.
+<span class='line'>728</span> *
+<span class='line'>729</span> * @private
+<span class='line'>730</span> */</span><span class="WHIT">
+<span class='line'>731</span> </span><span class="WHIT"> </span><span class="NAME">snapYaw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>732</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">360</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>733</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>734</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">360</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>735</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>736</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.parameters.minYaw</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.parameters.maxYaw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>737</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.parameters.maxYaw</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.parameters.minYaw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>738</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">circleSnapTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.minYaw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.maxYaw</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>739</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>740</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>741</span> </span><span class="WHIT"> </span><span class="COMM">// The only time when minYaw > maxYaw is when the interval</span><span class="WHIT">
+<span class='line'>742</span> </span><span class="WHIT"> </span><span class="COMM">// contains the 0 angle.</span><span class="WHIT">
+<span class='line'>743</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.parameters.minYaw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>744</span> </span><span class="WHIT"> </span><span class="COMM">// ok, we're somewhere between minYaw and 0.0</span><span class="WHIT">
+<span class='line'>745</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.parameters.maxYaw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>746</span> </span><span class="WHIT"> </span><span class="COMM">// we're somewhere between maxYaw and minYaw </span><span class="WHIT">
+<span class='line'>747</span> </span><span class="WHIT"> </span><span class="COMM">// (but on the wrong side).</span><span class="WHIT">
+<span class='line'>748</span> </span><span class="WHIT"> </span><span class="COMM">// figure out the nearest point and snap to it</span><span class="WHIT">
+<span class='line'>749</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">circleSnapTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.minYaw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.parameters.maxYaw</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>750</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>751</span> </span><span class="WHIT"> </span><span class="COMM">// ok, we're somewhere between 0.0 and maxYaw</span><span class="WHIT">
+<span class='line'>752</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>753</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>754</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>755</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>756</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>757</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>758</span> * Sets the current camera yaw. The yaw is normalized between
+<span class='line'>759</span> * 0 &lt;= y &lt; 360.
+<span class='line'>760</span> *
+<span class='line'>761</span> * @param {number} y the yaw, in degrees
+<span class='line'>762</span> */</span><span class="WHIT">
+<span class='line'>763</span> </span><span class="WHIT"> </span><span class="NAME">setYaw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>764</span> </span><span class="WHIT"> </span><span class="NAME">this.state.rotation.y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.snapYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>765</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>766</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>767</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>768</span> * Gets the current camera yaw.
+<span class='line'>769</span> *
+<span class='line'>770</span> * @return {number} the yaw, in degrees
+<span class='line'>771</span> */</span><span class="WHIT">
+<span class='line'>772</span> </span><span class="WHIT"> </span><span class="NAME">getYaw</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>773</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.state.rotation.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>774</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>775</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>776</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>777</span> * Gets the current camera pitch.
+<span class='line'>778</span> *
+<span class='line'>779</span> * @return {number} the pitch, in degrees
+<span class='line'>780</span> */</span><span class="WHIT">
+<span class='line'>781</span> </span><span class="WHIT"> </span><span class="NAME">getPitch</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>782</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.state.rotation.p</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>783</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>784</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>785</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>786</span> * Unregisters event handlers and other page-level hooks. The client need not call this
+<span class='line'>787</span> * method unless bigshot images are created and removed from the page
+<span class='line'>788</span> * dynamically. In that case, this method must be called when the client wishes to
+<span class='line'>789</span> * free the resources allocated by the image. Otherwise the browser will garbage-collect
+<span class='line'>790</span> * all resources automatically.
+<span class='line'>791</span> * @public
+<span class='line'>792</span> */</span><span class="WHIT">
+<span class='line'>793</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>794</span> </span><span class="WHIT"> </span><span class="NAME">this.disposed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>795</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.unregisterListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"resize"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onresizeHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>796</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.unregisterListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">document.body</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"orientationchange"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onresizeHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>797</span> </span><span class="WHIT"> </span><span class="NAME">this.removeEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>798</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>799</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.vrFaces.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>800</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>801</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>802</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer.dispose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>803</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>804</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>805</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>806</span> * Creates and initializes a {@link bigshot.VREvent} object.
+<span class='line'>807</span> * The {@link bigshot.VREvent#ray}, {@link bigshot.VREvent#yaw},
+<span class='line'>808</span> * {@link bigshot.VREvent#pitch}, {@link bigshot.Event#target} and
+<span class='line'>809</span> * {@link bigshot.Event#currentTarget} fields are set.
+<span class='line'>810</span> *
+<span class='line'>811</span> * @param {Object} data the data object for the event
+<span class='line'>812</span> * @param {number} data.clientX the client x-coordinate of the event
+<span class='line'>813</span> * @param {number} data.clientY the client y-coordinate of the event
+<span class='line'>814</span> * @returns the new event object
+<span class='line'>815</span> * @type bigshot.VREvent
+<span class='line'>816</span> */</span><span class="WHIT">
+<span class='line'>817</span> </span><span class="WHIT"> </span><span class="NAME">createVREventData</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>818</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">elementPos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.getElementPosition</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>819</span> </span><span class="WHIT"> </span><span class="NAME">data.localX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.clientX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">elementPos.x</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>820</span> </span><span class="WHIT"> </span><span class="NAME">data.localY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.clientY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">elementPos.y</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>821</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>822</span> </span><span class="WHIT"> </span><span class="NAME">data.ray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.screenToRay</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.localX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data.localY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>823</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>824</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">polar</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.screenToPolar</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.localX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data.localY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>825</span> </span><span class="WHIT"> </span><span class="NAME">data.yaw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">polar.yaw</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>826</span> </span><span class="WHIT"> </span><span class="NAME">data.pitch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">polar.pitch</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>827</span> </span><span class="WHIT"> </span><span class="NAME">data.target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>828</span> </span><span class="WHIT"> </span><span class="NAME">data.currentTarget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>829</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>830</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.VREvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>831</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>832</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>833</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>834</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>835</span> * Sets up transformation matrices etc. Calls all render listeners with a state parameter
+<span class='line'>836</span> * of {@link bigshot.VRPanorama.ONRENDER_BEGIN}.
+<span class='line'>837</span> *
+<span class='line'>838</span> * @private
+<span class='line'>839</span> *
+<span class='line'>840</span> * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+<span class='line'>841</span> * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+<span class='line'>842</span> */</span><span class="WHIT">
+<span class='line'>843</span> </span><span class="WHIT"> </span><span class="NAME">beginRender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>844</span> </span><span class="WHIT"> </span><span class="NAME">this.onrender</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.VRPanorama.ONRENDER_BEGIN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>845</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer.beginRender</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.state.rotation</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.state.fov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.state.translation</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.transformOffsets</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>846</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>847</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>848</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>849</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>850</span> * Add a function that will be called at various times during the render.
+<span class='line'>851</span> *
+<span class='line'>852</span> * @param {bigshot.VRPanorama.RenderListener} listener the listener function
+<span class='line'>853</span> */</span><span class="WHIT">
+<span class='line'>854</span> </span><span class="WHIT"> </span><span class="NAME">addRenderListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">listener</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>855</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>856</span> </span><span class="WHIT"> </span><span class="NAME">rl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rl.concat</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.renderListeners</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>857</span> </span><span class="WHIT"> </span><span class="NAME">rl.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">listener</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>858</span> </span><span class="WHIT"> </span><span class="NAME">this.renderListeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>859</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>860</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>861</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>862</span> * Removes a function that will be called at various times during the render.
+<span class='line'>863</span> *
+<span class='line'>864</span> * @param {bigshot.VRPanorama.RenderListener} listener the listener function
+<span class='line'>865</span> */</span><span class="WHIT">
+<span class='line'>866</span> </span><span class="WHIT"> </span><span class="NAME">removeRenderListener</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">listener</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>867</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>868</span> </span><span class="WHIT"> </span><span class="NAME">rl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rl.concat</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.renderListeners</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>869</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">rl.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>870</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rl</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">listener</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>871</span> </span><span class="WHIT"> </span><span class="NAME">rl.splice</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>872</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>873</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>874</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>875</span> </span><span class="WHIT"> </span><span class="NAME">this.renderListeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>876</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>877</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>878</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>879</span> * Called at the start and end of every render.
+<span class='line'>880</span> *
+<span class='line'>881</span> * @event
+<span class='line'>882</span> * @private
+<span class='line'>883</span> * @type function()
+<span class='line'>884</span> * @param {bigshot.VRPanorama.RenderState} state the current render state
+<span class='line'>885</span> */</span><span class="WHIT">
+<span class='line'>886</span> </span><span class="WHIT"> </span><span class="NAME">onrender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">state</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>887</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.renderListeners</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>888</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">rl.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>889</span> </span><span class="WHIT"> </span><span class="NAME">rl</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">state</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>890</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>891</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>892</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>893</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>894</span> * Performs per-render cleanup. Calls all render listeners with a state parameter
+<span class='line'>895</span> * of {@link bigshot.VRPanorama.ONRENDER_END}.
+<span class='line'>896</span> *
+<span class='line'>897</span> * @private
+<span class='line'>898</span> *
+<span class='line'>899</span> * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+<span class='line'>900</span> * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+<span class='line'>901</span> */</span><span class="WHIT">
+<span class='line'>902</span> </span><span class="WHIT"> </span><span class="NAME">endRender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>903</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>904</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">endRender</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>905</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>906</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer.endRender</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>907</span> </span><span class="WHIT"> </span><span class="NAME">this.onrender</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.VRPanorama.ONRENDER_END</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>908</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>909</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>910</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>911</span> * Add a function that will be called to render any additional quads.
+<span class='line'>912</span> *
+<span class='line'>913</span> * @param {bigshot.VRPanorama.Renderable} renderable The renderable, a function responsible for
+<span class='line'>914</span> * rendering additional scene elements.
+<span class='line'>915</span> */</span><span class="WHIT">
+<span class='line'>916</span> </span><span class="WHIT"> </span><span class="NAME">addRenderable</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">renderable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>917</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>918</span> </span><span class="WHIT"> </span><span class="NAME">rl.concat</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.renderables</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>919</span> </span><span class="WHIT"> </span><span class="NAME">rl.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">renderable</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>920</span> </span><span class="WHIT"> </span><span class="NAME">this.renderables</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>921</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>922</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>923</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>924</span> * Removes a function that will be called to render any additional quads.
+<span class='line'>925</span> *
+<span class='line'>926</span> * @param {bigshot.VRPanorama.Renderable} renderable The renderable added using
+<span class='line'>927</span> * {@link bigshot.VRPanorama#addRenderable}.
+<span class='line'>928</span> */</span><span class="WHIT">
+<span class='line'>929</span> </span><span class="WHIT"> </span><span class="NAME">removeRenderable</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">renderable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>930</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>931</span> </span><span class="WHIT"> </span><span class="NAME">rl.concat</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.renderables</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>932</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">rl.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>933</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rl</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">listener</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>934</span> </span><span class="WHIT"> </span><span class="NAME">rl.splice</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>935</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>936</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>937</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>938</span> </span><span class="WHIT"> </span><span class="NAME">this.renderables</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>939</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>940</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>941</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>942</span> * Renders the VR cube.
+<span class='line'>943</span> *
+<span class='line'>944</span> * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+<span class='line'>945</span> * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+<span class='line'>946</span> */</span><span class="WHIT">
+<span class='line'>947</span> </span><span class="WHIT"> </span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>948</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.disposed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>949</span> </span><span class="WHIT"> </span><span class="NAME">this.beginRender</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>950</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>951</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scene</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.renderer.createTexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>952</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>953</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>954</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>955</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>956</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>957</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.renderables.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>958</span> </span><span class="WHIT"> </span><span class="NAME">this.renderables</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">this.renderer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">scene</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>959</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>960</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>961</span> </span><span class="WHIT"> </span><span class="NAME">scene.render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>962</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>963</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.hotspots.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>964</span> </span><span class="WHIT"> </span><span class="NAME">this.hotspots</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>965</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>966</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>967</span> </span><span class="WHIT"> </span><span class="NAME">this.endRender</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>968</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>969</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>970</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>971</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>972</span> * Render updated faces. Called as tiles are loaded from the server.
+<span class='line'>973</span> *
+<span class='line'>974</span> * @param [cause] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+<span class='line'>975</span> * @param [data] parameter for the {@link bigshot.VRPanorama.RenderListener}s.
+<span class='line'>976</span> */</span><span class="WHIT">
+<span class='line'>977</span> </span><span class="WHIT"> </span><span class="NAME">renderUpdated</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>978</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.disposed</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.renderer.supportsUpdate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>979</span> </span><span class="WHIT"> </span><span class="NAME">this.beginRender</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>980</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>981</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scene</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.renderer.createTexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>982</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>983</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>984</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">isUpdated</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>985</span> </span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">scene</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>986</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>987</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>988</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>989</span> </span><span class="WHIT"> </span><span class="NAME">scene.render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>990</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>991</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.hotspots.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>992</span> </span><span class="WHIT"> </span><span class="NAME">this.hotspots</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>993</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>994</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>995</span> </span><span class="WHIT"> </span><span class="NAME">this.endRender</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>996</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>997</span> </span><span class="WHIT"> </span><span class="NAME">this.render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cause</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>998</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>999</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1000</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1001</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1002</span> * The current drag mode.
+<span class='line'>1003</span> *
+<span class='line'>1004</span> * @private
+<span class='line'>1005</span> */</span><span class="WHIT">
+<span class='line'>1006</span> </span><span class="WHIT"> </span><span class="NAME">dragMode</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">bigshot.VRPanorama.DRAG_GRAB</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1007</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1008</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1009</span> * Sets the mouse dragging mode.
+<span class='line'>1010</span> *
+<span class='line'>1011</span> * @param mode one of {@link bigshot.VRPanorama.DRAG_PAN} or {@link bigshot.VRPanorama.DRAG_GRAB}.
+<span class='line'>1012</span> */</span><span class="WHIT">
+<span class='line'>1013</span> </span><span class="WHIT"> </span><span class="NAME">setDragMode</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1014</span> </span><span class="WHIT"> </span><span class="NAME">this.dragMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mode</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1015</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1016</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1017</span> </span><span class="WHIT"> </span><span class="NAME">addEventListeners</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1018</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1019</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.registerListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1020</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1021</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1022</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1023</span> </span><span class="WHIT"> </span><span class="NAME">removeEventListeners</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1024</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1025</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.unregisterListener</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.allListeners</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1026</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1027</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1028</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1029</span> </span><span class="WHIT"> </span><span class="NAME">dragMouseDown</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1030</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1031</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1032</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.clientY</span><span class="WHIT">
+<span class='line'>1033</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1034</span> </span><span class="WHIT"> </span><span class="NAME">this.dragLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1035</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1036</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.clientY</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1037</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1038</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1039</span> </span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1000000</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1040</span> </span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>1041</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1042</span> </span><span class="WHIT"> </span><span class="NAME">this.dragDistance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1043</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1044</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1045</span> </span><span class="WHIT"> </span><span class="NAME">dragMouseUp</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1046</span> </span><span class="WHIT"> </span><span class="COMM">// In case we got a mouse up with out a previous mouse down,</span><span class="WHIT">
+<span class='line'>1047</span> </span><span class="WHIT"> </span><span class="COMM">// for example, double-click on title bar to maximize the </span><span class="WHIT">
+<span class='line'>1048</span> </span><span class="WHIT"> </span><span class="COMM">// window</span><span class="WHIT">
+<span class='line'>1049</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.dragLast</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1050</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1051</span> </span><span class="WHIT"> </span><span class="NAME">this.dragLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1052</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1053</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1054</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1055</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1056</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dragLast.dx</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1057</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dragLast.dy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1058</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1059</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dragLast.dt</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1060</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dtb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragLast.time</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1061</span> </span><span class="WHIT"> </span><span class="NAME">this.dragLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1062</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1063</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ds</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1064</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.05</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">dtb</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">250</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.parameters.fling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1065</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.state.fov</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1066</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1067</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1068</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1069</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">flingScale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parameters.flingScale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1070</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1071</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1072</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1073</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1074</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dat</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1075</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1076</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fact</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">flingScale</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1077</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dat</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fact</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1078</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">fact</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.01</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1079</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dat</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1080</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1081</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fact</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.pow</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">flingScale</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1082</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dat</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fact</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1083</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">fact</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.01</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1084</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1085</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1086</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1087</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1088</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1089</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1090</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1091</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1092</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1093</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1094</span> </span><span class="WHIT"> </span><span class="NAME">dragMouseMove</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1095</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.currentGesture</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1096</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.dragMode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">bigshot.VRPanorama.DRAG_GRAB</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1097</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1098</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.state.fov</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1099</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e.clientX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragStart.clientX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1100</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e.clientY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragStart.clientY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1101</span> </span><span class="WHIT"> </span><span class="NAME">this.dragDistance</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1102</span> </span><span class="WHIT"> </span><span class="NAME">this.setYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1103</span> </span><span class="WHIT"> </span><span class="NAME">this.setPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1104</span> </span><span class="WHIT"> </span><span class="NAME">this.renderAsap</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1105</span> </span><span class="WHIT"> </span><span class="NAME">this.dragStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1106</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragLast.time</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1107</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1108</span> </span><span class="WHIT"> </span><span class="NAME">this.dragLast</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1109</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.dragLast.clientX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">e.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1110</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.dragLast.clientY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">e.clientY</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1111</span> </span><span class="WHIT"> </span><span class="NAME">dt</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dt</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1112</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1113</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.clientY</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1114</span> </span><span class="WHIT"> </span><span class="NAME">time</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>1115</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1116</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1117</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1118</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">this.state.fov</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1119</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e.clientX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragStart.clientX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1120</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e.clientY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.dragStart.clientY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1121</span> </span><span class="WHIT"> </span><span class="NAME">this.dragDistance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1122</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>1123</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1124</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1125</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1126</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1127</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1128</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1129</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1130</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1131</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1132</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1133</span> </span><span class="WHIT"> </span><span class="NAME">onMouseDoubleClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1134</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">eventData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createVREventData</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1135</span> </span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"dblclick"</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1136</span> </span><span class="WHIT"> </span><span class="NAME">clientX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.clientX</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1137</span> </span><span class="WHIT"> </span><span class="NAME">clientY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.clientY</span><span class="WHIT">
+<span class='line'>1138</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1139</span> </span><span class="WHIT"> </span><span class="NAME">this.fireEvent</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"dblclick"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eventData</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1140</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">eventData.defaultPrevented</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1141</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothRotateToXY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1142</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1143</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1144</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1145</span> </span><span class="WHIT"> </span><span class="NAME">mouseDoubleClick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1146</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.getElementPosition</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1147</span> </span><span class="WHIT"> </span><span class="NAME">this.onMouseDoubleClick</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e.clientX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">pos.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e.clientY</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">pos.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1148</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1149</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1150</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1151</span> * Begins a potential drag event.
+<span class='line'>1152</span> *
+<span class='line'>1153</span> * @private
+<span class='line'>1154</span> */</span><span class="WHIT">
+<span class='line'>1155</span> </span><span class="WHIT"> </span><span class="NAME">gestureStart</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1156</span> </span><span class="WHIT"> </span><span class="NAME">this.currentGesture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1157</span> </span><span class="WHIT"> </span><span class="NAME">startFov</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1158</span> </span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">event.scale</span><span class="WHIT">
+<span class='line'>1159</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1160</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1161</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1162</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1163</span> * Begins a potential drag event.
+<span class='line'>1164</span> *
+<span class='line'>1165</span> * @private
+<span class='line'>1166</span> */</span><span class="WHIT">
+<span class='line'>1167</span> </span><span class="WHIT"> </span><span class="NAME">gestureEnd</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1168</span> </span><span class="WHIT"> </span><span class="NAME">this.currentGesture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1169</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1170</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1171</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1172</span> * Begins a potential drag event.
+<span class='line'>1173</span> *
+<span class='line'>1174</span> * @private
+<span class='line'>1175</span> */</span><span class="WHIT">
+<span class='line'>1176</span> </span><span class="WHIT"> </span><span class="NAME">gestureChange</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1177</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentGesture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1178</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newFov</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.currentGesture.startFov</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">event.scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1179</span> </span><span class="WHIT"> </span><span class="NAME">this.setFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">newFov</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1180</span> </span><span class="WHIT"> </span><span class="NAME">this.renderAsap</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1181</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1182</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1183</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1184</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1185</span> * Sets the maximum texture magnification.
+<span class='line'>1186</span> *
+<span class='line'>1187</span> * @param {number} v the maximum texture magnification
+<span class='line'>1188</span> * @see bigshot.VRPanoramaParameters#maxTextureMagnification
+<span class='line'>1189</span> */</span><span class="WHIT">
+<span class='line'>1190</span> </span><span class="WHIT"> </span><span class="NAME">setMaxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1191</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1192</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1193</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1194</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1195</span> * Gets the current maximum texture magnification.
+<span class='line'>1196</span> *
+<span class='line'>1197</span> * @type number
+<span class='line'>1198</span> * @see bigshot.VRPanoramaParameters#maxTextureMagnification
+<span class='line'>1199</span> */</span><span class="WHIT">
+<span class='line'>1200</span> </span><span class="WHIT"> </span><span class="NAME">getMaxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1201</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.maxTextureMagnification</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1202</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1203</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1204</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1205</span> * Computes the minimum field of view where the resulting image will not
+<span class='line'>1206</span> * have to stretch the textures more than given by the
+<span class='line'>1207</span> * {@link bigshot.VRPanoramaParameters#maxTextureMagnification} parameter.
+<span class='line'>1208</span> *
+<span class='line'>1209</span> * @type number
+<span class='line'>1210</span> * @return the minimum FOV, below which it is necessary to stretch the
+<span class='line'>1211</span> * vr cube texture more than the given {@link bigshot.VRPanoramaParameters#maxTextureMagnification}
+<span class='line'>1212</span> */</span><span class="WHIT">
+<span class='line'>1213</span> </span><span class="WHIT"> </span><span class="NAME">getMinFovFromViewportAndImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1214</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">halfHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1215</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1216</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">minFaceHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">parameters.height</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1217</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1218</span> </span><span class="WHIT"> </span><span class="NAME">minFaceHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">minFaceHeight</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.vrFaces</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">parameters.height</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1219</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1220</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1221</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">edgeSizeY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">minFaceHeight</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1222</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1223</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">halfHeight</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">edgeSizeY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1224</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1225</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.atan</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">wy</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1226</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1227</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">mz</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1228</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1229</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1230</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1231</span> * Transforms screen coordinates to a world-coordinate ray.
+<span class='line'>1232</span> * @private
+<span class='line'>1233</span> */</span><span class="WHIT">
+<span class='line'>1234</span> </span><span class="WHIT"> </span><span class="NAME">screenToRay</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1235</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.screenToRayDelta</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1236</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.renderer.transformToWorld</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dray</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1237</span> </span><span class="WHIT"> </span><span class="NAME">ray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Matrix.RotationY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">this.transformOffsets.y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180.0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ensure4x4</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">xPoint3Dhom1</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ray</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1238</span> </span><span class="WHIT"> </span><span class="NAME">ray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Matrix.RotationX</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">this.transformOffsets.p</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180.0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ensure4x4</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">xPoint3Dhom1</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ray</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1239</span> </span><span class="WHIT"> </span><span class="NAME">ray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Matrix.RotationZ</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">this.transformOffsets.r</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180.0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ensure4x4</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">xPoint3Dhom1</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ray</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1240</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ray</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1241</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1242</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1243</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1244</span> * @private
+<span class='line'>1245</span> */</span><span class="WHIT">
+<span class='line'>1246</span> </span><span class="WHIT"> </span><span class="NAME">screenToRayDelta</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1247</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">halfHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1248</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">halfWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1249</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">halfWidth</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1250</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">halfHeight</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1251</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1252</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">edgeSizeY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.tan</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.state.fov</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1253</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">edgeSizeX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">edgeSizeY</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">this.renderer.getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.renderer.getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1254</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1255</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">edgeSizeX</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">halfWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1256</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">edgeSizeY</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">halfHeight</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1257</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wz</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1258</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1259</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1260</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">wx</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1261</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">wy</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1262</span> </span><span class="WHIT"> </span><span class="NAME">z</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">wz</span><span class="WHIT">
+<span class='line'>1263</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1264</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1265</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1266</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1267</span> * Smoothly rotates the panorama so that the
+<span class='line'>1268</span> * point given by x and y, in pixels relative to the top left corner
+<span class='line'>1269</span> * of the panorama, ends up in the center of the viewport.
+<span class='line'>1270</span> *
+<span class='line'>1271</span> * @param {int} x the x-coordinate, in pixels from the left edge
+<span class='line'>1272</span> * @param {int} y the y-coordinate, in pixels from the top edge
+<span class='line'>1273</span> */</span><span class="WHIT">
+<span class='line'>1274</span> </span><span class="WHIT"> </span><span class="NAME">smoothRotateToXY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1275</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">polar</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.screenToPolar</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1276</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1277</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothRotateTo</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.snapYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">polar.yaw</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.snapPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">polar.pitch</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.state.fov</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1278</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1279</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1280</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1281</span> * Gives the step to take to slowly approach the
+<span class='line'>1282</span> * target value.
+<span class='line'>1283</span> *
+<span class='line'>1284</span> * @example
+<span class='line'>1285</span> * current = current + this.ease (current, target, 1.0);
+<span class='line'>1286</span> * @private
+<span class='line'>1287</span> */</span><span class="WHIT">
+<span class='line'>1288</span> </span><span class="WHIT"> </span><span class="NAME">ease</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">snapFrom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1289</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">easingFrom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">40</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1290</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">snapFrom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1291</span> </span><span class="WHIT"> </span><span class="NAME">snapFrom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1292</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1293</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ignoreFrom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1294</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1295</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1296</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">easingFrom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1297</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">speed</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1298</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">easingFrom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1299</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1300</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">distance</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">snapFrom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1301</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">distance</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1302</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">distance</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">ignoreFrom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1303</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1304</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1305</span> </span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">speed</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">easingFrom</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1306</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1307</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1308</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1309</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1310</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1311</span> * Resets the "idle" clock.
+<span class='line'>1312</span> * @private
+<span class='line'>1313</span> */</span><span class="WHIT">
+<span class='line'>1314</span> </span><span class="WHIT"> </span><span class="NAME">resetIdle</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1315</span> </span><span class="WHIT"> </span><span class="NAME">this.idleCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1316</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1317</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1318</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1319</span> * Idle clock.
+<span class='line'>1320</span> * @private
+<span class='line'>1321</span> */</span><span class="WHIT">
+<span class='line'>1322</span> </span><span class="WHIT"> </span><span class="NAME">idleTick</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1323</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.maxIdleCounter</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1324</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1325</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1326</span> </span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">this.idleCounter</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1327</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.idleCounter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">this.maxIdleCounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1328</span> </span><span class="WHIT"> </span><span class="NAME">this.autoRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1329</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1330</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1331</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1332</span> </span><span class="WHIT"> </span><span class="NAME">that.idleTick</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1333</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1334</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1335</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1336</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1337</span> * Sets the panorama to auto-rotate after a certain time has
+<span class='line'>1338</span> * elapsed with no user interaction. Default is disabled.
+<span class='line'>1339</span> *
+<span class='line'>1340</span> * @param {int} delay the delay in seconds. Set to &lt; 0 to disable
+<span class='line'>1341</span> * auto-rotation when idle
+<span class='line'>1342</span> */</span><span class="WHIT">
+<span class='line'>1343</span> </span><span class="WHIT"> </span><span class="NAME">autoRotateWhenIdle</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delay</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1344</span> </span><span class="WHIT"> </span><span class="NAME">this.maxIdleCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delay</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1345</span> </span><span class="WHIT"> </span><span class="NAME">this.idleCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1346</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delay</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1347</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1348</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.maxIdleCounter</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1349</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1350</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1351</span> </span><span class="WHIT"> </span><span class="NAME">that.idleTick</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1352</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1353</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1354</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1355</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1356</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1357</span> * Starts auto-rotation of the camera. If the yaw is constrained,
+<span class='line'>1358</span> * will pan back and forth between the yaw endpoints. Call
+<span class='line'>1359</span> * {@link #smoothRotate}() to stop the rotation.
+<span class='line'>1360</span> */</span><span class="WHIT">
+<span class='line'>1361</span> </span><span class="WHIT"> </span><span class="NAME">autoRotate</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1362</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1363</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.state.fov</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">400</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1364</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1365</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">scale</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1366</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1367</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>1368</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1369</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextPos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.getYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1370</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.parameters.minYaw</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">that.parameters.maxYaw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1371</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nextPos</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">that.parameters.maxYaw</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">nextPos</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">that.parameters.minYaw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1372</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1373</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1374</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1375</span> </span><span class="WHIT"> </span><span class="COMM">// The only time when minYaw > maxYaw is when the interval</span><span class="WHIT">
+<span class='line'>1376</span> </span><span class="WHIT"> </span><span class="COMM">// contains the 0 angle.</span><span class="WHIT">
+<span class='line'>1377</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nextPos</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">that.parameters.minYaw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1378</span> </span><span class="WHIT"> </span><span class="COMM">// ok, we're somewhere between minYaw and 0.0</span><span class="WHIT">
+<span class='line'>1379</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nextPos</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">that.parameters.maxYaw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1380</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1381</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1382</span> </span><span class="WHIT"> </span><span class="COMM">// ok, we're somewhere between 0.0 and maxYaw</span><span class="WHIT">
+<span class='line'>1383</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1384</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1385</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1386</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1387</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.ease</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.getPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1388</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1389</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.ease</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">45.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1390</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1391</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1392</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1393</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1394</span> * Smoothly rotates the panorama to the given state.
+<span class='line'>1395</span> *
+<span class='line'>1396</span> * @param {number} yaw the target yaw
+<span class='line'>1397</span> * @param {number} pitch the target pitch
+<span class='line'>1398</span> * @param {number} fov the target vertical field of view
+<span class='line'>1399</span> * @param {number} the speed to rotate with
+<span class='line'>1400</span> */</span><span class="WHIT">
+<span class='line'>1401</span> </span><span class="WHIT"> </span><span class="NAME">smoothRotateTo</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">yaw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pitch</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1402</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1403</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
+<span class='line'>1404</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1405</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.circleDistance</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">yaw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.getYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1406</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">that.ease</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">distance</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1407</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.01</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1408</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1409</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.ease</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.getPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pitch</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1410</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.01</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1411</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1412</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.ease</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">speed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1413</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.01</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1414</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1415</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1416</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1417</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1418</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1419</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1420</span> * Smoothly rotates the camera. If all of the dp, dy and df functions are null, stops
+<span class='line'>1421</span> * any smooth rotation.
+<span class='line'>1422</span> *
+<span class='line'>1423</span> * @param {function()} [dy] function giving the yaw increment for the next frame
+<span class='line'>1424</span> * or null if no further yaw movement is required
+<span class='line'>1425</span> * @param {function()} [dp] function giving the pitch increment for the next frame
+<span class='line'>1426</span> * or null if no further pitch movement is required
+<span class='line'>1427</span> * @param {function()} [df] function giving the field of view (degrees) increment
+<span class='line'>1428</span> * for the next frame or null if no further fov adjustment is required
+<span class='line'>1429</span> */</span><span class="WHIT">
+<span class='line'>1430</span> </span><span class="WHIT"> </span><span class="NAME">smoothRotate</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dy</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">df</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1431</span> </span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">this.smoothrotatePermit</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1432</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">savedPermit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.smoothrotatePermit</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1433</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">df</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1434</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1435</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1436</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1437</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1438</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1439</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1440</span> </span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1441</span> </span><span class="WHIT"> </span><span class="NAME">df</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">df</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1442</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>1443</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1444</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">stepper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1445</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.smoothrotatePermit</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">savedPermit</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1446</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1447</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">fs.t</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1448</span> </span><span class="WHIT"> </span><span class="NAME">fs.t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">now</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1449</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1450</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">anyFunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1451</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fs.dy</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1452</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fs.dy</span><span class="PUNC">(</span><span class="NAME">dat</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1453</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1454</span> </span><span class="WHIT"> </span><span class="NAME">anyFunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1455</span> </span><span class="WHIT"> </span><span class="NAME">that.setYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.getYaw</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1456</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1457</span> </span><span class="WHIT"> </span><span class="NAME">fs.dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1458</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1459</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1460</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1461</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fs.dp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1462</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fs.dp</span><span class="PUNC">(</span><span class="NAME">dat</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1463</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1464</span> </span><span class="WHIT"> </span><span class="NAME">anyFunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1465</span> </span><span class="WHIT"> </span><span class="NAME">that.setPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.getPitch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1466</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1467</span> </span><span class="WHIT"> </span><span class="NAME">fs.dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1468</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1469</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1470</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1471</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fs.df</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1472</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fs.df</span><span class="PUNC">(</span><span class="NAME">dat</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1473</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1474</span> </span><span class="WHIT"> </span><span class="NAME">anyFunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1475</span> </span><span class="WHIT"> </span><span class="NAME">that.setFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1476</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1477</span> </span><span class="WHIT"> </span><span class="NAME">fs.df</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1478</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1479</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1480</span> </span><span class="WHIT"> </span><span class="NAME">that.render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1481</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">anyFunc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1482</span> </span><span class="WHIT"> </span><span class="NAME">that.browser.requestAnimationFrame</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">stepper</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.renderer.getElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1483</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1484</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1485</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1486</span> </span><span class="WHIT"> </span><span class="NAME">stepper</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1487</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1488</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1489</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1490</span> * Translates mouse wheel events.
+<span class='line'>1491</span> * @private
+<span class='line'>1492</span> */</span><span class="WHIT">
+<span class='line'>1493</span> </span><span class="WHIT"> </span><span class="NAME">mouseWheel</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1494</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1495</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">/* For IE. */</span><span class="WHIT">
+<span class='line'>1496</span> </span><span class="WHIT"> </span><span class="NAME">event</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.event</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1497</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.wheelDelta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">/* IE/Opera. */</span><span class="WHIT">
+<span class='line'>1498</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">event.wheelDelta</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">120</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1499</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>1500</span> * In Opera 9, delta differs in sign as compared to IE.
+<span class='line'>1501</span> */</span><span class="WHIT">
+<span class='line'>1502</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">window.opera</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'>1503</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1504</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.detail</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">/* Mozilla case. */</span><span class="WHIT">
+<span class='line'>1505</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>1506</span> * In Mozilla, sign of delta is different than in IE.
+<span class='line'>1507</span> * Also, delta is multiple of 3.
+<span class='line'>1508</span> */</span><span class="WHIT">
+<span class='line'>1509</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">event.detail</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1510</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1511</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1512</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>1513</span> * If delta is nonzero, handle it.
+<span class='line'>1514</span> * Basically, delta is now positive if wheel was scrolled up,
+<span class='line'>1515</span> * and negative, if wheel was scrolled down.
+<span class='line'>1516</span> */</span><span class="WHIT">
+<span class='line'>1517</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1518</span> </span><span class="WHIT"> </span><span class="NAME">this.mouseWheelHandler</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1519</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1520</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1521</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'>1522</span> * Prevent default actions caused by mouse wheel.
+<span class='line'>1523</span> * That might be ugly, but we handle scrolls somehow
+<span class='line'>1524</span> * anyway, so don't bother here..
+<span class='line'>1525</span> */</span><span class="WHIT">
+<span class='line'>1526</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.preventDefault</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1527</span> </span><span class="WHIT"> </span><span class="NAME">event.preventDefault</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1528</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1529</span> </span><span class="WHIT"> </span><span class="NAME">event.returnValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1530</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1531</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1532</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1533</span> * Utility function to interpret mouse wheel events.
+<span class='line'>1534</span> * @private
+<span class='line'>1535</span> */</span><span class="WHIT">
+<span class='line'>1536</span> </span><span class="WHIT"> </span><span class="NAME">mouseWheelHandler</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1537</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1538</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1539</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1540</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.parameters.minFov</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1541</span> </span><span class="WHIT"> </span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.9</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1542</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1543</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1544</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1545</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.parameters.maxFov</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1546</span> </span><span class="WHIT"> </span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">0.9</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1547</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1548</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1549</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1550</span> </span><span class="WHIT"> </span><span class="NAME">this.smoothRotate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1551</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">df</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">that.getFov</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">1.5</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1552</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">df</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.01</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">df</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1553</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1554</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1555</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1556</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1557</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1558</span> * Maximizes the image to cover the browser viewport.
+<span class='line'>1559</span> * The container div is removed from its parent node upon entering
+<span class='line'>1560</span> * full screen mode. When leaving full screen mode, the container
+<span class='line'>1561</span> * is appended to its old parent node. To avoid rearranging the
+<span class='line'>1562</span> * nodes, wrap the container in an extra div.
+<span class='line'>1563</span> *
+<span class='line'>1564</span> * &lt;p>For unknown reasons (probably security), browsers will
+<span class='line'>1565</span> * not let you open a window that covers the entire screen.
+<span class='line'>1566</span> * Even when specifying "fullscreen=yes", all you get is a window
+<span class='line'>1567</span> * that has a title bar and only covers the desktop (not any task
+<span class='line'>1568</span> * bars or the like). For now, this is the best that I can do,
+<span class='line'>1569</span> * but should the situation change I'll update this to be
+<span class='line'>1570</span> * full-screen&lt;i>-ier&lt;/i>.
+<span class='line'>1571</span> *
+<span class='line'>1572</span> * @param {function()} [onClose] function that is called when the user
+<span class='line'>1573</span> * exits full-screen mode
+<span class='line'>1574</span> * @public
+<span class='line'>1575</span> */</span><span class="WHIT">
+<span class='line'>1576</span> </span><span class="WHIT"> </span><span class="NAME">fullScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onClose</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1577</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullScreenHandler</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1578</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1579</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1580</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1581</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">message</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1582</span> </span><span class="WHIT"> </span><span class="NAME">message.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1583</span> </span><span class="WHIT"> </span><span class="NAME">message.style.fontSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"16pt"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1584</span> </span><span class="WHIT"> </span><span class="NAME">message.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"128px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1585</span> </span><span class="WHIT"> </span><span class="NAME">message.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"100%"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1586</span> </span><span class="WHIT"> </span><span class="NAME">message.style.color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"white"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1587</span> </span><span class="WHIT"> </span><span class="NAME">message.style.padding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"16px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1588</span> </span><span class="WHIT"> </span><span class="NAME">message.style.zIndex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"9999"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1589</span> </span><span class="WHIT"> </span><span class="NAME">message.style.textAlign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"center"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1590</span> </span><span class="WHIT"> </span><span class="NAME">message.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.75"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1591</span> </span><span class="WHIT"> </span><span class="NAME">message.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"&lt;span style='border-radius: 16px; -moz-border-radius: 16px; padding: 16px; padding-left: 32px; padding-right: 32px; background:black'>Press Esc to exit full screen mode.&lt;/span>"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1592</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1593</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1594</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1595</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.FullScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1596</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.restoreSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sizeContainer</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1597</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1598</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.addOnResize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1599</span> </span><span class="WHIT"> </span><span class="NAME">that.onresize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1600</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1601</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1602</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.addOnClose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1603</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1604</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1605</span> </span><span class="WHIT"> </span><span class="NAME">div.removeChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1606</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1607</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1608</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1609</span> </span><span class="WHIT"> </span><span class="NAME">that.fullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1610</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1611</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1612</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onClose</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1613</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.addOnClose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1614</span> </span><span class="WHIT"> </span><span class="NAME">onClose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1615</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1616</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1617</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1618</span> </span><span class="WHIT"> </span><span class="NAME">this.removeEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1619</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.open</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1620</span> </span><span class="WHIT"> </span><span class="NAME">this.addEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1621</span> </span><span class="WHIT"> </span><span class="COMM">// Safari compatibility - must update after entering fullscreen.</span><span class="WHIT">
+<span class='line'>1622</span> </span><span class="WHIT"> </span><span class="COMM">// 1s should be enough so we enter FS, but not enough for the</span><span class="WHIT">
+<span class='line'>1623</span> </span><span class="WHIT"> </span><span class="COMM">// user to wonder if something is wrong.</span><span class="WHIT">
+<span class='line'>1624</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1625</span> </span><span class="WHIT"> </span><span class="NAME">that.render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1626</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1627</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1628</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1629</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1630</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1631</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullScreenHandler.getRootElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1632</span> </span><span class="WHIT"> </span><span class="NAME">this.fullScreenHandler.getRootElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1633</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1634</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1635</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.75</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1636</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1637</span> </span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.02</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1638</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1639</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1640</span> </span><span class="WHIT"> </span><span class="NAME">message.style.display</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"none"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1641</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1642</span> </span><span class="WHIT"> </span><span class="NAME">div.removeChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1643</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1644</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1645</span> </span><span class="WHIT"> </span><span class="NAME">message.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1646</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1647</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1648</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1649</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1650</span> </span><span class="WHIT"> </span><span class="NAME">setTimeout</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1651</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3500</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1652</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1653</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1654</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1655</span> </span><span class="WHIT"> </span><span class="NAME">that.removeEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1656</span> </span><span class="WHIT"> </span><span class="NAME">that.fullScreenHandler.close</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1657</span> </span><span class="WHIT"> </span><span class="NAME">that.addEventListeners</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1658</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1659</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1660</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1661</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1662</span> * Right-sizes the canvas container.
+<span class='line'>1663</span> * @private
+<span class='line'>1664</span> */</span><span class="WHIT">
+<span class='line'>1665</span> </span><span class="WHIT"> </span><span class="NAME">onresize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1666</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fullScreenHandler</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.fullScreenHandler.isFullScreen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1667</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sizeContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1668</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.getElementSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sizeContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1669</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer.resize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">s.w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s.h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1670</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1671</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1672</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerWidth</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1673</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">window.innerHeight</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1674</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.browser.getElementSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1675</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer.resize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">s.w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s.h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1676</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1677</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer.onresize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1678</span> </span><span class="WHIT"> </span><span class="NAME">this.renderAsap</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1679</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1680</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1681</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1682</span> * Posts a render() call via a timeout or the requestAnimationFrame API.
+<span class='line'>1683</span> * Use when the render call must be done as soon as possible, but
+<span class='line'>1684</span> * can't be done in the current call context.
+<span class='line'>1685</span> */</span><span class="WHIT">
+<span class='line'>1686</span> </span><span class="WHIT"> </span><span class="NAME">renderAsap</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1687</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.renderAsapPermitTaken</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.disposed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1688</span> </span><span class="WHIT"> </span><span class="NAME">this.renderAsapPermitTaken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1689</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1690</span> </span><span class="WHIT"> </span><span class="NAME">this.browser.requestAnimationFrame</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1691</span> </span><span class="WHIT"> </span><span class="NAME">that.renderAsapPermitTaken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1692</span> </span><span class="WHIT"> </span><span class="NAME">that.render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1693</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.renderer.getElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1694</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1695</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>1696</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1697</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>1698</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>1699</span> * Automatically resizes the canvas element to the size of the
+<span class='line'>1700</span> * given element on resize.
+<span class='line'>1701</span> *
+<span class='line'>1702</span> * @param {HTMLElement} sizeContainer the element to use. Set to &lt;code>null&lt;/code>
+<span class='line'>1703</span> * to disable.
+<span class='line'>1704</span> */</span><span class="WHIT">
+<span class='line'>1705</span> </span><span class="WHIT"> </span><span class="NAME">autoResizeContainer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sizeContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>1706</span> </span><span class="WHIT"> </span><span class="NAME">this.sizeContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sizeContainer</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1707</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1708</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>1709</span>
+<span class='line'>1710</span> </span><span class="COMM">/**
+<span class='line'>1711</span> * Fired when the user double-clicks on the panorama.
+<span class='line'>1712</span> *
+<span class='line'>1713</span> * @name bigshot.VRPanorama#dblclick
+<span class='line'>1714</span> * @event
+<span class='line'>1715</span> * @param {bigshot.VREvent} event the event object
+<span class='line'>1716</span> */</span><span class="WHIT">
+<span class='line'>1717</span>
+<span class='line'>1718</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.VRPanorama</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.EventDispatcher</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>1719</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__VRPanoramaParameters.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRPanoramaParameters.js.html
new file mode 100644
index 00000000..aa5b13ed
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRPanoramaParameters.js.html
@@ -0,0 +1,324 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new VR panorama parameter object and populates it with default values for
+<span class='line'> 19</span> * all values not explicitly given.
+<span class='line'> 20</span> *
+<span class='line'> 21</span> * @class VRPanoramaParameters parameter object.
+<span class='line'> 22</span> * You need not set any fields that can be read from the image descriptor that
+<span class='line'> 23</span> * MakeImagePyramid creates. See the {@link bigshot.VRPanorama}
+<span class='line'> 24</span> * documentation for required parameters.
+<span class='line'> 25</span> *
+<span class='line'> 26</span> * &lt;p>Usage:
+<span class='line'> 27</span> *
+<span class='line'> 28</span> * @example
+<span class='line'> 29</span> * var bvr = new bigshot.VRPanorama (
+<span class='line'> 30</span> * new bigshot.VRPanoramaParameters ({
+<span class='line'> 31</span> * basePath : "/bigshot.php?file=myvr.bigshot",
+<span class='line'> 32</span> * fileSystemType : "archive",
+<span class='line'> 33</span> * container : document.getElementById ("bigshot_canvas")
+<span class='line'> 34</span> * }));
+<span class='line'> 35</span> * @param values named parameter map, see the fields below for parameter names and types.
+<span class='line'> 36</span> * @see bigshot.VRPanorama
+<span class='line'> 37</span> */</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="NAME">bigshot.VRPanoramaParameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 40</span> * Size of low resolution preview image along the longest image
+<span class='line'> 41</span> * dimension. The preview is assumed to have the same aspect
+<span class='line'> 42</span> * ratio as the full image (specified by width and height).
+<span class='line'> 43</span> *
+<span class='line'> 44</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'> 45</span> * @type int
+<span class='line'> 46</span> * @public
+<span class='line'> 47</span> */</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">this.posterSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 51</span> * Url for the image tile to show while the tile is loading and no
+<span class='line'> 52</span> * low-resolution preview is available.
+<span class='line'> 53</span> *
+<span class='line'> 54</span> * @default &lt;code>null&lt;/code>, which results in an all-black image
+<span class='line'> 55</span> * @type String
+<span class='line'> 56</span> * @public
+<span class='line'> 57</span> */</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.emptyImage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 61</span> * Suffix to append to the tile filenames. Typically &lt;code>".jpg"&lt;/code> or
+<span class='line'> 62</span> * &lt;code>".png"&lt;/code>.
+<span class='line'> 63</span> *
+<span class='line'> 64</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'> 65</span> * @type String
+<span class='line'> 66</span> */</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">this.suffix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 70</span> * The width of the full image; in pixels.
+<span class='line'> 71</span> *
+<span class='line'> 72</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'> 73</span> * @type int
+<span class='line'> 74</span> */</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">this.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 78</span> * The height of the full image; in pixels.
+<span class='line'> 79</span> *
+<span class='line'> 80</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'> 81</span> * @type int
+<span class='line'> 82</span> */</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">this.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 86</span> * For {@link bigshot.VRPanorama}, the {@code div} to render into.
+<span class='line'> 87</span> *
+<span class='line'> 88</span> * @type HTMLDivElement
+<span class='line'> 89</span> */</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 93</span> * The maximum number of times to split a cube face into four quads.
+<span class='line'> 94</span> *
+<span class='line'> 95</span> * @type int
+<span class='line'> 96</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'> 97</span> */</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTesselation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>101</span> * Size of one tile in pixels.
+<span class='line'>102</span> *
+<span class='line'>103</span> * @type int
+<span class='line'>104</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'>105</span> */</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="NAME">this.tileSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>109</span> * Tile overlap. Not implemented.
+<span class='line'>110</span> *
+<span class='line'>111</span> * @type int
+<span class='line'>112</span> * @default &lt;i>Optional&lt;/i> set by MakeImagePyramid and loaded from descriptor
+<span class='line'>113</span> */</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="NAME">this.overlap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>117</span> * Base path for the image. This is filesystem dependent; but for the two most common cases
+<span class='line'>118</span> * the following should be set
+<span class='line'>119</span> *
+<span class='line'>120</span> * &lt;ul>
+<span class='line'>121</span> * &lt;li>&lt;b>archive&lt;/b>= The basePath is &lt;code>"&lt;path&gt;/bigshot.php?file=&lt;path-to-bigshot-archive-relative-to-bigshot.php&gt;"&lt;/code>;
+<span class='line'>122</span> * for example; &lt;code>"/bigshot.php?file=images/bigshot-sample.bigshot"&lt;/code>.
+<span class='line'>123</span> * &lt;li>&lt;b>folder&lt;/b>= The basePath is &lt;code>"&lt;path-to-image-folder&gt;"&lt;/code>;
+<span class='line'>124</span> * for example; &lt;code>"/images/bigshot-sample"&lt;/code>.
+<span class='line'>125</span> * &lt;/ul>
+<span class='line'>126</span> *
+<span class='line'>127</span> * @type String
+<span class='line'>128</span> */</span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="NAME">this.basePath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>132</span> * The file system type. Used to create a filesystem instance unless
+<span class='line'>133</span> * the fileSystem field is set. Possible values are &lt;code>"archive"&lt;/code>,
+<span class='line'>134</span> * &lt;code>"folder"&lt;/code> or &lt;code>"dzi"&lt;/code>.
+<span class='line'>135</span> *
+<span class='line'>136</span> * @type String
+<span class='line'>137</span> * @default "folder"
+<span class='line'>138</span> */</span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="NAME">this.fileSystemType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"folder"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>142</span> * A reference to a filesystem implementation. If set; it overrides the
+<span class='line'>143</span> * fileSystemType field.
+<span class='line'>144</span> *
+<span class='line'>145</span> * @default set depending on value of bigshot.VRPanoramaParameters#fileSystemType
+<span class='line'>146</span> * @type bigshot.FileSystem
+<span class='line'>147</span> */</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="NAME">this.fileSystem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>151</span> * Object used to load data files.
+<span class='line'>152</span> *
+<span class='line'>153</span> * @default bigshot.DefaultDataLoader
+<span class='line'>154</span> * @type bigshot.DataLoader
+<span class='line'>155</span> */</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="NAME">this.dataLoader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.DefaultDataLoader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>159</span> * The maximum magnification for the texture tiles making up the VR cube.
+<span class='line'>160</span> * Used for level-of-detail tesselation.
+<span class='line'>161</span> * A value of 1.0 means that textures will never be stretched (one texture pixel will
+<span class='line'>162</span> * always be at most one screen pixel), unless there is no more detailed texture available.
+<span class='line'>163</span> * A value of 2.0 means that textures may be stretched at most 2x (one texture pixel
+<span class='line'>164</span> * will always be at most 2x2 screen pixels)
+<span class='line'>165</span> * The bigger the value, the less texture data is required, but quality suffers.
+<span class='line'>166</span> *
+<span class='line'>167</span> * @type number
+<span class='line'>168</span> * @default 1.0
+<span class='line'>169</span> */</span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="NAME">this.maxTextureMagnification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>173</span> * The WebGL texture filter to use for magnifying textures.
+<span class='line'>174</span> * Possible values are all values valid for &lt;code>TEXTURE_MAG_FILTER&lt;/code>.
+<span class='line'>175</span> * &lt;code>null&lt;/code> means &lt;code>NEAREST&lt;/code>.
+<span class='line'>176</span> *
+<span class='line'>177</span> * @default null / NEAREST.
+<span class='line'>178</span> */</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="NAME">this.textureMagFilter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>182</span> * The WebGL texture filter to use for supersampling (minifying) textures.
+<span class='line'>183</span> * Possible values are all values valid for &lt;code>TEXTURE_MIN_FILTER&lt;/code>.
+<span class='line'>184</span> * &lt;code>null&lt;/code> means &lt;code>NEAREST&lt;/code>.
+<span class='line'>185</span> *
+<span class='line'>186</span> * @default null / NEAREST.
+<span class='line'>187</span> */</span><span class="WHIT">
+<span class='line'>188</span> </span><span class="WHIT"> </span><span class="NAME">this.textureMinFilter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>189</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>190</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>191</span> * Minimum vertical field of view in degrees.
+<span class='line'>192</span> *
+<span class='line'>193</span> * @default 2.0
+<span class='line'>194</span> * @type number
+<span class='line'>195</span> */</span><span class="WHIT">
+<span class='line'>196</span> </span><span class="WHIT"> </span><span class="NAME">this.minFov</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>197</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>198</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>199</span> * Maximum vertical field of view in degrees.
+<span class='line'>200</span> *
+<span class='line'>201</span> * @default 90.0
+<span class='line'>202</span> * @type number
+<span class='line'>203</span> */</span><span class="WHIT">
+<span class='line'>204</span> </span><span class="WHIT"> </span><span class="NAME">this.maxFov</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">90</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>205</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>206</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>207</span> * Minimum pitch in degrees.
+<span class='line'>208</span> *
+<span class='line'>209</span> * @default -90
+<span class='line'>210</span> * @type number
+<span class='line'>211</span> */</span><span class="WHIT">
+<span class='line'>212</span> </span><span class="WHIT"> </span><span class="NAME">this.minPitch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">90</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>213</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>214</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>215</span> * Maximum pitch in degrees.
+<span class='line'>216</span> *
+<span class='line'>217</span> * @default 90.0
+<span class='line'>218</span> * @type number
+<span class='line'>219</span> */</span><span class="WHIT">
+<span class='line'>220</span> </span><span class="WHIT"> </span><span class="NAME">this.maxPitch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">90</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>221</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>222</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>223</span> * Minimum yaw in degrees. The number is interpreted modulo 360.
+<span class='line'>224</span> * The default value, -360, is just to make sure that we won't accidentally
+<span class='line'>225</span> * trip it. If the number is set to something in the interval 0-360,
+<span class='line'>226</span> * the autoRotate function will pan back and forth.
+<span class='line'>227</span> *
+<span class='line'>228</span> * @default -360
+<span class='line'>229</span> * @type number
+<span class='line'>230</span> */</span><span class="WHIT">
+<span class='line'>231</span> </span><span class="WHIT"> </span><span class="NAME">this.minYaw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">360</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>232</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>233</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>234</span> * Maximum yaw in degrees. The number is interpreted modulo 360.
+<span class='line'>235</span> * The default value, 720, is just to make sure that we won't accidentally
+<span class='line'>236</span> * trip it. If the number is set to something in the interval 0-360,
+<span class='line'>237</span> * the autoRotate function will pan back and forth.
+<span class='line'>238</span> *
+<span class='line'>239</span> * @default 720.0
+<span class='line'>240</span> * @type number
+<span class='line'>241</span> */</span><span class="WHIT">
+<span class='line'>242</span> </span><span class="WHIT"> </span><span class="NAME">this.maxYaw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">720</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>243</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>244</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>245</span> * Transform offset for yaw.
+<span class='line'>246</span> * @default 0.0
+<span class='line'>247</span> * @type number
+<span class='line'>248</span> */</span><span class="WHIT">
+<span class='line'>249</span> </span><span class="WHIT"> </span><span class="NAME">this.yawOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>250</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>251</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>252</span> * Transform offset for pitch.
+<span class='line'>253</span> * @default 0.0
+<span class='line'>254</span> * @type number
+<span class='line'>255</span> */</span><span class="WHIT">
+<span class='line'>256</span> </span><span class="WHIT"> </span><span class="NAME">this.pitchOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>257</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>258</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>259</span> * Transform offset for roll.
+<span class='line'>260</span> * @default 0.0
+<span class='line'>261</span> * @type number
+<span class='line'>262</span> */</span><span class="WHIT">
+<span class='line'>263</span> </span><span class="WHIT"> </span><span class="NAME">this.rollOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>264</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>265</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>266</span> * Function to call when all six cube faces have loaded the base texture level
+<span class='line'>267</span> * and can be rendered.
+<span class='line'>268</span> *
+<span class='line'>269</span> * @type function()
+<span class='line'>270</span> * @default null
+<span class='line'>271</span> */</span><span class="WHIT">
+<span class='line'>272</span> </span><span class="WHIT"> </span><span class="NAME">this.onload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>273</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>274</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>275</span> * The rendering back end to use.
+<span class='line'>276</span> * Values are "css" and "webgl".
+<span class='line'>277</span> *
+<span class='line'>278</span> * @type String
+<span class='line'>279</span> * @default null
+<span class='line'>280</span> */</span><span class="WHIT">
+<span class='line'>281</span> </span><span class="WHIT"> </span><span class="NAME">this.renderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>282</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>283</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>284</span> * Controls whether the panorama can be "flung" by quickly dragging and releasing.
+<span class='line'>285</span> *
+<span class='line'>286</span> * @type boolean
+<span class='line'>287</span> * @default true
+<span class='line'>288</span> */</span><span class="WHIT">
+<span class='line'>289</span> </span><span class="WHIT"> </span><span class="NAME">this.fling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>290</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>291</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>292</span> * Controls the decay of the "flinging" animation. The fling animation decays
+<span class='line'>293</span> * as 2^(-flingScale * t) where t is the time in milliseconds since the animation started.
+<span class='line'>294</span> * For the animation to decay to half-speed in X seconds,
+<span class='line'>295</span> * flingScale should then be set to 1 / (X*1000).
+<span class='line'>296</span> *
+<span class='line'>297</span> * @type float
+<span class='line'>298</span> * @default 0.004
+<span class='line'>299</span> */</span><span class="WHIT">
+<span class='line'>300</span> </span><span class="WHIT"> </span><span class="NAME">this.flingScale</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.004</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>301</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>302</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>303</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>304</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>305</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>306</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>307</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>308</span> </span><span class="WHIT"> </span><span class="NAME">this.merge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">values</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">overwrite</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>309</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>310</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">overwrite</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>311</span> </span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">values</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>312</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>313</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>314</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>315</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>316</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>317</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__VRPointHotspot.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRPointHotspot.js.html
new file mode 100644
index 00000000..1e32f1f9
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRPointHotspot.js.html
@@ -0,0 +1,86 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new point-hotspot and attaches it to a VR panorama.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class A VR panorama point-hotspot.
+<span class='line'> 21</span> *
+<span class='line'> 22</span> * A Hotspot is simply an HTML element that is moved / hidden etc.
+<span class='line'> 23</span> * to overlay a given position in the panorama. The element is moved
+<span class='line'> 24</span> * by setting its &lt;code>style.top&lt;/code> and &lt;code>style.left&lt;/code>
+<span class='line'> 25</span> * values.
+<span class='line'> 26</span> *
+<span class='line'> 27</span> * @augments bigshot.VRHotspot
+<span class='line'> 28</span> * @param {bigshot.VRPanorama} panorama the panorama to attach this hotspot to
+<span class='line'> 29</span> * @param {number} yaw the yaw coordinate of the hotspot
+<span class='line'> 30</span> * @param {number} pitch the pitch coordinate of the hotspot
+<span class='line'> 31</span> * @param {HTMLElement} element the HTML element
+<span class='line'> 32</span> * @param {number} offsetX the offset to add to the screen coordinate corresponding
+<span class='line'> 33</span> * to the hotspot's polar coordinates. Use this to center the hotspot horizontally.
+<span class='line'> 34</span> * @param {number} offsetY the offset to add to the screen coordinate corresponding
+<span class='line'> 35</span> * to the hotspot's polar coordinates. Use this to center the hotspot vertically.
+<span class='line'> 36</span> */</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="NAME">bigshot.VRPointHotspot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">panorama</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">yaw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pitch</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offsetX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offsetY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.VRHotspot.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">panorama</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.offsetX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">offsetX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">this.offsetY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">offsetY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="NAME">this.point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.toVector</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">yaw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pitch</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="NAME">bigshot.VRPointHotspot.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.toScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.point</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.panorama.browser.getElementSize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">p.w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s.w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">p.h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s.h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">p.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.offsetX</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">p.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.offsetY</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.clip</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.opacity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.opacity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p.opacity</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.visibility</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"inherit"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">visible</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.visibility</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"hidden"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 76</span>
+<span class='line'> 77</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.VRPointHotspot</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.VRHotspot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.VRPointHotspot"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.VRHotspot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 79</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__VRRectangleHotspot.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRRectangleHotspot.js.html
new file mode 100644
index 00000000..8c4c5c20
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRRectangleHotspot.js.html
@@ -0,0 +1,84 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new rectangular hotspot and attaches it to a VR panorama.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class A rectangular VR panorama hotspot.
+<span class='line'> 21</span> *
+<span class='line'> 22</span> * A rectangular hotspot is simply an HTML element that is moved / resized / hidden etc.
+<span class='line'> 23</span> * to overlay a given rectangle in the panorama. The element is moved
+<span class='line'> 24</span> * by setting its &lt;code>style.top&lt;/code> and &lt;code>style.left&lt;/code>
+<span class='line'> 25</span> * values, and resized by setting its &lt;code>style.width&lt;/code> and &lt;code>style.height&lt;/code>
+<span class='line'> 26</span> * values.
+<span class='line'> 27</span> *
+<span class='line'> 28</span> * @augments bigshot.VRHotspot
+<span class='line'> 29</span> * @param {bigshot.VRPanorama} panorama the panorama to attach this hotspot to
+<span class='line'> 30</span> * @param {number} yaw0 the yaw coordinate of the top-left corner of the hotspot
+<span class='line'> 31</span> * @param {number} pitch0 the pitch coordinate of the top-left corner of the hotspot
+<span class='line'> 32</span> * @param {number} yaw1 the yaw coordinate of the bottom-right corner of the hotspot
+<span class='line'> 33</span> * @param {number} pitch1 the pitch coordinate of the bottom-right corner of the hotspot
+<span class='line'> 34</span> * @param {HTMLElement} element the HTML element
+<span class='line'> 35</span> */</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="NAME">bigshot.VRRectangleHotspot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">panorama</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">yaw0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pitch0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">yaw1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pitch1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">bigshot.VRHotspot.call</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">panorama</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="NAME">this.element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="NAME">this.point0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.toVector</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">yaw0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pitch0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">this.point1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.toVector</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">yaw1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pitch1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 43</span>
+<span class='line'> 44</span> </span><span class="NAME">bigshot.VRRectangleHotspot.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">layout</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.toScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.point0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.toScreen</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.point1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p.x</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p.y</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">opacity</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p1.x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p.x</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">p1.y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p.y</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.clip</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cd</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cd.y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cd.x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cd.w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cd.h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.visibility</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"inherit"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="NAME">visible</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">visible</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="NAME">this.element.style.visibility</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"hidden"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 74</span>
+<span class='line'> 75</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.VRRectangleHotspot</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.VRHotspot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.VRRectangleHotspot"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.VRHotspot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__VRRenderer.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRRenderer.js.html
new file mode 100644
index 00000000..146176c8
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRRenderer.js.html
@@ -0,0 +1,134 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class Abstract base for 3d rendering system.
+<span class='line'> 19</span> */</span><span class="WHIT">
+<span class='line'> 20</span> </span><span class="NAME">bigshot.VRRenderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 22</span>
+<span class='line'> 23</span> </span><span class="NAME">bigshot.VRRenderer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 25</span> * Creates a new {@link bigshot.VRTileCache}, appropriate for the rendering system.
+<span class='line'> 26</span> *
+<span class='line'> 27</span> * @param {function()} onloaded function that is called whenever a texture tile has been loaded
+<span class='line'> 28</span> * @param {function()} onCacheInit function that is called when the texture cache is fully initialized
+<span class='line'> 29</span> * @param {bigshot.VRPanoramaParameters} parameters the parameters for the panorama
+<span class='line'> 30</span> */</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">createTileCache</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 34</span> * Creates a bigshot.TexturedQuadScene.
+<span class='line'> 35</span> */</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">createTexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 39</span> * Creates a bigshot.TexturedQuad.
+<span class='line'> 40</span> *
+<span class='line'> 41</span> * @param {bigshot.Point3D} p the top-left corner of the quad
+<span class='line'> 42</span> * @param {bigshot.Point3D} u a vector going along the top edge of the quad
+<span class='line'> 43</span> * @param {bigshot.Point3D} v a vector going down the left edge of the quad
+<span class='line'> 44</span> * @param {Object} texture a texture to use for the quad. The texture type may vary among different
+<span class='line'> 45</span> * VRRenderer implementations. The VRTileCache that is created using the createTileCache method will
+<span class='line'> 46</span> * supply the correct type.
+<span class='line'> 47</span> */</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">createTexturedQuad</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 51</span> * Returns the viewport width, in pixels.
+<span class='line'> 52</span> *
+<span class='line'> 53</span> * @type int
+<span class='line'> 54</span> */</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 58</span> * Returns the viewport height, in pixels.
+<span class='line'> 59</span> *
+<span class='line'> 60</span> * @type int
+<span class='line'> 61</span> */</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 65</span> * Transforms a vector to world coordinates.
+<span class='line'> 66</span> *
+<span class='line'> 67</span> * @param {bigshot.Point3D} v the view-space point to transform
+<span class='line'> 68</span> */</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">transformToWorld</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 72</span> * Transforms a world vector to screen coordinates.
+<span class='line'> 73</span> *
+<span class='line'> 74</span> * @param {bigshot.Point3D} worldVector the world-space point to transform
+<span class='line'> 75</span> */</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">transformWorldToScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">worldVector</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 79</span> * Transforms a 3D vector to screen coordinates.
+<span class='line'> 80</span> *
+<span class='line'> 81</span> * @param {bigshot.Point3D} vector the vector to transform.
+<span class='line'> 82</span> * If it is already in homogenous coordinates (4-element array)
+<span class='line'> 83</span> * the transformation is faster. Otherwise it will be converted.
+<span class='line'> 84</span> */</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="NAME">transformToScreen</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vector</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 88</span> * Disposes the renderer and associated resources.
+<span class='line'> 89</span> */</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 93</span> * Called to begin a render.
+<span class='line'> 94</span> *
+<span class='line'> 95</span> * @param {bigshot.Rotation} rotation the rotation of the viewer
+<span class='line'> 96</span> * @param {number} fov the vertical field of view, in degrees
+<span class='line'> 97</span> * @param {bigshot.Point3D} translation the position of the viewer in world space
+<span class='line'> 98</span> * @param {bigshot.Rotation} rotationOffsets the rotation to apply to the VR cube
+<span class='line'> 99</span> * before the viewer rotation is applied
+<span class='line'>100</span> */</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="NAME">beginRender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotation</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">translation</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rotationOffsets</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>104</span> * Called to end a render.
+<span class='line'>105</span> */</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="NAME">endRender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>109</span> * Called by client code to notify the renderer that the viewport has been resized.
+<span class='line'>110</span> */</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="NAME">onresize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>114</span> * Resizes the viewport.
+<span class='line'>115</span> *
+<span class='line'>116</span> * @param {int} w the new width of the viewport, in pixels
+<span class='line'>117</span> * @param {int} h the new height of the viewport, in pixels
+<span class='line'>118</span> */</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>122</span> * Gets the container element for the renderer. This is used
+<span class='line'>123</span> * when calling the requestAnimationFrame API.
+<span class='line'>124</span> */</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="NAME">getElement</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>127</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__VRTileCache.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRTileCache.js.html
new file mode 100644
index 00000000..35e15e8c
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__VRTileCache.js.html
@@ -0,0 +1,53 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class Abstract base class.
+<span class='line'> 19</span> */</span><span class="WHIT">
+<span class='line'> 20</span> </span><span class="NAME">bigshot.VRTileCache</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 22</span>
+<span class='line'> 23</span> </span><span class="NAME">bigshot.VRTileCache.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 25</span> * Returns the texture object for the given tile-x, tile-y and zoom level.
+<span class='line'> 26</span> * The return type is dependent on the renderer. The WebGL renderer, for example
+<span class='line'> 27</span> * uses a tile cache that returns WebGL textures, while the CSS3D renderer
+<span class='line'> 28</span> * returns HTML img or canvas elements.
+<span class='line'> 29</span> */</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">getTexture</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tileX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tileY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">zoomLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 33</span> * Purges the cache of old entries.
+<span class='line'> 34</span> *
+<span class='line'> 35</span> * @type void
+<span class='line'> 36</span> */</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">purge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 40</span> * Disposes the cache and all its entries.
+<span class='line'> 41</span> *
+<span class='line'> 42</span> * @type void
+<span class='line'> 43</span> */</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 46</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGL.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGL.js.html
new file mode 100644
index 00000000..2bed67ed
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGL.js.html
@@ -0,0 +1,256 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a new WebGL wrapper instance.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class WebGL wrapper for common {@link bigshot.VRPanorama} uses.
+<span class='line'> 21</span> * @param {HTMLCanvasElement} canvas_ the canvas
+<span class='line'> 22</span> * @see #onresize()
+<span class='line'> 23</span> */</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="NAME">bigshot.WebGL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">canvas_</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 26</span> * The html canvas element we'll be rendering in.
+<span class='line'> 27</span> *
+<span class='line'> 28</span> * @type HTMLCanvasElement
+<span class='line'> 29</span> */</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">canvas_</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 33</span> * Our WebGL context.
+<span class='line'> 34</span> *
+<span class='line'> 35</span> * @type WebGLRenderingContext
+<span class='line'> 36</span> */</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">this.gl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bigshot.WebGLUtil.createContext</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.canvas</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 40</span> * The current object-to-world transform matrix.
+<span class='line'> 41</span> *
+<span class='line'> 42</span> * @type bigshot.TransformStack
+<span class='line'> 43</span> */</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.TransformStack</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 47</span> * The current perspective transform matrix.
+<span class='line'> 48</span> *
+<span class='line'> 49</span> * @type bigshot.TransformStack
+<span class='line'> 50</span> */</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="NAME">this.pMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.TransformStack</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 54</span> * The current shader program.
+<span class='line'> 55</span> */</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">this.shaderProgram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.onresize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 60</span>
+<span class='line'> 61</span> </span><span class="NAME">bigshot.WebGL.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 63</span> * Must be called when the canvas element is resized.
+<span class='line'> 64</span> *
+<span class='line'> 65</span> * @public
+<span class='line'> 66</span> */</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="NAME">onresize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.viewportWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.viewportHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 73</span> * Fragment shader. Taken from the "Learning WebGL" lessons:
+<span class='line'> 74</span> * http://learningwebgl.com/blog/?p=571
+<span class='line'> 75</span> */</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">fragmentShader</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="STRN">"#ifdef GL_ES\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="STRN">" precision highp float;\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="STRN">"#endif\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="STRN">"varying vec2 vTextureCoord;\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="STRN">"uniform sampler2D uSampler;\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="STRN">"void main(void) {\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="STRN">" gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="STRN">"}\n"</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 90</span> * Vertex shader. Taken from the "Learning WebGL" lessons:
+<span class='line'> 91</span> * http://learningwebgl.com/blog/?p=571
+<span class='line'> 92</span> */</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="NAME">vertexShader</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="STRN">"attribute vec3 aVertexPosition;\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="STRN">"attribute vec2 aTextureCoord;\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="STRN">"uniform mat4 uMVMatrix;\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="STRN">"uniform mat4 uPMatrix;\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="STRN">"varying vec2 vTextureCoord;\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="STRN">"void main(void) {\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="STRN">" gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="STRN">" vTextureCoord = aTextureCoord;\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="STRN">"}"</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>108</span> * Creates a new shader.
+<span class='line'>109</span> *
+<span class='line'>110</span> * @type WebGLShader
+<span class='line'>111</span> * @param {String} source the source code
+<span class='line'>112</span> * @param {int} type the shader type, one of WebGLRenderingContext.FRAGMENT_SHADER or
+<span class='line'>113</span> * WebGLRenderingContext.VERTEX_SHADER
+<span class='line'>114</span> */</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="NAME">createShader</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">source</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">shader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.gl.createShader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.shaderSource</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">shader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">source</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.compileShader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">shader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.gl.getShaderParameter</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">shader</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.gl.COMPILE_STATUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">alert</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.gl.getShaderInfoLog</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">shader</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">shader</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>129</span> * Creates a new fragment shader.
+<span class='line'>130</span> *
+<span class='line'>131</span> * @type WebGLShader
+<span class='line'>132</span> * @param {String} source the source code
+<span class='line'>133</span> */</span><span class="WHIT">
+<span class='line'>134</span> </span><span class="WHIT"> </span><span class="NAME">createFragmentShader</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">source</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.createShader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">source</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.gl.FRAGMENT_SHADER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>139</span> * Creates a new vertex shader.
+<span class='line'>140</span> *
+<span class='line'>141</span> * @type WebGLShader
+<span class='line'>142</span> * @param {String} source the source code
+<span class='line'>143</span> */</span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="NAME">createVertexShader</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">source</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>145</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.createShader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">source</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.gl.VERTEX_SHADER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>146</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>149</span> * Initializes the shaders.
+<span class='line'>150</span> */</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="NAME">initShaders</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="NAME">this.shaderProgram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.gl.createProgram</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.attachShader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.createVertexShader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.vertexShader</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.attachShader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.createFragmentShader</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fragmentShader</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.linkProgram</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.gl.getProgramParameter</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.gl.LINK_STATUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Could not initialise shaders"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>159</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>161</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>162</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.useProgram</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>163</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>164</span> </span><span class="WHIT"> </span><span class="NAME">this.shaderProgram.vertexPositionAttribute</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.gl.getAttribLocation</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"aVertexPosition"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>165</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.enableVertexAttribArray</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram.vertexPositionAttribute</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>166</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>167</span> </span><span class="WHIT"> </span><span class="NAME">this.shaderProgram.textureCoordAttribute</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.gl.getAttribLocation</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"aTextureCoord"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>168</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.enableVertexAttribArray</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram.textureCoordAttribute</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>169</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>170</span> </span><span class="WHIT"> </span><span class="NAME">this.shaderProgram.pMatrixUniform</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.gl.getUniformLocation</span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"uPMatrix"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>171</span> </span><span class="WHIT"> </span><span class="NAME">this.shaderProgram.mvMatrixUniform</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.gl.getUniformLocation</span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"uMVMatrix"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>172</span> </span><span class="WHIT"> </span><span class="NAME">this.shaderProgram.samplerUniform</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.gl.getUniformLocation</span><span class="PUNC">(</span><span class="NAME">this.shaderProgram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"uSampler"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>173</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>174</span>
+<span class='line'>175</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>176</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>177</span> * Sets the matrix parameters ("uniforms", since the variables are declared as uniform) in the shaders.
+<span class='line'>178</span> */</span><span class="WHIT">
+<span class='line'>179</span> </span><span class="WHIT"> </span><span class="NAME">setMatrixUniforms</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>180</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.uniformMatrix4fv</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram.pMatrixUniform</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Float32Array</span><span class="PUNC">(</span><span class="NAME">this.pMatrix.matrix</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">flatten</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>181</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.uniformMatrix4fv</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.shaderProgram.mvMatrixUniform</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Float32Array</span><span class="PUNC">(</span><span class="NAME">this.mvMatrix.matrix</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">flatten</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>182</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>183</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>184</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>185</span> * Creates a texture from an image.
+<span class='line'>186</span> *
+<span class='line'>187</span> * @param {HTMLImageElement or HTMLCanvasElement} image the image
+<span class='line'>188</span> * @type WebGLTexture
+<span class='line'>189</span> * @return An initialized texture
+<span class='line'>190</span> */</span><span class="WHIT">
+<span class='line'>191</span> </span><span class="WHIT"> </span><span class="NAME">createImageTextureFromImage</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">image</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">magFilter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>192</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.gl.createTexture</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>193</span> </span><span class="WHIT"> </span><span class="NAME">this.handleImageTextureLoaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">magFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>194</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>195</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>196</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>197</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>198</span> * Creates a texture from a source url.
+<span class='line'>199</span> *
+<span class='line'>200</span> * @param {String} source the URL of the image
+<span class='line'>201</span> * @return WebGLTexture
+<span class='line'>202</span> */</span><span class="WHIT">
+<span class='line'>203</span> </span><span class="WHIT"> </span><span class="NAME">createImageTextureFromSource</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">source</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">magFilter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>204</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">image</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Image</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>205</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.gl.createTexture</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>206</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>207</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>208</span> </span><span class="WHIT"> </span><span class="NAME">image.onload</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>209</span> </span><span class="WHIT"> </span><span class="NAME">that.handleImageTextureLoaded</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">magFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>210</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>211</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>212</span> </span><span class="WHIT"> </span><span class="NAME">image.src</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">source</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>213</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>214</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>215</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>216</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>217</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'>218</span> * Uploads the image data to the texture memory. Called when the texture image
+<span class='line'>219</span> * has finished loading.
+<span class='line'>220</span> *
+<span class='line'>221</span> * @private
+<span class='line'>222</span> */</span><span class="WHIT">
+<span class='line'>223</span> </span><span class="WHIT"> </span><span class="NAME">handleImageTextureLoaded</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">magFilter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>224</span> </span><span class="WHIT"> </span><span class="NAME">that.gl.bindTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.gl.TEXTURE_2D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>225</span> </span><span class="WHIT"> </span><span class="NAME">that.gl.texImage2D</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.gl.TEXTURE_2D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.gl.RGBA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.gl.RGBA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.gl.UNSIGNED_BYTE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">image</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>226</span> </span><span class="WHIT"> </span><span class="NAME">that.gl.texParameteri</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.gl.TEXTURE_2D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.gl.TEXTURE_MAG_FILTER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">magFilter</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">magFilter</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.gl.NEAREST</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>227</span> </span><span class="WHIT"> </span><span class="NAME">that.gl.texParameteri</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.gl.TEXTURE_2D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.gl.TEXTURE_MIN_FILTER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">that.gl.NEAREST</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>228</span> </span><span class="WHIT"> </span><span class="NAME">that.gl.texParameteri</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.gl.TEXTURE_2D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.gl.TEXTURE_WRAP_S</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.gl.CLAMP_TO_EDGE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>229</span> </span><span class="WHIT"> </span><span class="NAME">that.gl.texParameteri</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.gl.TEXTURE_2D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.gl.TEXTURE_WRAP_T</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">that.gl.CLAMP_TO_EDGE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>230</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">minFilter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">that.gl.NEAREST_MIPMAP_NEAREST</span><span class="WHIT">
+<span class='line'>231</span> </span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">that.gl.LINEAR_MIPMAP_NEAREST</span><span class="WHIT">
+<span class='line'>232</span> </span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">that.gl.NEAREST_MIPMAP_LINEAR</span><span class="WHIT">
+<span class='line'>233</span> </span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">minFilter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">that.gl.LINEAR_MIPMAP_LINEAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>234</span> </span><span class="WHIT"> </span><span class="NAME">that.gl.generateMipmap</span><span class="PUNC">(</span><span class="NAME">that.gl.TEXTURE_2D</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>235</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>236</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>237</span> </span><span class="WHIT"> </span><span class="NAME">that.gl.bindTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">that.gl.TEXTURE_2D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>238</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>239</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>240</span> </span><span class="WHIT"> </span><span class="NAME">deleteTexture</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">texture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>241</span> </span><span class="WHIT"> </span><span class="NAME">this.gl.deleteTexture</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">texture</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>242</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>243</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>245</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>246</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.gl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>247</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>248</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>249</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLTexturedQuad.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLTexturedQuad.js.html
new file mode 100644
index 00000000..170180d5
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLTexturedQuad.js.html
@@ -0,0 +1,71 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a textured quad object.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @class An abstraction for textured quads. Used in the
+<span class='line'> 21</span> * {@link bigshot.WebGLTexturedQuadScene}.
+<span class='line'> 22</span> *
+<span class='line'> 23</span> * @param {bigshot.Point3D} p the top-left corner of the quad
+<span class='line'> 24</span> * @param {bigshot.Point3D} u vector pointing from p along the top edge of the quad
+<span class='line'> 25</span> * @param {bigshot.Point3D} v vector pointing from p along the left edge of the quad
+<span class='line'> 26</span> * @param {WebGLTexture} the texture to use.
+<span class='line'> 27</span> */</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="NAME">bigshot.WebGLTexturedQuad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.u</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">this.v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.texture</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 34</span>
+<span class='line'> 35</span> </span><span class="NAME">bigshot.WebGLTexturedQuad.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 38</span> * Renders the quad using the given {@link bigshot.WebGL} instance.
+<span class='line'> 39</span> * Currently creates, fills, draws with and then deletes three buffers -
+<span class='line'> 40</span> * not very efficient, but works.
+<span class='line'> 41</span> *
+<span class='line'> 42</span> * @param {bigshot.WebGL} webGl the WebGL wrapper instance to use for rendering.
+<span class='line'> 43</span> */</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">webGl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vertexPositionBuffer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textureCoordBuffer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vertexIndexBuffer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="NAME">webGl.gl.bindBuffer</span><span class="PUNC">(</span><span class="NAME">webGl.gl.ARRAY_BUFFER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vertexPositionBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vertices</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">this.p.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.p.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.p.z</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="NAME">this.p.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.u.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.p.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.u.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.p.z</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.u.z</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">this.p.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.u.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.v.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.p.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.u.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.v.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.p.z</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.u.z</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.v.z</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">this.p.x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.v.x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.p.y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.v.y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.p.z</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.v.z</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="NAME">webGl.gl.bufferData</span><span class="PUNC">(</span><span class="NAME">webGl.gl.ARRAY_BUFFER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Float32Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vertices</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">webGl.gl.STATIC_DRAW</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">webGl.gl.activeTexture</span><span class="PUNC">(</span><span class="NAME">webGl.gl.TEXTURE0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="NAME">webGl.gl.bindTexture</span><span class="PUNC">(</span><span class="NAME">webGl.gl.TEXTURE_2D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.texture</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="NAME">webGl.gl.uniform1i</span><span class="PUNC">(</span><span class="NAME">webGl.shaderProgram.samplerUniform</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">webGl.gl.bindBuffer</span><span class="PUNC">(</span><span class="NAME">webGl.gl.ELEMENT_ARRAY_BUFFER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vertexIndexBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="NAME">webGl.gl.drawElements</span><span class="PUNC">(</span><span class="NAME">webGl.gl.TRIANGLES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">webGl.gl.UNSIGNED_SHORT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">webGl.gl.bindTexture</span><span class="PUNC">(</span><span class="NAME">webGl.gl.TEXTURE_2D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 64</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLTexturedQuadScene.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLTexturedQuadScene.js.html
new file mode 100644
index 00000000..fbbe6705
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLTexturedQuadScene.js.html
@@ -0,0 +1,64 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * Creates a textured quad scene.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * @param {bigshot.WebGL} webGl the webGl instance to use for rendering.
+<span class='line'> 21</span> *
+<span class='line'> 22</span> * @class A "scene" consisting of a number of quads, all with
+<span class='line'> 23</span> * a unique texture. Used by the {@link bigshot.VRPanorama} to render the VR cube.
+<span class='line'> 24</span> *
+<span class='line'> 25</span> * @see bigshot.WebGLTexturedQuad
+<span class='line'> 26</span> */</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="NAME">bigshot.WebGLTexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">webGl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">buffers</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">this.quads</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">webGl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.buffers</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">buffers</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 32</span>
+<span class='line'> 33</span> </span><span class="NAME">bigshot.WebGLTexturedQuadScene.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 35</span> * Adds a new quad to the scene.
+<span class='line'> 36</span> */</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="NAME">addQuad</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">quad</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.quads.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">quad</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 42</span> * Renders all quads.
+<span class='line'> 43</span> */</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.buffers.get</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vertexPositionBuffer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b.vertexPositionBuffer</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">textureCoordBuffer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b.textureCoordBuffer</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vertexIndexBuffer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b.vertexIndexBuffer</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.setMatrixUniforms</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.quads.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="NAME">this.quads</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">render</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.webGl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vertexPositionBuffer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textureCoordBuffer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vertexIndexBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 57</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLUtil.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLUtil.js.html
new file mode 100644
index 00000000..62783f61
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLUtil.js.html
@@ -0,0 +1,105 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class WebGL utility functions.
+<span class='line'> 19</span> */</span><span class="WHIT">
+<span class='line'> 20</span> </span><span class="NAME">bigshot.WebGLUtil</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 22</span> * Flag indicating whether we want to wrap the WebGL context in a
+<span class='line'> 23</span> * WebGLDebugUtils.makeDebugContext. Defaults to false.
+<span class='line'> 24</span> *
+<span class='line'> 25</span> * @type boolean
+<span class='line'> 26</span> * @public
+<span class='line'> 27</span> */</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="NAME">debug</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 31</span> * List of context identifiers WebGL may be accessed via.
+<span class='line'> 32</span> *
+<span class='line'> 33</span> * @type String[]
+<span class='line'> 34</span> * @private
+<span class='line'> 35</span> */</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="NAME">contextNames</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"webgl"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"experimental-webgl"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 39</span> * Utility function for creating a context given a canvas and
+<span class='line'> 40</span> * a context identifier.
+<span class='line'> 41</span> * @type WebGLRenderingContext
+<span class='line'> 42</span> * @private
+<span class='line'> 43</span> */</span><span class="WHIT">
+<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="NAME">createContext0</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">canvas</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 45</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.debug</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="NAME">WebGLDebugUtils.makeDebugContext</span><span class="PUNC">(</span><span class="NAME">canvas.getContext</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="NAME">canvas.getContext</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 54</span> * Creates a WebGL context for the given canvas, if possible.
+<span class='line'> 55</span> *
+<span class='line'> 56</span> * @public
+<span class='line'> 57</span> * @type WebGLRenderingContext
+<span class='line'> 58</span> * @param {HTMLCanvasElement} canvas the canvas
+<span class='line'> 59</span> * @return The WebGL context
+<span class='line'> 60</span> * @throws {Error} If WebGL isn't supported.
+<span class='line'> 61</span> */</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NAME">createContext</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">canvas</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.contextNames.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createContext0</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">canvas</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.contextNames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">gl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">gl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"Could not initialize WebGL."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 76</span> * Tests whether WebGL is supported.
+<span class='line'> 77</span> *
+<span class='line'> 78</span> * @type boolean
+<span class='line'> 79</span> * @public
+<span class='line'> 80</span> * @return true If WebGL is supported, false otherwise.
+<span class='line'> 81</span> */</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="NAME">isWebGLSupported</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">canvas</span><span class="PUNC">[</span><span class="STRN">"width"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="COMM">// Not even canvas support</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">this.createContext</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">canvas</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="COMM">// No WebGL support</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 98</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLVRRenderer.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLVRRenderer.js.html
new file mode 100644
index 00000000..cd1605e9
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__WebGLVRRenderer.js.html
@@ -0,0 +1,171 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * @class WebGL renderer.
+<span class='line'> 19</span> */</span><span class="WHIT">
+<span class='line'> 20</span> </span><span class="NAME">bigshot.WebGLVRRenderer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 21</span> </span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 22</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 23</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.createElement</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"canvas"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 24</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">480</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 25</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">480</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 26</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.style.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"absolute"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 27</span> </span><span class="WHIT"> </span><span class="NAME">this.container.appendChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.canvas</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 28</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 29</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.WebGL</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.canvas</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 30</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.initShaders</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 31</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.clearColor</span><span class="PUNC">(</span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 32</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.blendFunc</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.webGl.gl.ONE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.ZERO</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 33</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.enable</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.webGl.gl.BLEND</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 34</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.disable</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.webGl.gl.DEPTH_TEST</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 35</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.clearDepth</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 38</span> </span><span class="WHIT"> </span><span class="NAME">this.buffers</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.TimedWeakReference</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 39</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">that.setupBuffers</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">heldObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">that.disposeBuffers</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">heldObject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 43</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'> 44</span>
+<span class='line'> 45</span> </span><span class="NAME">bigshot.WebGLVRRenderer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="NAME">createTileCache</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 47</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.TextureTileCache</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">onloaded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCacheInit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parameters</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 48</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 50</span> </span><span class="WHIT"> </span><span class="NAME">createTexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 51</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.WebGLTexturedQuadScene</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.webGl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.buffers</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 52</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 53</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 54</span> </span><span class="WHIT"> </span><span class="NAME">setupBuffers</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 55</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vertexPositionBuffer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.createBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 56</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 57</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">textureCoordBuffer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.createBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 58</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.bindBuffer</span><span class="PUNC">(</span><span class="NAME">this.webGl.gl.ARRAY_BUFFER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textureCoordBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 59</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">textureCoords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
+<span class='line'> 60</span> </span><span class="WHIT"> </span><span class="COMM">// Front face</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 64</span> </span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="WHIT">
+<span class='line'> 65</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 66</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.bufferData</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.webGl.gl.ARRAY_BUFFER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Float32Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">textureCoords</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.STATIC_DRAW</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vertexIndexBuffer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.createBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.bindBuffer</span><span class="PUNC">(</span><span class="NAME">this.webGl.gl.ELEMENT_ARRAY_BUFFER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vertexIndexBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">vertexIndexes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.bufferData</span><span class="PUNC">(</span><span class="NAME">this.webGl.gl.ELEMENT_ARRAY_BUFFER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Uint16Array</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">vertexIndexes</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.STATIC_DRAW</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.bindBuffer</span><span class="PUNC">(</span><span class="NAME">this.webGl.gl.ARRAY_BUFFER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textureCoordBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.vertexAttribPointer</span><span class="PUNC">(</span><span class="NAME">this.webGl.shaderProgram.textureCoordAttribute</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.FLOAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.bindBuffer</span><span class="PUNC">(</span><span class="NAME">this.webGl.gl.ARRAY_BUFFER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">vertexPositionBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.vertexAttribPointer</span><span class="PUNC">(</span><span class="NAME">this.webGl.shaderProgram.vertexPositionAttribute</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.FLOAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="NAME">vertexPositionBuffer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">vertexPositionBuffer</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="NAME">textureCoordBuffer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">textureCoordBuffer</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="NAME">vertexIndexBuffer</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">vertexIndexBuffer</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="NAME">dispose</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="NAME">this.buffers.dispose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="NAME">this.container.removeChild</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.canvas</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.dispose</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.webGl</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="NAME">disposeBuffers</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffers</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.deleteBuffer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffers.vertexPositionBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.deleteBuffer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffers.vertexIndexBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.deleteBuffer</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffers.textureCoordBuffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="NAME">getElement</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.canvas</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="NAME">supportsUpdate</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="NAME">createTexturedQuad</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bigshot.WebGLTexturedQuad</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">texture</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="NAME">getViewportWidth</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.viewportWidth</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="NAME">getViewportHeight</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.viewportHeight</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>123</span> </span><span class="WHIT"> </span><span class="NAME">beginRender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotation</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">translation</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rotationOffsets</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>124</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.viewport</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.viewportWidth</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.viewportHeight</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>125</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>126</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.pMatrix.reset</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>127</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.pMatrix.perspective</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.viewportWidth</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">this.webGl.gl.viewportHeight</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>128</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>129</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.mvMatrix.reset</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>130</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.mvMatrix.translate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">translation</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>131</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.mvMatrix.rotateZ</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotationOffsets.r</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>132</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.mvMatrix.rotateX</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotationOffsets.p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>133</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.mvMatrix.rotateY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotationOffsets.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>134</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.mvMatrix.rotateY</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotation.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>135</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.mvMatrix.rotateX</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rotation.p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>136</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>137</span> </span><span class="WHIT"> </span><span class="NAME">this.mvMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.webGl.mvMatrix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>138</span> </span><span class="WHIT"> </span><span class="NAME">this.pMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.webGl.pMatrix</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>139</span> </span><span class="WHIT"> </span><span class="NAME">this.mvpMatrix</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pMatrix.matrix</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">multiply</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mvMatrix.matrix</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>140</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>141</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>142</span> </span><span class="WHIT"> </span><span class="NAME">endRender</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>143</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>144</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>145</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>146</span> </span><span class="WHIT"> </span><span class="NAME">resize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>147</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>148</span> </span><span class="WHIT"> </span><span class="NAME">this.canvas.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>149</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>150</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.width</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>151</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>152</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>153</span> </span><span class="WHIT"> </span><span class="NAME">this.container.style.height</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>154</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>155</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
+<span class='line'>156</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'>157</span> </span><span class="WHIT"> </span><span class="NAME">onresize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'>158</span> </span><span class="WHIT"> </span><span class="NAME">this.webGl.onresize</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>159</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>160</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='line'>161</span>
+<span class='line'>162</span> </span><span class="NAME">bigshot.Object.extend</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bigshot.WebGLVRRenderer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.AbstractVRRenderer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>163</span> </span><span class="NAME">bigshot.Object.validate</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"bigshot.WebGLVRRenderer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bigshot.VRRenderer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'>164</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__bigshot.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__bigshot.js.html
new file mode 100644
index 00000000..4cde0423
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__bigshot.js.html
@@ -0,0 +1,130 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">self</span><span class="PUNC">[</span><span class="STRN">"bigshot"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='line'> 17</span> </span><span class="WHIT"> </span><span class="COMM">/**
+<span class='line'> 18</span> * @namespace Bigshot namespace.
+<span class='line'> 19</span> *
+<span class='line'> 20</span> * Bigshot is a toolkit for zoomable images and VR panoramas.
+<span class='line'> 21</span> *
+<span class='line'> 22</span> * &lt;h3>Zoomable Images&lt;/h3>
+<span class='line'> 23</span> *
+<span class='line'> 24</span> * &lt;p>The two classes that are needed for zoomable images are:
+<span class='line'> 25</span> *
+<span class='line'> 26</span> * &lt;ul>
+<span class='line'> 27</span> * &lt;li>{@link bigshot.Image}: The main class for making zoomable images. See the class docs
+<span class='line'> 28</span> * for a tutorial.
+<span class='line'> 29</span> * &lt;li>{@link bigshot.ImageParameters}: Parameters for zoomable images.
+<span class='line'> 30</span> * &lt;li>{@link bigshot.SimpleImage}: A class for making simple zoomable images that don't
+<span class='line'> 31</span> * require the generation of an image pyramid.. See the class docs for a tutorial.
+<span class='line'> 32</span> * &lt;/ul>
+<span class='line'> 33</span> *
+<span class='line'> 34</span> * For hotspots, see:
+<span class='line'> 35</span> *
+<span class='line'> 36</span> * &lt;ul>
+<span class='line'> 37</span> * &lt;li>{@link bigshot.HotspotLayer}
+<span class='line'> 38</span> * &lt;li>{@link bigshot.Hotspot}
+<span class='line'> 39</span> * &lt;li>{@link bigshot.LabeledHotspot}
+<span class='line'> 40</span> * &lt;li>{@link bigshot.LinkHotspot}
+<span class='line'> 41</span> * &lt;/ul>
+<span class='line'> 42</span> *
+<span class='line'> 43</span> * &lt;h3>VR Panoramas&lt;/h3>
+<span class='line'> 44</span> *
+<span class='line'> 45</span> * &lt;p>The two classes that are needed for zoomable VR panoramas (requires WebGL) are:
+<span class='line'> 46</span> *
+<span class='line'> 47</span> * &lt;ul>
+<span class='line'> 48</span> * &lt;li>{@link bigshot.VRPanorama}: The main class for making VR panoramas. See the class docs
+<span class='line'> 49</span> * for a tutorial.
+<span class='line'> 50</span> * &lt;li>{@link bigshot.VRPanoramaParameters}: Parameters for VR panoramas.
+<span class='line'> 51</span> * &lt;/ul>
+<span class='line'> 52</span> *
+<span class='line'> 53</span> * For hotspots, see:
+<span class='line'> 54</span> *
+<span class='line'> 55</span> * &lt;ul>
+<span class='line'> 56</span> * &lt;li>{@link bigshot.VRHotspot}
+<span class='line'> 57</span> * &lt;li>{@link bigshot.VRRectangleHotspot}
+<span class='line'> 58</span> * &lt;li>{@link bigshot.VRPointHotspot}
+<span class='line'> 59</span> * &lt;/ul>
+<span class='line'> 60</span> */</span><span class="WHIT">
+<span class='line'> 61</span> </span><span class="WHIT"> </span><span class="NAME">bigshot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='line'> 62</span> </span><span class="WHIT"> </span><span class="WHIT">
+<span class='line'> 63</span> </span><span class="WHIT"> </span><span class="COMM">/*
+<span class='line'> 64</span> * This is supposed to be processed using a minimalhttpd.IncludeProcessor
+<span class='line'> 65</span> * during development. The files must be listed in dependency order.
+<span class='line'> 66</span> */</span><span class="WHIT">
+<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">types.js</span><span class="WHIT">
+<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">Object.js</span><span class="WHIT">
+<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">Browser.js</span><span class="WHIT">
+<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">EventDispatcher.js</span><span class="WHIT">
+<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">Event.js</span><span class="WHIT">
+<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">TimedWeakReference.js</span><span class="WHIT">
+<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">ImageEvent.js</span><span class="WHIT">
+<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">VREvent.js</span><span class="WHIT">
+<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">FullScreen.js</span><span class="WHIT">
+<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">DataLoader.js</span><span class="WHIT">
+<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">DefaultDataLoader.js</span><span class="WHIT">
+<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">CachingDataLoader.js</span><span class="WHIT">
+<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">Hotspot.js</span><span class="WHIT">
+<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">PointHotspot.js</span><span class="WHIT">
+<span class='line'> 81</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">Layer.js</span><span class="WHIT">
+<span class='line'> 82</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">LabeledHotspot.js</span><span class="WHIT">
+<span class='line'> 83</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">LinkHotspot.js</span><span class="WHIT">
+<span class='line'> 84</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">HotspotLayer.js</span><span class="WHIT">
+<span class='line'> 85</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">TileLayer.js</span><span class="WHIT">
+<span class='line'> 86</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">LRUMap.js</span><span class="WHIT">
+<span class='line'> 87</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">ImageTileCache.js</span><span class="WHIT">
+<span class='line'> 88</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">ImageParameters.js</span><span class="WHIT">
+<span class='line'> 89</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">ImageBase.js</span><span class="WHIT">
+<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">Image.js</span><span class="WHIT">
+<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">HTMLElementLayer.js</span><span class="WHIT">
+<span class='line'> 92</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">HTMLDivElementLayer.js</span><span class="WHIT">
+<span class='line'> 93</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">SimpleImage.js</span><span class="WHIT">
+<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">FileSystem.js</span><span class="WHIT">
+<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">SimpleFileSystem.js</span><span class="WHIT">
+<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">FolderFileSystem.js</span><span class="WHIT">
+<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">DeepZoomImageFileSystem.js</span><span class="WHIT">
+<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">ArchiveFileSystem.js</span><span class="WHIT">
+<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">VRTileCache.js</span><span class="WHIT">
+<span class='line'>100</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">ImageVRTileCache.js</span><span class="WHIT">
+<span class='line'>101</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">TextureTileCache.js</span><span class="WHIT">
+<span class='line'>102</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">VRFace.js</span><span class="WHIT">
+<span class='line'>103</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">WebGLUtil.js</span><span class="WHIT">
+<span class='line'>104</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">TransformStack.js</span><span class="WHIT">
+<span class='line'>105</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">WebGL.js</span><span class="WHIT">
+<span class='line'>106</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">VRRenderer.js</span><span class="WHIT">
+<span class='line'>107</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">AbstractVRRenderer.js</span><span class="WHIT">
+<span class='line'>108</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">CSS3DVRRenderer.js</span><span class="WHIT">
+<span class='line'>109</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">CSS3DTexturedQuad.js</span><span class="WHIT">
+<span class='line'>110</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">CSS3DTexturedQuadScene.js</span><span class="WHIT">
+<span class='line'>111</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">TexturedQuadScene.js</span><span class="WHIT">
+<span class='line'>112</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">WebGLVRRenderer.js</span><span class="WHIT">
+<span class='line'>113</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">TexturedQuad.js</span><span class="WHIT">
+<span class='line'>114</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">WebGLTexturedQuad.js</span><span class="WHIT">
+<span class='line'>115</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">WebGLTexturedQuadScene.js</span><span class="WHIT">
+<span class='line'>116</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">VRPanoramaParameters.js</span><span class="WHIT">
+<span class='line'>117</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">VRPanorama.js</span><span class="WHIT">
+<span class='line'>118</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">VRHotspot.js</span><span class="WHIT">
+<span class='line'>119</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">VRPointHotspot.js</span><span class="WHIT">
+<span class='line'>120</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">VRRectangleHotspot.js</span><span class="WHIT">
+<span class='line'>121</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">AdaptiveLODMonitorParameters.js</span><span class="WHIT">
+<span class='line'>122</span> </span><span class="WHIT"> </span><span class="TOKN">#</span><span class="NAME">include</span><span class="WHIT"> </span><span class="NAME">AdaptiveLODMonitor.js</span><span class="WHIT">
+<span class='line'>123</span> </span><span class="PUNC">}</span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/bigshot/doc/js/symbols/src/src__js__types.js.html b/js/vendor/bigshot/doc/js/symbols/src/src__js__types.js.html
new file mode 100644
index 00000000..297de6fa
--- /dev/null
+++ b/js/vendor/bigshot/doc/js/symbols/src/src__js__types.js.html
@@ -0,0 +1,61 @@
+<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='line'> 1</span> <span class="COMM">/*
+<span class='line'> 2</span> * Copyright 2010 - 2012 Leo Sutic &lt;leo.sutic@gmail.com>
+<span class='line'> 3</span> *
+<span class='line'> 4</span> * Licensed under the Apache License, Version 2.0 (the "License");
+<span class='line'> 5</span> * you may not use this file except in compliance with the License.
+<span class='line'> 6</span> * You may obtain a copy of the License at
+<span class='line'> 7</span> *
+<span class='line'> 8</span> * http://www.apache.org/licenses/LICENSE-2.0
+<span class='line'> 9</span> *
+<span class='line'> 10</span> * Unless required by applicable law or agreed to in writing, software
+<span class='line'> 11</span> * distributed under the License is distributed on an "AS IS" BASIS,
+<span class='line'> 12</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+<span class='line'> 13</span> * See the License for the specific language governing permissions and
+<span class='line'> 14</span> * limitations under the License.
+<span class='line'> 15</span> */</span><span class="WHIT">
+<span class='line'> 16</span>
+<span class='line'> 17</span> </span><span class="COMM">/**
+<span class='line'> 18</span> * This class has no constructor, it is created as an object literal.
+<span class='line'> 19</span> * @name bigshot.HomogeneousPoint3D
+<span class='line'> 20</span> * @class A 3d homogenous point.
+<span class='line'> 21</span> * @property {number} x the x-coordinate
+<span class='line'> 22</span> * @property {number} y the y-coordinate
+<span class='line'> 23</span> * @property {number} z the z-coordinate
+<span class='line'> 24</span> * @property {number} w the w-coordinate
+<span class='line'> 25</span> */</span><span class="WHIT">
+<span class='line'> 26</span>
+<span class='line'> 27</span> </span><span class="COMM">/**
+<span class='line'> 28</span> * This class has no constructor, it is created as an object literal.
+<span class='line'> 29</span> * @name bigshot.Point3D
+<span class='line'> 30</span> * @class A 3d point.
+<span class='line'> 31</span> * @property {number} x the x-coordinate
+<span class='line'> 32</span> * @property {number} y the y-coordinate
+<span class='line'> 33</span> * @property {number} z the z-coordinate
+<span class='line'> 34</span> */</span><span class="WHIT">
+<span class='line'> 35</span>
+<span class='line'> 36</span> </span><span class="COMM">/**
+<span class='line'> 37</span> * This class has no constructor, it is created as an object literal.
+<span class='line'> 38</span> * @name bigshot.Point2D
+<span class='line'> 39</span> * @class A 2d point.
+<span class='line'> 40</span> * @property {number} x the x-coordinate
+<span class='line'> 41</span> * @property {number} y the y-coordinate
+<span class='line'> 42</span> */</span><span class="WHIT">
+<span class='line'> 43</span>
+<span class='line'> 44</span> </span><span class="COMM">/**
+<span class='line'> 45</span> * This class has no constructor, it is created as an object literal.
+<span class='line'> 46</span> * @name bigshot.Rotation
+<span class='line'> 47</span> * @class A rotation specified as a yaw-pitch-roll triplet.
+<span class='line'> 48</span> * @property {number} y the rotation around the yaw (y) axis
+<span class='line'> 49</span> * @property {number} p the rotation around the pitch (x) axis
+<span class='line'> 50</span> * @property {number} r the rotation around the roll (z) axis
+<span class='line'> 51</span> */</span><span class="WHIT">
+<span class='line'> 52</span>
+<span class='line'> 53</span>
+<span class='line'> 54</span> </span></pre></body></html> \ No newline at end of file
diff --git a/js/vendor/eventsource-polyfill/.bower.json b/js/vendor/eventsource-polyfill/.bower.json
new file mode 100644
index 00000000..d95b1768
--- /dev/null
+++ b/js/vendor/eventsource-polyfill/.bower.json
@@ -0,0 +1,43 @@
+{
+ "name": "eventsource-polyfill",
+ "homepage": "https://github.com/amvtek/EventSource",
+ "authors": [
+ "amvtek <devel@amvtek.com>"
+ ],
+ "description": "A polyfill for http://www.w3.org/TR/eventsource/",
+ "main": [
+ "javascript/src/eventsource.js",
+ "eventsource.min.js",
+ "README.rst"
+ ],
+ "keywords": [
+ "sse",
+ "server sent events",
+ "eventsource",
+ "event-source",
+ "polyfill"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "javascript",
+ "test_server",
+ "Gruntfile.js",
+ "package.json",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests",
+ "docs"
+ ],
+ "version": "0.9.6",
+ "_release": "0.9.6",
+ "_resolution": {
+ "type": "version",
+ "tag": "v0.9.6",
+ "commit": "030f993d5bc2a9f9aeabfcafcd5ea4e8424ff68a"
+ },
+ "_source": "git://github.com/amvtek/EventSource.git",
+ "_target": "~0.9.4",
+ "_originalSource": "eventsource-polyfill"
+} \ No newline at end of file
diff --git a/js/vendor/eventsource-polyfill/LICENSE b/js/vendor/eventsource-polyfill/LICENSE
new file mode 100644
index 00000000..62758d3f
--- /dev/null
+++ b/js/vendor/eventsource-polyfill/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 AmvTek
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE. \ No newline at end of file
diff --git a/js/vendor/eventsource-polyfill/README.md b/js/vendor/eventsource-polyfill/README.md
new file mode 100644
index 00000000..c949243e
--- /dev/null
+++ b/js/vendor/eventsource-polyfill/README.md
@@ -0,0 +1,75 @@
+EventSource Polyfill
+====================
+
+Provide polyfill to support EventSource in browser where it is not available.
+
+> - Used in production
+> - Tested in Internet Explorer 8 +
+> - Tested in Android browser 2.1 +
+> - [Documented][]
+> - Run the [Browser test suite][]
+
+Installing
+----------
+
+### from source
+
+Download suitable project archive (zip or tar.gz) from [release page][]
+
+Include in your html documents one of the following javascript file:
+
+> - *dist/eventsource.js*
+> - *dist/eventsource.min.js* (minified version)
+
+### Using bower package manager
+
+To install package from **bower registry**, type :
+
+ bower install eventsource-polyfill
+
+Include in your html documents one of the following javascript file:
+
+> - *bower\_components/eventsource-polyfill/dist/eventsource.js*
+> - *bower\_components/eventsource-polyfill/dist/eventsource.min.js* (minified version)
+
+### Using npm package manager
+
+To install package from **npm registry**, type :
+
+ npm install eventsource-polyfill
+
+Note that this package may only be used with in **browser application**.
+
+If you are using [browserify][] , you just have to require this package in your main module…
+
+``` sourceCode
+// load (Polyfill) EventSource, in case browser does not support it...
+require('eventsource-polyfill');
+```
+
+Run the tests now
+-----------------
+
+With your web browser visit this [test site][Browser test suite]
+
+Allow **sufficient time** ( ~ 5 minutes) for the full Test Suite to run…
+
+Project content
+---------------
+
+dist/
+ built version of javascript modules
+
+javascript/
+ Contains polyfill module and related unit tests
+
+test_server/
+ python server which generates *easy to test* **event stream**
+
+docs/
+ documentation wiki
+
+ [Documented]: https://github.com/amvtek/EventSource/wiki
+ [Browser test suite]: http://testevs.amvtek.com/
+ [release page]: https://github.com/amvtek/EventSource/releases/latest
+ [browserify]: http://browserify.org
diff --git a/js/vendor/eventsource-polyfill/bower.json b/js/vendor/eventsource-polyfill/bower.json
new file mode 100644
index 00000000..d2722f92
--- /dev/null
+++ b/js/vendor/eventsource-polyfill/bower.json
@@ -0,0 +1,29 @@
+{
+ "name": "eventsource-polyfill",
+ "homepage": "https://github.com/amvtek/EventSource",
+ "authors": [
+ "amvtek <devel@amvtek.com>"
+ ],
+ "description": "A polyfill for http://www.w3.org/TR/eventsource/",
+ "main": ["javascript/src/eventsource.js", "eventsource.min.js", "README.rst"],
+ "keywords": [
+ "sse",
+ "server sent events",
+ "eventsource",
+ "event-source",
+ "polyfill"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "javascript",
+ "test_server",
+ "Gruntfile.js",
+ "package.json",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests",
+ "docs"
+ ]
+}
diff --git a/js/vendor/eventsource-polyfill/dist/browserify-eventsource.js b/js/vendor/eventsource-polyfill/dist/browserify-eventsource.js
new file mode 100644
index 00000000..fedea9da
--- /dev/null
+++ b/js/vendor/eventsource-polyfill/dist/browserify-eventsource.js
@@ -0,0 +1,23 @@
+/*
+ * CommonJS module that exports EventSource polyfill version 0.9.6
+ * This module is intended for browser side use
+ * =====================================================================
+ * THIS IS A POLYFILL MODULE, SO IT HAS SIDE EFFECTS
+ * IT AUTOMATICALLY CHECKS IF window OBJECT DEFINES EventSource
+ * AND ADD THE EXPORTED ONE IN CASE IT IS UNDEFINED
+ * =====================================================================
+ * Supported by sc AmvTek srl
+ * :email: devel@amvtek.com
+ */
+
+
+var PolyfillEventSource = require('./eventsource.js').EventSource;
+module.exports = PolyfillEventSource;
+
+// Add EventSource to window if it is missing...
+if (window && !window.EventSource){
+ window.EventSource = PolyfillEventSource;
+ if (console){
+ console.log("polyfill-eventsource added missing EventSource to window");
+ }
+}
diff --git a/js/vendor/eventsource-polyfill/dist/eventsource.js b/js/vendor/eventsource-polyfill/dist/eventsource.js
new file mode 100644
index 00000000..f733462d
--- /dev/null
+++ b/js/vendor/eventsource-polyfill/dist/eventsource.js
@@ -0,0 +1,621 @@
+/*
+ * EventSource polyfill version 0.9.6
+ * Supported by sc AmvTek srl
+ * :email: devel@amvtek.com
+ */
+;(function (global) {
+
+ if (global.EventSource && !global._eventSourceImportPrefix){
+ return;
+ }
+
+ var evsImportName = (global._eventSourceImportPrefix||'')+"EventSource";
+
+ var EventSource = function (url, options) {
+
+ if (!url || typeof url != 'string') {
+ throw new SyntaxError('Not enough arguments');
+ }
+
+ this.URL = url;
+ this.setOptions(options);
+ var evs = this;
+ setTimeout(function(){evs.poll()}, 0);
+ };
+
+ EventSource.prototype = {
+
+ CONNECTING: 0,
+
+ OPEN: 1,
+
+ CLOSED: 2,
+
+ defaultOptions: {
+
+ loggingEnabled: false,
+
+ loggingPrefix: "eventsource",
+
+ interval: 500, // milliseconds
+
+ bufferSizeLimit: 256*1024, // bytes
+
+ silentTimeout: 300000, // milliseconds
+
+ getArgs:{
+ 'evs_buffer_size_limit': 256*1024
+ },
+
+ xhrHeaders:{
+ 'Accept': 'text/event-stream',
+ 'Cache-Control': 'no-cache',
+ 'X-Requested-With': 'XMLHttpRequest'
+ }
+ },
+
+ setOptions: function(options){
+
+ var defaults = this.defaultOptions;
+ var option;
+
+ // set all default options...
+ for (option in defaults){
+
+ if ( defaults.hasOwnProperty(option) ){
+ this[option] = defaults[option];
+ }
+ }
+
+ // override with what is in options
+ for (option in options){
+
+ if (option in defaults && options.hasOwnProperty(option)){
+ this[option] = options[option];
+ }
+ }
+
+ // if getArgs option is enabled
+ // ensure evs_buffer_size_limit corresponds to bufferSizeLimit
+ if (this.getArgs && this.bufferSizeLimit) {
+
+ this.getArgs['evs_buffer_size_limit'] = this.bufferSizeLimit;
+ }
+
+ // if console is not available, force loggingEnabled to false
+ if (typeof console === "undefined" || typeof console.log === "undefined") {
+
+ this.loggingEnabled = false;
+ }
+ },
+
+ log: function(message) {
+
+ if (this.loggingEnabled) {
+
+ console.log("[" + this.loggingPrefix +"]:" + message)
+ }
+ },
+
+ poll: function() {
+
+ try {
+
+ if (this.readyState == this.CLOSED) {
+ return;
+ }
+
+ this.cleanup();
+ this.readyState = this.CONNECTING;
+ this.cursor = 0;
+ this.cache = '';
+ this._xhr = new this.XHR(this);
+ this.resetNoActivityTimer();
+
+ }
+ catch (e) {
+
+ // in an attempt to silence the errors
+ this.log('There were errors inside the pool try-catch');
+ this.dispatchEvent('error', { type: 'error', data: e.message });
+ }
+ },
+
+ pollAgain: function (interval) {
+
+ // schedule poll to be called after interval milliseconds
+ var evs = this;
+ evs.readyState = evs.CONNECTING;
+ evs.dispatchEvent('error', {
+ type: 'error',
+ data: "Reconnecting "
+ });
+ this._pollTimer = setTimeout(function(){evs.poll()}, interval||0);
+ },
+
+
+ cleanup: function() {
+
+ this.log('evs cleaning up')
+
+ if (this._pollTimer){
+ clearInterval(this._pollTimer);
+ this._pollTimer = null;
+ }
+
+ if (this._noActivityTimer){
+ clearInterval(this._noActivityTimer);
+ this._noActivityTimer = null;
+ }
+
+ if (this._xhr){
+ this._xhr.abort();
+ this._xhr = null;
+ }
+ },
+
+ resetNoActivityTimer: function(){
+
+ if (this.silentTimeout){
+
+ if (this._noActivityTimer){
+ clearInterval(this._noActivityTimer);
+ }
+ var evs = this;
+ this._noActivityTimer = setTimeout(
+ function(){ evs.log('Timeout! silentTImeout:'+evs.silentTimeout); evs.pollAgain(); },
+ this.silentTimeout
+ );
+ }
+ },
+
+ close: function () {
+
+ this.readyState = this.CLOSED;
+ this.log('Closing connection. readyState: '+this.readyState);
+ this.cleanup();
+ },
+
+ ondata: function() {
+
+ var request = this._xhr;
+
+ if (request.isReady() && !request.hasError() ) {
+ // reset the timer, as we have activity
+ this.resetNoActivityTimer();
+
+ // move this EventSource to OPEN state...
+ if (this.readyState == this.CONNECTING) {
+ this.readyState = this.OPEN;
+ this.dispatchEvent('open', { type: 'open' });
+ }
+
+ var buffer = request.getBuffer();
+
+ if (buffer.length > this.bufferSizeLimit) {
+ this.log('buffer.length > this.bufferSizeLimit');
+ this.pollAgain();
+ }
+
+ if (this.cursor == 0 && buffer.length > 0){
+
+ // skip byte order mark \uFEFF character if it starts the stream
+ if (buffer.substring(0,1) == '\uFEFF'){
+ this.cursor = 1;
+ }
+ }
+
+ var lastMessageIndex = this.lastMessageIndex(buffer);
+ if (lastMessageIndex[0] >= this.cursor){
+
+ var newcursor = lastMessageIndex[1];
+ var toparse = buffer.substring(this.cursor, newcursor);
+ this.parseStream(toparse);
+ this.cursor = newcursor;
+ }
+
+ // if request is finished, reopen the connection
+ if (request.isDone()) {
+ this.log('request.isDone(). reopening the connection');
+ this.pollAgain(this.interval);
+ }
+ }
+ else if (this.readyState !== this.CLOSED) {
+
+ this.log('this.readyState !== this.CLOSED');
+ this.pollAgain(this.interval);
+
+ //MV: Unsure why an error was previously dispatched
+ }
+ },
+
+ parseStream: function(chunk) {
+
+ // normalize line separators (\r\n,\r,\n) to \n
+ // remove white spaces that may precede \n
+ chunk = this.cache + this.normalizeToLF(chunk);
+
+ var events = chunk.split('\n\n');
+
+ var i, j, eventType, datas, line, retry;
+
+ for (i=0; i < (events.length - 1); i++) {
+
+ eventType = 'message';
+ datas = [];
+ parts = events[i].split('\n');
+
+ for (j=0; j < parts.length; j++) {
+
+ line = this.trimWhiteSpace(parts[j]);
+
+ if (line.indexOf('event') == 0) {
+
+ eventType = line.replace(/event:?\s*/, '');
+ }
+ else if (line.indexOf('retry') == 0) {
+
+ retry = parseInt(line.replace(/retry:?\s*/, ''));
+ if(!isNaN(retry)) {
+ this.interval = retry;
+ }
+ }
+ else if (line.indexOf('data') == 0) {
+
+ datas.push(line.replace(/data:?\s*/, ''));
+ }
+ else if (line.indexOf('id:') == 0) {
+
+ this.lastEventId = line.replace(/id:?\s*/, '');
+ }
+ else if (line.indexOf('id') == 0) { // this resets the id
+
+ this.lastEventId = null;
+ }
+ }
+
+ if (datas.length) {
+ // dispatch a new event
+ var event = new MessageEvent(eventType, datas.join('\n'), window.location.origin, this.lastEventId);
+ this.dispatchEvent(eventType, event);
+ }
+ }
+
+ this.cache = events[events.length - 1];
+ },
+
+ dispatchEvent: function (type, event) {
+ var handlers = this['_' + type + 'Handlers'];
+
+ if (handlers) {
+
+ for (var i = 0; i < handlers.length; i++) {
+ handlers[i].call(this, event);
+ }
+ }
+
+ if (this['on' + type]) {
+ this['on' + type].call(this, event);
+ }
+
+ },
+
+ addEventListener: function (type, handler) {
+ if (!this['_' + type + 'Handlers']) {
+ this['_' + type + 'Handlers'] = [];
+ }
+
+ this['_' + type + 'Handlers'].push(handler);
+ },
+
+ removeEventListener: function (type, handler) {
+ var handlers = this['_' + type + 'Handlers'];
+ if (!handlers) {
+ return;
+ }
+ for (var i = handlers.length - 1; i >= 0; --i) {
+ if (handlers[i] === handler) {
+ handlers.splice(i, 1);
+ break;
+ }
+ }
+ },
+
+ _pollTimer: null,
+
+ _noactivityTimer: null,
+
+ _xhr: null,
+
+ lastEventId: null,
+
+ cache: '',
+
+ cursor: 0,
+
+ onerror: null,
+
+ onmessage: null,
+
+ onopen: null,
+
+ readyState: 0,
+
+ // ===================================================================
+ // helpers functions
+ // those are attached to prototype to ease reuse and testing...
+
+ urlWithParams: function (baseURL, params) {
+
+ var encodedArgs = [];
+
+ if (params){
+
+ var key, urlarg;
+ var urlize = encodeURIComponent;
+
+ for (key in params){
+ if (params.hasOwnProperty(key)) {
+ urlarg = urlize(key)+'='+urlize(params[key]);
+ encodedArgs.push(urlarg);
+ }
+ }
+ }
+
+ if (encodedArgs.length > 0){
+
+ if (baseURL.indexOf('?') == -1)
+ return baseURL + '?' + encodedArgs.join('&');
+ return baseURL + '&' + encodedArgs.join('&');
+ }
+ return baseURL;
+ },
+
+ lastMessageIndex: function(text) {
+
+ var ln2 =text.lastIndexOf('\n\n');
+ var lr2 = text.lastIndexOf('\r\r');
+ var lrln2 = text.lastIndexOf('\r\n\r\n');
+
+ if (lrln2 > Math.max(ln2, lr2)) {
+ return [lrln2, lrln2+4];
+ }
+ return [Math.max(ln2, lr2), Math.max(ln2, lr2) + 2]
+ },
+
+ trimWhiteSpace: function(str) {
+ // to remove whitespaces left and right of string
+
+ var reTrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g;
+ return str.replace(reTrim, '');
+ },
+
+ normalizeToLF: function(str) {
+
+ // replace \r and \r\n with \n
+ return str.replace(/\r\n|\r/g, '\n');
+ }
+
+ };
+
+ if (!isOldIE()){
+
+ EventSource.isPolyfill = "XHR";
+
+ // EventSource will send request using XMLHttpRequest
+ EventSource.prototype.XHR = function(evs) {
+
+ request = new XMLHttpRequest();
+ this._request = request;
+ evs._xhr = this;
+
+ // set handlers
+ request.onreadystatechange = function(){
+ if (request.readyState > 1 && evs.readyState != evs.CLOSED) {
+ if (request.status == 200 || (request.status>=300 && request.status<400)){
+ evs.ondata();
+ }
+ else {
+ request._failed = true;
+ evs.readyState = evs.CLOSED;
+ evs.dispatchEvent('error', {
+ type: 'error',
+ data: "The server responded with "+request.status
+ });
+ evs.close();
+ }
+ }
+ };
+
+ request.onprogress = function () {
+ };
+
+ request.open('GET', evs.urlWithParams(evs.URL, evs.getArgs), true);
+
+ var headers = evs.xhrHeaders; // maybe null
+ for (var header in headers) {
+ if (headers.hasOwnProperty(header)){
+ request.setRequestHeader(header, headers[header]);
+ }
+ }
+ if (evs.lastEventId) {
+ request.setRequestHeader('Last-Event-Id', evs.lastEventId);
+ }
+
+ request.send();
+ };
+
+ EventSource.prototype.XHR.prototype = {
+
+ useXDomainRequest: false,
+
+ _request: null,
+
+ _failed: false, // true if we have had errors...
+
+ isReady: function() {
+
+
+ return this._request.readyState >= 2;
+ },
+
+ isDone: function() {
+
+ return (this._request.readyState == 4);
+ },
+
+ hasError: function() {
+
+ return (this._failed || (this._request.status >= 400));
+ },
+
+ getBuffer: function() {
+
+ var rv = '';
+ try {
+ rv = this._request.responseText || '';
+ }
+ catch (e){}
+ return rv;
+ },
+
+ abort: function() {
+
+ if ( this._request ) {
+ this._request.abort();
+ }
+ }
+ };
+ }
+ else {
+
+ EventSource.isPolyfill = "IE_8-9";
+
+ // patch EventSource defaultOptions
+ var defaults = EventSource.prototype.defaultOptions;
+ defaults.xhrHeaders = null; // no headers will be sent
+ defaults.getArgs['evs_preamble'] = 2048 + 8;
+
+ // EventSource will send request using Internet Explorer XDomainRequest
+ EventSource.prototype.XHR = function(evs) {
+
+ request = new XDomainRequest();
+ this._request = request;
+
+ // set handlers
+ request.onprogress = function(){
+ request._ready = true;
+ evs.ondata();
+ };
+
+ request.onload = function(){
+ this._loaded = true;
+ evs.ondata();
+ };
+
+ request.onerror = function(){
+ this._failed = true;
+ evs.readyState = evs.CLOSED;
+ evs.dispatchEvent('error', {
+ type: 'error',
+ data: "XDomainRequest error"
+ });
+ };
+
+ request.ontimeout = function(){
+ this._failed = true;
+ evs.readyState = evs.CLOSED;
+ evs.dispatchEvent('error', {
+ type: 'error',
+ data: "XDomainRequest timed out"
+ });
+ };
+
+ // XDomainRequest does not allow setting custom headers
+ // If EventSource has enabled the use of GET arguments
+ // we add parameters to URL so that server can adapt the stream...
+ var reqGetArgs = {};
+ if (evs.getArgs) {
+
+ // copy evs.getArgs in reqGetArgs
+ var defaultArgs = evs.getArgs;
+ for (var key in defaultArgs) {
+ if (defaultArgs.hasOwnProperty(key)){
+ reqGetArgs[key] = defaultArgs[key];
+ }
+ }
+ if (evs.lastEventId){
+ reqGetArgs['evs_last_event_id'] = evs.lastEventId;
+ }
+ }
+ // send the request
+
+ request.open('GET', evs.urlWithParams(evs.URL,reqGetArgs));
+ request.send();
+ };
+
+ EventSource.prototype.XHR.prototype = {
+
+ useXDomainRequest: true,
+
+ _request: null,
+
+ _ready: false, // true when progress events are dispatched
+
+ _loaded: false, // true when request has been loaded
+
+ _failed: false, // true if when request is in error
+
+ isReady: function() {
+
+ return this._request._ready;
+ },
+
+ isDone: function() {
+
+ return this._request._loaded;
+ },
+
+ hasError: function() {
+
+ return this._request._failed;
+ },
+
+ getBuffer: function() {
+
+ var rv = '';
+ try {
+ rv = this._request.responseText || '';
+ }
+ catch (e){}
+ return rv;
+ },
+
+ abort: function() {
+
+ if ( this._request){
+ this._request.abort();
+ }
+ }
+ };
+ }
+
+ function MessageEvent(type, data, origin, lastEventId) {
+
+ this.bubbles = false;
+ this.cancelBubble = false;
+ this.cancelable = false;
+ this.data = data || null;
+ this.origin = origin || '';
+ this.lastEventId = lastEventId || '';
+ this.type = type || 'message';
+ }
+
+ function isOldIE () {
+
+ //return true if we are in IE8 or IE9
+ return (window.XDomainRequest && (window.XMLHttpRequest && new XMLHttpRequest().responseType === undefined)) ? true : false;
+ }
+
+ global[evsImportName] = EventSource;
+})(this);
diff --git a/js/vendor/github-markdown-css/.bower.json b/js/vendor/github-markdown-css/.bower.json
new file mode 100644
index 00000000..b1bfccc6
--- /dev/null
+++ b/js/vendor/github-markdown-css/.bower.json
@@ -0,0 +1,31 @@
+{
+ "name": "github-markdown-css",
+ "description": "The minimal amount of CSS to replicate the GitHub Markdown style",
+ "license": "MIT",
+ "main": "github-markdown.css",
+ "keywords": [
+ "github",
+ "markdown",
+ "md",
+ "css",
+ "style",
+ "stylesheet"
+ ],
+ "ignore": [
+ "**/.*",
+ "package.json",
+ "index.html"
+ ],
+ "homepage": "https://github.com/sindresorhus/github-markdown-css",
+ "version": "2.0.7",
+ "_release": "2.0.7",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.7",
+ "commit": "4d31bd0b3967cf6c5d3bbecb676f5ca8463d7be4"
+ },
+ "_source": "git://github.com/sindresorhus/github-markdown-css.git",
+ "_target": "~2.0.7",
+ "_originalSource": "github-markdown-css",
+ "_direct": true
+} \ No newline at end of file
diff --git a/js/vendor/github-markdown-css/bower.json b/js/vendor/github-markdown-css/bower.json
new file mode 100644
index 00000000..6b164322
--- /dev/null
+++ b/js/vendor/github-markdown-css/bower.json
@@ -0,0 +1,19 @@
+{
+ "name": "github-markdown-css",
+ "description": "The minimal amount of CSS to replicate the GitHub Markdown style",
+ "license": "MIT",
+ "main": "github-markdown.css",
+ "keywords": [
+ "github",
+ "markdown",
+ "md",
+ "css",
+ "style",
+ "stylesheet"
+ ],
+ "ignore": [
+ "**/.*",
+ "package.json",
+ "index.html"
+ ]
+}
diff --git a/js/vendor/github-markdown-css/github-markdown.css b/js/vendor/github-markdown-css/github-markdown.css
new file mode 100644
index 00000000..44de9a6b
--- /dev/null
+++ b/js/vendor/github-markdown-css/github-markdown.css
@@ -0,0 +1,664 @@
+@font-face {
+ font-family: octicons-anchor;
+ src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format('woff');
+}
+
+.markdown-body {
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+ color: #333;
+ overflow: hidden;
+ font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
+ font-size: 16px;
+ line-height: 1.6;
+ word-wrap: break-word;
+}
+
+.markdown-body a {
+ background: transparent;
+}
+
+.markdown-body a:active,
+.markdown-body a:hover {
+ outline: 0;
+}
+
+.markdown-body strong {
+ font-weight: bold;
+}
+
+.markdown-body h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+.markdown-body img {
+ border: 0;
+}
+
+.markdown-body hr {
+ box-sizing: content-box;
+ height: 0;
+}
+
+.markdown-body pre {
+ overflow: auto;
+}
+
+.markdown-body code,
+.markdown-body kbd,
+.markdown-body pre {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+.markdown-body input {
+ color: inherit;
+ font: inherit;
+ margin: 0;
+}
+
+.markdown-body html input[disabled] {
+ cursor: default;
+}
+
+.markdown-body input {
+ line-height: normal;
+}
+
+.markdown-body input[type="checkbox"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+.markdown-body table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+.markdown-body td,
+.markdown-body th {
+ padding: 0;
+}
+
+.markdown-body * {
+ box-sizing: border-box;
+}
+
+.markdown-body input {
+ font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
+}
+
+.markdown-body a {
+ color: #4183c4;
+ text-decoration: none;
+}
+
+.markdown-body a:hover,
+.markdown-body a:active {
+ text-decoration: underline;
+}
+
+.markdown-body hr {
+ height: 0;
+ margin: 15px 0;
+ overflow: hidden;
+ background: transparent;
+ border: 0;
+ border-bottom: 1px solid #ddd;
+}
+
+.markdown-body hr:before {
+ display: table;
+ content: "";
+}
+
+.markdown-body hr:after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.markdown-body h1,
+.markdown-body h2,
+.markdown-body h3,
+.markdown-body h4,
+.markdown-body h5,
+.markdown-body h6 {
+ margin-top: 15px;
+ margin-bottom: 15px;
+ line-height: 1.1;
+}
+
+.markdown-body h1 {
+ font-size: 30px;
+}
+
+.markdown-body h2 {
+ font-size: 21px;
+}
+
+.markdown-body h3 {
+ font-size: 16px;
+}
+
+.markdown-body h4 {
+ font-size: 14px;
+}
+
+.markdown-body h5 {
+ font-size: 12px;
+}
+
+.markdown-body h6 {
+ font-size: 11px;
+}
+
+.markdown-body blockquote {
+ margin: 0;
+}
+
+.markdown-body ul,
+.markdown-body ol {
+ padding: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.markdown-body ol ol,
+.markdown-body ul ol {
+ list-style-type: lower-roman;
+}
+
+.markdown-body ul ul ol,
+.markdown-body ul ol ol,
+.markdown-body ol ul ol,
+.markdown-body ol ol ol {
+ list-style-type: lower-alpha;
+}
+
+.markdown-body dd {
+ margin-left: 0;
+}
+
+.markdown-body code {
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
+ font-size: 12px;
+}
+
+.markdown-body pre {
+ margin-top: 0;
+ margin-bottom: 0;
+ font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
+}
+
+.markdown-body .octicon {
+ font: normal normal normal 16px/1 octicons-anchor;
+ display: inline-block;
+ text-decoration: none;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.markdown-body .octicon-link:before {
+ content: '\f05c';
+}
+
+.markdown-body>*:first-child {
+ margin-top: 0 !important;
+}
+
+.markdown-body>*:last-child {
+ margin-bottom: 0 !important;
+}
+
+.markdown-body a:not(:link):not(:visited) {
+ color: inherit;
+ text-decoration: none;
+}
+
+.markdown-body .anchor {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: block;
+ padding-right: 6px;
+ padding-left: 30px;
+ margin-left: -30px;
+}
+
+.markdown-body .anchor:focus {
+ outline: none;
+}
+
+.markdown-body h1,
+.markdown-body h2,
+.markdown-body h3,
+.markdown-body h4,
+.markdown-body h5,
+.markdown-body h6 {
+ position: relative;
+ margin-top: 1em;
+ margin-bottom: 16px;
+ font-weight: bold;
+ line-height: 1.4;
+}
+
+.markdown-body h1 .octicon-link,
+.markdown-body h2 .octicon-link,
+.markdown-body h3 .octicon-link,
+.markdown-body h4 .octicon-link,
+.markdown-body h5 .octicon-link,
+.markdown-body h6 .octicon-link {
+ display: none;
+ color: #000;
+ vertical-align: middle;
+}
+
+.markdown-body h1:hover .anchor,
+.markdown-body h2:hover .anchor,
+.markdown-body h3:hover .anchor,
+.markdown-body h4:hover .anchor,
+.markdown-body h5:hover .anchor,
+.markdown-body h6:hover .anchor {
+ padding-left: 8px;
+ margin-left: -30px;
+ text-decoration: none;
+}
+
+.markdown-body h1:hover .anchor .octicon-link,
+.markdown-body h2:hover .anchor .octicon-link,
+.markdown-body h3:hover .anchor .octicon-link,
+.markdown-body h4:hover .anchor .octicon-link,
+.markdown-body h5:hover .anchor .octicon-link,
+.markdown-body h6:hover .anchor .octicon-link {
+ display: inline-block;
+}
+
+.markdown-body h1 {
+ padding-bottom: 0.3em;
+ font-size: 2.25em;
+ line-height: 1.2;
+ border-bottom: 1px solid #eee;
+}
+
+.markdown-body h1 .anchor {
+ line-height: 1;
+}
+
+.markdown-body h2 {
+ padding-bottom: 0.3em;
+ font-size: 1.75em;
+ line-height: 1.225;
+ border-bottom: 1px solid #eee;
+}
+
+.markdown-body h2 .anchor {
+ line-height: 1;
+}
+
+.markdown-body h3 {
+ font-size: 1.5em;
+ line-height: 1.43;
+}
+
+.markdown-body h3 .anchor {
+ line-height: 1.2;
+}
+
+.markdown-body h4 {
+ font-size: 1.25em;
+}
+
+.markdown-body h4 .anchor {
+ line-height: 1.2;
+}
+
+.markdown-body h5 {
+ font-size: 1em;
+}
+
+.markdown-body h5 .anchor {
+ line-height: 1.1;
+}
+
+.markdown-body h6 {
+ font-size: 1em;
+ color: #777;
+}
+
+.markdown-body h6 .anchor {
+ line-height: 1.1;
+}
+
+.markdown-body p,
+.markdown-body blockquote,
+.markdown-body ul,
+.markdown-body ol,
+.markdown-body dl,
+.markdown-body table,
+.markdown-body pre {
+ margin-top: 0;
+ margin-bottom: 16px;
+}
+
+.markdown-body hr {
+ height: 4px;
+ padding: 0;
+ margin: 16px 0;
+ background-color: #e7e7e7;
+ border: 0 none;
+}
+
+.markdown-body ul,
+.markdown-body ol {
+ padding-left: 2em;
+}
+
+.markdown-body ul ul,
+.markdown-body ul ol,
+.markdown-body ol ol,
+.markdown-body ol ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.markdown-body li>p {
+ margin-top: 16px;
+}
+
+.markdown-body dl {
+ padding: 0;
+}
+
+.markdown-body dl dt {
+ padding: 0;
+ margin-top: 16px;
+ font-size: 1em;
+ font-style: italic;
+ font-weight: bold;
+}
+
+.markdown-body dl dd {
+ padding: 0 16px;
+ margin-bottom: 16px;
+}
+
+.markdown-body blockquote {
+ padding: 0 15px;
+ color: #777;
+ border-left: 4px solid #ddd;
+}
+
+.markdown-body blockquote>:first-child {
+ margin-top: 0;
+}
+
+.markdown-body blockquote>:last-child {
+ margin-bottom: 0;
+}
+
+.markdown-body table {
+ display: block;
+ width: 100%;
+ overflow: auto;
+ word-break: normal;
+ word-break: keep-all;
+}
+
+.markdown-body table th {
+ font-weight: bold;
+}
+
+.markdown-body table th,
+.markdown-body table td {
+ padding: 6px 13px;
+ border: 1px solid #ddd;
+}
+
+.markdown-body table tr {
+ background-color: #fff;
+ border-top: 1px solid #ccc;
+}
+
+.markdown-body table tr:nth-child(2n) {
+ background-color: #f8f8f8;
+}
+
+.markdown-body img {
+ max-width: 100%;
+ box-sizing: border-box;
+}
+
+.markdown-body code {
+ padding: 0;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+ margin: 0;
+ font-size: 85%;
+ background-color: rgba(0,0,0,0.04);
+ border-radius: 3px;
+}
+
+.markdown-body code:before,
+.markdown-body code:after {
+ letter-spacing: -0.2em;
+ content: "\00a0";
+}
+
+.markdown-body pre>code {
+ padding: 0;
+ margin: 0;
+ font-size: 100%;
+ word-break: normal;
+ white-space: pre;
+ background: transparent;
+ border: 0;
+}
+
+.markdown-body .highlight {
+ margin-bottom: 16px;
+}
+
+.markdown-body .highlight pre,
+.markdown-body pre {
+ padding: 16px;
+ overflow: auto;
+ font-size: 85%;
+ line-height: 1.45;
+ background-color: #f7f7f7;
+ border-radius: 3px;
+}
+
+.markdown-body .highlight pre {
+ margin-bottom: 0;
+ word-break: normal;
+}
+
+.markdown-body pre {
+ word-wrap: normal;
+}
+
+.markdown-body pre code {
+ display: inline;
+ max-width: initial;
+ padding: 0;
+ margin: 0;
+ overflow: initial;
+ line-height: inherit;
+ word-wrap: normal;
+ background-color: transparent;
+ border: 0;
+}
+
+.markdown-body pre code:before,
+.markdown-body pre code:after {
+ content: normal;
+}
+
+.markdown-body kbd {
+ display: inline-block;
+ padding: 3px 5px;
+ font-size: 11px;
+ line-height: 10px;
+ color: #555;
+ vertical-align: middle;
+ background-color: #fcfcfc;
+ border: solid 1px #ccc;
+ border-bottom-color: #bbb;
+ border-radius: 3px;
+ box-shadow: inset 0 -1px 0 #bbb;
+}
+
+.markdown-body .pl-c {
+ color: #969896;
+}
+
+.markdown-body .pl-c1,
+.markdown-body .pl-mdh,
+.markdown-body .pl-mm,
+.markdown-body .pl-mp,
+.markdown-body .pl-mr,
+.markdown-body .pl-s1 .pl-v,
+.markdown-body .pl-s3,
+.markdown-body .pl-sc,
+.markdown-body .pl-sv {
+ color: #0086b3;
+}
+
+.markdown-body .pl-e,
+.markdown-body .pl-en {
+ color: #795da3;
+}
+
+.markdown-body .pl-s1 .pl-s2,
+.markdown-body .pl-smi,
+.markdown-body .pl-smp,
+.markdown-body .pl-stj,
+.markdown-body .pl-vo,
+.markdown-body .pl-vpf {
+ color: #333;
+}
+
+.markdown-body .pl-ent {
+ color: #63a35c;
+}
+
+.markdown-body .pl-k,
+.markdown-body .pl-s,
+.markdown-body .pl-st {
+ color: #a71d5d;
+}
+
+.markdown-body .pl-pds,
+.markdown-body .pl-s1,
+.markdown-body .pl-s1 .pl-pse .pl-s2,
+.markdown-body .pl-sr,
+.markdown-body .pl-sr .pl-cce,
+.markdown-body .pl-sr .pl-sra,
+.markdown-body .pl-sr .pl-sre,
+.markdown-body .pl-src {
+ color: #183691;
+}
+
+.markdown-body .pl-v {
+ color: #ed6a43;
+}
+
+.markdown-body .pl-id {
+ color: #b52a1d;
+}
+
+.markdown-body .pl-ii {
+ background-color: #b52a1d;
+ color: #f8f8f8;
+}
+
+.markdown-body .pl-sr .pl-cce {
+ color: #63a35c;
+ font-weight: bold;
+}
+
+.markdown-body .pl-ml {
+ color: #693a17;
+}
+
+.markdown-body .pl-mh,
+.markdown-body .pl-mh .pl-en,
+.markdown-body .pl-ms {
+ color: #1d3e81;
+ font-weight: bold;
+}
+
+.markdown-body .pl-mq {
+ color: #008080;
+}
+
+.markdown-body .pl-mi {
+ color: #333;
+ font-style: italic;
+}
+
+.markdown-body .pl-mb {
+ color: #333;
+ font-weight: bold;
+}
+
+.markdown-body .pl-md,
+.markdown-body .pl-mdhf {
+ background-color: #ffecec;
+ color: #bd2c00;
+}
+
+.markdown-body .pl-mdht,
+.markdown-body .pl-mi1 {
+ background-color: #eaffea;
+ color: #55a532;
+}
+
+.markdown-body .pl-mdr {
+ color: #795da3;
+ font-weight: bold;
+}
+
+.markdown-body .pl-mo {
+ color: #1d3e81;
+}
+
+.markdown-body kbd {
+ display: inline-block;
+ padding: 3px 5px;
+ font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
+ line-height: 10px;
+ color: #555;
+ vertical-align: middle;
+ background-color: #fcfcfc;
+ border: solid 1px #ccc;
+ border-bottom-color: #bbb;
+ border-radius: 3px;
+ box-shadow: inset 0 -1px 0 #bbb;
+}
+
+.markdown-body .task-list-item {
+ list-style-type: none;
+}
+
+.markdown-body .task-list-item+.task-list-item {
+ margin-top: 3px;
+}
+
+.markdown-body .task-list-item input {
+ margin: 0 0.35em 0.25em -1.6em;
+ vertical-align: middle;
+}
+
+.markdown-body :checked+.radio-label {
+ z-index: 1;
+ position: relative;
+ border-color: #4183c4;
+}
diff --git a/js/vendor/github-markdown-css/license b/js/vendor/github-markdown-css/license
new file mode 100644
index 00000000..654d0bfe
--- /dev/null
+++ b/js/vendor/github-markdown-css/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/js/vendor/github-markdown-css/readme.md b/js/vendor/github-markdown-css/readme.md
new file mode 100644
index 00000000..a58fe348
--- /dev/null
+++ b/js/vendor/github-markdown-css/readme.md
@@ -0,0 +1,56 @@
+# github-markdown-css
+
+> The minimal amount of CSS to replicate the GitHub Markdown style
+
+[<img src="https://cloud.githubusercontent.com/assets/170270/5219062/f22a978c-7685-11e4-8316-af25b6c89bc0.png" width="300">](http://sindresorhus.com/github-markdown-css)
+
+## [Demo](http://sindresorhus.com/github-markdown-css)
+
+
+## Install
+
+Download [manually](https://raw.githubusercontent.com/sindresorhus/github-markdown-css/gh-pages/github-markdown.css) or with a package-manager.
+
+```sh
+$ npm install --save github-markdown-css
+```
+
+```sh
+$ bower install --save github-markdown-css
+```
+
+
+## Usage
+
+Import the `github-markdown.css` file and add a `markdown-body` class to the container of your rendered Markdown and set a width for it. GitHub uses `790px` width and `30px` padding.
+
+```html
+<link rel="stylesheet" href="github-markdown.css">
+<style>
+ .markdown-body {
+ min-width: 200px;
+ max-width: 790px;
+ margin: 0 auto;
+ padding: 30px;
+ }
+</style>
+<article class="markdown-body">
+ <h1>Unicorns</h1>
+ <p>All the things</p>
+</article>
+```
+
+
+## How
+
+See [`generate-github-markdown-css`](https://github.com/sindresorhus/generate-github-markdown-css) for how it's generated and ability to generate your own.
+
+
+## Dev
+
+Run `npm run generate` to update the CSS.
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/js/vendor/marked/.bower.json b/js/vendor/marked/.bower.json
new file mode 100644
index 00000000..9dbbeb8a
--- /dev/null
+++ b/js/vendor/marked/.bower.json
@@ -0,0 +1,34 @@
+{
+ "name": "marked",
+ "version": "0.3.3",
+ "homepage": "https://github.com/chjj/marked",
+ "authors": [
+ "Christopher Jeffrey <chjjeffrey@gmail.com>"
+ ],
+ "description": "A markdown parser built for speed",
+ "keywords": [
+ "markdown",
+ "markup",
+ "html"
+ ],
+ "main": "lib/marked.js",
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "app/bower_components",
+ "test",
+ "tests"
+ ],
+ "_release": "0.3.3",
+ "_resolution": {
+ "type": "version",
+ "tag": "v0.3.3",
+ "commit": "2b5802f258c5e23e48366f2377fbb4c807f47658"
+ },
+ "_source": "git://github.com/chjj/marked.git",
+ "_target": "~0.3.3",
+ "_originalSource": "marked",
+ "_direct": true
+} \ No newline at end of file
diff --git a/js/vendor/marked/LICENSE b/js/vendor/marked/LICENSE
new file mode 100644
index 00000000..a7b812ed
--- /dev/null
+++ b/js/vendor/marked/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2011-2014, Christopher Jeffrey (https://github.com/chjj/)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/js/vendor/marked/Makefile b/js/vendor/marked/Makefile
new file mode 100644
index 00000000..d9349f07
--- /dev/null
+++ b/js/vendor/marked/Makefile
@@ -0,0 +1,12 @@
+all:
+ @cp lib/marked.js marked.js
+ @uglifyjs --comments '/\*[^\0]+?Copyright[^\0]+?\*/' -o marked.min.js lib/marked.js
+
+clean:
+ @rm marked.js
+ @rm marked.min.js
+
+bench:
+ @node test --bench
+
+.PHONY: clean all
diff --git a/js/vendor/marked/README.md b/js/vendor/marked/README.md
new file mode 100644
index 00000000..b9817cd4
--- /dev/null
+++ b/js/vendor/marked/README.md
@@ -0,0 +1,406 @@
+# marked
+
+> A full-featured markdown parser and compiler, written in JavaScript. Built
+> for speed.
+
+[![NPM version](https://badge.fury.io/js/marked.png)][badge]
+
+## Install
+
+``` bash
+npm install marked --save
+```
+
+## Usage
+
+Minimal usage:
+
+```js
+var marked = require('marked');
+console.log(marked('I am using __markdown__.'));
+// Outputs: <p>I am using <strong>markdown</strong>.</p>
+```
+
+Example setting options with default values:
+
+```js
+var marked = require('marked');
+marked.setOptions({
+ renderer: new marked.Renderer(),
+ gfm: true,
+ tables: true,
+ breaks: false,
+ pedantic: false,
+ sanitize: true,
+ smartLists: true,
+ smartypants: false
+});
+
+console.log(marked('I am using __markdown__.'));
+```
+
+### Browser
+
+```html
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8"/>
+ <title>Marked in the browser</title>
+ <script src="lib/marked.js"></script>
+</head>
+<body>
+ <div id="content"></div>
+ <script>
+ document.getElementById('content').innerHTML =
+ marked('# Marked in browser\n\nRendered by **marked**.');
+ </script>
+</body>
+</html>
+```
+
+## marked(markdownString [,options] [,callback])
+
+### markdownString
+
+Type: `string`
+
+String of markdown source to be compiled.
+
+### options
+
+Type: `object`
+
+Hash of options. Can also be set using the `marked.setOptions` method as seen
+above.
+
+### callback
+
+Type: `function`
+
+Function called when the `markdownString` has been fully parsed when using
+async highlighting. If the `options` argument is omitted, this can be used as
+the second argument.
+
+## Options
+
+### highlight
+
+Type: `function`
+
+A function to highlight code blocks. The first example below uses async highlighting with
+[node-pygmentize-bundled][pygmentize], and the second is a synchronous example using
+[highlight.js][highlight]:
+
+```js
+var marked = require('marked');
+
+var markdownString = '```js\n console.log("hello"); \n```';
+
+// Async highlighting with pygmentize-bundled
+marked.setOptions({
+ highlight: function (code, lang, callback) {
+ require('pygmentize-bundled')({ lang: lang, format: 'html' }, code, function (err, result) {
+ callback(err, result.toString());
+ });
+ }
+});
+
+// Using async version of marked
+marked(markdownString, function (err, content) {
+ if (err) throw err;
+ console.log(content);
+});
+
+// Synchronous highlighting with highlight.js
+marked.setOptions({
+ highlight: function (code) {
+ return require('highlight.js').highlightAuto(code).value;
+ }
+});
+
+console.log(marked(markdownString));
+```
+
+#### highlight arguments
+
+`code`
+
+Type: `string`
+
+The section of code to pass to the highlighter.
+
+`lang`
+
+Type: `string`
+
+The programming language specified in the code block.
+
+`callback`
+
+Type: `function`
+
+The callback function to call when using an async highlighter.
+
+### renderer
+
+Type: `object`
+Default: `new Renderer()`
+
+An object containing functions to render tokens to HTML.
+
+#### Overriding renderer methods
+
+The renderer option allows you to render tokens in a custom manor. Here is an
+example of overriding the default heading token rendering by adding an embedded anchor tag like on GitHub:
+
+```javascript
+var marked = require('marked');
+var renderer = new marked.Renderer();
+
+renderer.heading = function (text, level) {
+ var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
+
+ return '<h' + level + '><a name="' +
+ escapedText +
+ '" class="anchor" href="#' +
+ escapedText +
+ '"><span class="header-link"></span></a>' +
+ text + '</h' + level + '>';
+},
+
+console.log(marked('# heading+', { renderer: renderer }));
+```
+This code will output the following HTML:
+```html
+<h1>
+ <a name="heading-" class="anchor" href="#heading-">
+ <span class="header-link"></span>
+ </a>
+ heading+
+</h1>
+```
+
+#### Block level renderer methods
+
+- code(*string* code, *string* language)
+- blockquote(*string* quote)
+- html(*string* html)
+- heading(*string* text, *number* level)
+- hr()
+- list(*string* body, *boolean* ordered)
+- listitem(*string* text)
+- paragraph(*string* text)
+- table(*string* header, *string* body)
+- tablerow(*string* content)
+- tablecell(*string* content, *object* flags)
+
+`flags` has the following properties:
+
+```js
+{
+ header: true || false,
+ align: 'center' || 'left' || 'right'
+}
+```
+
+#### Inline level renderer methods
+
+- strong(*string* text)
+- em(*string* text)
+- codespan(*string* code)
+- br()
+- del(*string* text)
+- link(*string* href, *string* title, *string* text)
+- image(*string* href, *string* title, *string* text)
+
+### gfm
+
+Type: `boolean`
+Default: `true`
+
+Enable [GitHub flavored markdown][gfm].
+
+### tables
+
+Type: `boolean`
+Default: `true`
+
+Enable GFM [tables][tables].
+This option requires the `gfm` option to be true.
+
+### breaks
+
+Type: `boolean`
+Default: `false`
+
+Enable GFM [line breaks][breaks].
+This option requires the `gfm` option to be true.
+
+### pedantic
+
+Type: `boolean`
+Default: `false`
+
+Conform to obscure parts of `markdown.pl` as much as possible. Don't fix any of
+the original markdown bugs or poor behavior.
+
+### sanitize
+
+Type: `boolean`
+Default: `false`
+
+Sanitize the output. Ignore any HTML that has been input.
+
+### smartLists
+
+Type: `boolean`
+Default: `true`
+
+Use smarter list behavior than the original markdown. May eventually be
+default with the old behavior moved into `pedantic`.
+
+### smartypants
+
+Type: `boolean`
+Default: `false`
+
+Use "smart" typograhic punctuation for things like quotes and dashes.
+
+## Access to lexer and parser
+
+You also have direct access to the lexer and parser if you so desire.
+
+``` js
+var tokens = marked.lexer(text, options);
+console.log(marked.parser(tokens));
+```
+
+``` js
+var lexer = new marked.Lexer(options);
+var tokens = lexer.lex(text);
+console.log(tokens);
+console.log(lexer.rules);
+```
+
+## CLI
+
+``` bash
+$ marked -o hello.html
+hello world
+^D
+$ cat hello.html
+<p>hello world</p>
+```
+
+## Philosophy behind marked
+
+The point of marked was to create a markdown compiler where it was possible to
+frequently parse huge chunks of markdown without having to worry about
+caching the compiled output somehow...or blocking for an unnecesarily long time.
+
+marked is very concise and still implements all markdown features. It is also
+now fully compatible with the client-side.
+
+marked more or less passes the official markdown test suite in its
+entirety. This is important because a surprising number of markdown compilers
+cannot pass more than a few tests. It was very difficult to get marked as
+compliant as it is. It could have cut corners in several areas for the sake
+of performance, but did not in order to be exactly what you expect in terms
+of a markdown rendering. In fact, this is why marked could be considered at a
+disadvantage in the benchmarks above.
+
+Along with implementing every markdown feature, marked also implements [GFM
+features][gfmf].
+
+## Benchmarks
+
+node v0.8.x
+
+``` bash
+$ node test --bench
+marked completed in 3411ms.
+marked (gfm) completed in 3727ms.
+marked (pedantic) completed in 3201ms.
+robotskirt completed in 808ms.
+showdown (reuse converter) completed in 11954ms.
+showdown (new converter) completed in 17774ms.
+markdown-js completed in 17191ms.
+```
+
+__Marked is now faster than Discount, which is written in C.__
+
+For those feeling skeptical: These benchmarks run the entire markdown test suite 1000 times. The test suite tests every feature. It doesn't cater to specific aspects.
+
+### Pro level
+
+You also have direct access to the lexer and parser if you so desire.
+
+``` js
+var tokens = marked.lexer(text, options);
+console.log(marked.parser(tokens));
+```
+
+``` js
+var lexer = new marked.Lexer(options);
+var tokens = lexer.lex(text);
+console.log(tokens);
+console.log(lexer.rules);
+```
+
+``` bash
+$ node
+> require('marked').lexer('> i am using marked.')
+[ { type: 'blockquote_start' },
+ { type: 'paragraph',
+ text: 'i am using marked.' },
+ { type: 'blockquote_end' },
+ links: {} ]
+```
+
+## Running Tests & Contributing
+
+If you want to submit a pull request, make sure your changes pass the test
+suite. If you're adding a new feature, be sure to add your own test.
+
+The marked test suite is set up slightly strangely: `test/new` is for all tests
+that are not part of the original markdown.pl test suite (this is where your
+test should go if you make one). `test/original` is only for the original
+markdown.pl tests. `test/tests` houses both types of tests after they have been
+combined and moved/generated by running `node test --fix` or `marked --test
+--fix`.
+
+In other words, if you have a test to add, add it to `test/new/` and then
+regenerate the tests with `node test --fix`. Commit the result. If your test
+uses a certain feature, for example, maybe it assumes GFM is *not* enabled, you
+can add `.nogfm` to the filename. So, `my-test.text` becomes
+`my-test.nogfm.text`. You can do this with any marked option. Say you want
+line breaks and smartypants enabled, your filename should be:
+`my-test.breaks.smartypants.text`.
+
+To run the tests:
+
+``` bash
+cd marked/
+node test
+```
+
+### Contribution and License Agreement
+
+If you contribute code to this project, you are implicitly allowing your code
+to be distributed under the MIT license. You are also implicitly verifying that
+all code is your original work. `</legalese>`
+
+## License
+
+Copyright (c) 2011-2014, Christopher Jeffrey. (MIT License)
+
+See LICENSE for more info.
+
+[gfm]: https://help.github.com/articles/github-flavored-markdown
+[gfmf]: http://github.github.com/github-flavored-markdown/
+[pygmentize]: https://github.com/rvagg/node-pygmentize-bundled
+[highlight]: https://github.com/isagalaev/highlight.js
+[badge]: http://badge.fury.io/js/marked
+[tables]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables
+[breaks]: https://help.github.com/articles/github-flavored-markdown#newlines
diff --git a/js/vendor/marked/bin/marked b/js/vendor/marked/bin/marked
new file mode 100644
index 00000000..64254fc3
--- /dev/null
+++ b/js/vendor/marked/bin/marked
@@ -0,0 +1,187 @@
+#!/usr/bin/env node
+
+/**
+ * Marked CLI
+ * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License)
+ */
+
+var fs = require('fs')
+ , util = require('util')
+ , marked = require('../');
+
+/**
+ * Man Page
+ */
+
+function help() {
+ var spawn = require('child_process').spawn;
+
+ var options = {
+ cwd: process.cwd(),
+ env: process.env,
+ setsid: false,
+ customFds: [0, 1, 2]
+ };
+
+ spawn('man',
+ [__dirname + '/../man/marked.1'],
+ options);
+}
+
+/**
+ * Main
+ */
+
+function main(argv, callback) {
+ var files = []
+ , options = {}
+ , input
+ , output
+ , arg
+ , tokens
+ , opt;
+
+ function getarg() {
+ var arg = argv.shift();
+
+ if (arg.indexOf('--') === 0) {
+ // e.g. --opt
+ arg = arg.split('=');
+ if (arg.length > 1) {
+ // e.g. --opt=val
+ argv.unshift(arg.slice(1).join('='));
+ }
+ arg = arg[0];
+ } else if (arg[0] === '-') {
+ if (arg.length > 2) {
+ // e.g. -abc
+ argv = arg.substring(1).split('').map(function(ch) {
+ return '-' + ch;
+ }).concat(argv);
+ arg = argv.shift();
+ } else {
+ // e.g. -a
+ }
+ } else {
+ // e.g. foo
+ }
+
+ return arg;
+ }
+
+ while (argv.length) {
+ arg = getarg();
+ switch (arg) {
+ case '--test':
+ return require('../test').main(process.argv.slice());
+ case '-o':
+ case '--output':
+ output = argv.shift();
+ break;
+ case '-i':
+ case '--input':
+ input = argv.shift();
+ break;
+ case '-t':
+ case '--tokens':
+ tokens = true;
+ break;
+ case '-h':
+ case '--help':
+ return help();
+ default:
+ if (arg.indexOf('--') === 0) {
+ opt = camelize(arg.replace(/^--(no-)?/, ''));
+ if (!marked.defaults.hasOwnProperty(opt)) {
+ continue;
+ }
+ if (arg.indexOf('--no-') === 0) {
+ options[opt] = typeof marked.defaults[opt] !== 'boolean'
+ ? null
+ : false;
+ } else {
+ options[opt] = typeof marked.defaults[opt] !== 'boolean'
+ ? argv.shift()
+ : true;
+ }
+ } else {
+ files.push(arg);
+ }
+ break;
+ }
+ }
+
+ function getData(callback) {
+ if (!input) {
+ if (files.length <= 2) {
+ return getStdin(callback);
+ }
+ input = files.pop();
+ }
+ return fs.readFile(input, 'utf8', callback);
+ }
+
+ return getData(function(err, data) {
+ if (err) return callback(err);
+
+ data = tokens
+ ? JSON.stringify(marked.lexer(data, options), null, 2)
+ : marked(data, options);
+
+ if (!output) {
+ process.stdout.write(data + '\n');
+ return callback();
+ }
+
+ return fs.writeFile(output, data, callback);
+ });
+}
+
+/**
+ * Helpers
+ */
+
+function getStdin(callback) {
+ var stdin = process.stdin
+ , buff = '';
+
+ stdin.setEncoding('utf8');
+
+ stdin.on('data', function(data) {
+ buff += data;
+ });
+
+ stdin.on('error', function(err) {
+ return callback(err);
+ });
+
+ stdin.on('end', function() {
+ return callback(null, buff);
+ });
+
+ try {
+ stdin.resume();
+ } catch (e) {
+ callback(e);
+ }
+}
+
+function camelize(text) {
+ return text.replace(/(\w)-(\w)/g, function(_, a, b) {
+ return a + b.toUpperCase();
+ });
+}
+
+/**
+ * Expose / Entry Point
+ */
+
+if (!module.parent) {
+ process.title = 'marked';
+ main(process.argv.slice(), function(err, code) {
+ if (err) throw err;
+ return process.exit(code || 0);
+ });
+} else {
+ module.exports = main;
+}
diff --git a/js/vendor/marked/bower.json b/js/vendor/marked/bower.json
new file mode 100644
index 00000000..3eab3110
--- /dev/null
+++ b/js/vendor/marked/bower.json
@@ -0,0 +1,24 @@
+{
+ "name": "marked",
+ "version": "0.3.2",
+ "homepage": "https://github.com/chjj/marked",
+ "authors": [
+ "Christopher Jeffrey <chjjeffrey@gmail.com>"
+ ],
+ "description": "A markdown parser built for speed",
+ "keywords": [
+ "markdown",
+ "markup",
+ "html"
+ ],
+ "main": "lib/marked.js",
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "app/bower_components",
+ "test",
+ "tests"
+ ]
+}
diff --git a/js/vendor/marked/component.json b/js/vendor/marked/component.json
new file mode 100644
index 00000000..931cbedc
--- /dev/null
+++ b/js/vendor/marked/component.json
@@ -0,0 +1,10 @@
+{
+ "name": "marked",
+ "version": "0.3.2",
+ "repo": "chjj/marked",
+ "description": "A markdown parser built for speed",
+ "keywords": ["markdown", "markup", "html"],
+ "scripts": ["lib/marked.js"],
+ "main": "lib/marked.js",
+ "license": "MIT"
+}
diff --git a/js/vendor/marked/doc/broken.md b/js/vendor/marked/doc/broken.md
new file mode 100644
index 00000000..7bfa49e8
--- /dev/null
+++ b/js/vendor/marked/doc/broken.md
@@ -0,0 +1,426 @@
+# Markdown is broken
+
+I have a lot of scraps of markdown engine oddities that I've collected over the
+years. What you see below is slightly messy, but it's what I've managed to
+cobble together to illustrate the differences between markdown engines, and
+why, if there ever is a markdown specification, it has to be absolutely
+thorough. There are a lot more of these little differences I have documented
+elsewhere. I know I will find them lingering on my disk one day, but until
+then, I'll continue to add whatever strange nonsensical things I find.
+
+Some of these examples may only mention a particular engine compared to marked.
+However, the examples with markdown.pl could easily be swapped out for
+discount, upskirt, or markdown.js, and you would very easily see even more
+inconsistencies.
+
+A lot of this was written when I was very unsatisfied with the inconsistencies
+between markdown engines. Please excuse the frustration noticeable in my
+writing.
+
+## Examples of markdown's "stupid" list parsing
+
+```
+$ markdown.pl
+
+ * item1
+
+ * item2
+
+ text
+^D
+<ul>
+<li><p>item1</p>
+
+<ul>
+<li>item2</li>
+</ul>
+
+<p><p>text</p></li>
+</ul></p>
+```
+
+
+```
+$ marked
+ * item1
+
+ * item2
+
+ text
+^D
+<ul>
+<li><p>item1</p>
+<ul>
+<li>item2</li>
+</ul>
+<p>text</p>
+</li>
+</ul>
+```
+
+Which looks correct to you?
+
+- - -
+
+```
+$ markdown.pl
+* hello
+ > world
+^D
+<p><ul>
+<li>hello</p>
+
+<blockquote>
+ <p>world</li>
+</ul></p>
+</blockquote>
+```
+
+```
+$ marked
+* hello
+ > world
+^D
+<ul>
+<li>hello<blockquote>
+<p>world</p>
+</blockquote>
+</li>
+</ul>
+```
+
+Again, which looks correct to you?
+
+- - -
+
+EXAMPLE:
+
+```
+$ markdown.pl
+* hello
+ * world
+ * hi
+ code
+^D
+<ul>
+<li>hello
+<ul>
+<li>world</li>
+<li>hi
+ code</li>
+</ul></li>
+</ul>
+```
+
+The code isn't a code block even though it's after the bullet margin. I know,
+lets give it two more spaces, effectively making it 8 spaces past the bullet.
+
+```
+$ markdown.pl
+* hello
+ * world
+ * hi
+ code
+^D
+<ul>
+<li>hello
+<ul>
+<li>world</li>
+<li>hi
+ code</li>
+</ul></li>
+</ul>
+```
+
+And, it's still not a code block. Did you also notice that the 3rd item isn't
+even its own list? Markdown screws that up too because of its indentation
+unaware parsing.
+
+- - -
+
+Let's look at some more examples of markdown's list parsing:
+
+```
+$ markdown.pl
+
+ * item1
+
+ * item2
+
+ text
+^D
+<ul>
+<li><p>item1</p>
+
+<ul>
+<li>item2</li>
+</ul>
+
+<p><p>text</p></li>
+</ul></p>
+```
+
+Misnested tags.
+
+
+```
+$ marked
+ * item1
+
+ * item2
+
+ text
+^D
+<ul>
+<li><p>item1</p>
+<ul>
+<li>item2</li>
+</ul>
+<p>text</p>
+</li>
+</ul>
+```
+
+Which looks correct to you?
+
+- - -
+
+```
+$ markdown.pl
+* hello
+ > world
+^D
+<p><ul>
+<li>hello</p>
+
+<blockquote>
+ <p>world</li>
+</ul></p>
+</blockquote>
+```
+
+More misnested tags.
+
+
+```
+$ marked
+* hello
+ > world
+^D
+<ul>
+<li>hello<blockquote>
+<p>world</p>
+</blockquote>
+</li>
+</ul>
+```
+
+Again, which looks correct to you?
+
+- - -
+
+# Why quality matters - Part 2
+
+``` bash
+$ markdown.pl
+* hello
+ > world
+^D
+<p><ul>
+<li>hello</p>
+
+<blockquote>
+ <p>world</li>
+</ul></p>
+</blockquote>
+```
+
+``` bash
+$ sundown # upskirt
+* hello
+ > world
+^D
+<ul>
+<li>hello
+&gt; world</li>
+</ul>
+```
+
+``` bash
+$ marked
+* hello
+ > world
+^D
+<ul><li>hello <blockquote><p>world</p></blockquote></li></ul>
+```
+
+Which looks correct to you?
+
+- - -
+
+See: https://github.com/evilstreak/markdown-js/issues/23
+
+``` bash
+$ markdown.pl # upskirt/markdown.js/discount
+* hello
+ var a = 1;
+* world
+^D
+<ul>
+<li>hello
+var a = 1;</li>
+<li>world</li>
+</ul>
+```
+
+``` bash
+$ marked
+* hello
+ var a = 1;
+* world
+^D
+<ul><li>hello
+<pre>code>var a = 1;</code></pre></li>
+<li>world</li></ul>
+```
+
+Which looks more reasonable? Why shouldn't code blocks be able to appear in
+list items in a sane way?
+
+- - -
+
+``` bash
+$ markdown.js
+<div>hello</div>
+
+<span>hello</span>
+^D
+<p>&lt;div&gt;hello&lt;/div&gt;</p>
+
+<p>&lt;span&gt;hello&lt;/span&gt;</p>
+```
+
+``` bash
+$ marked
+<div>hello</div>
+
+<span>hello</span>
+^D
+<div>hello</div>
+
+
+<p><span>hello</span>
+</p>
+```
+
+- - -
+
+See: https://github.com/evilstreak/markdown-js/issues/27
+
+``` bash
+$ markdown.js
+[![an image](/image)](/link)
+^D
+<p><a href="/image)](/link">![an image</a></p>
+```
+
+``` bash
+$ marked
+[![an image](/image)](/link)
+^D
+<p><a href="/link"><img src="/image" alt="an image"></a>
+</p>
+```
+
+- - -
+
+See: https://github.com/evilstreak/markdown-js/issues/24
+
+``` bash
+$ markdown.js
+> a
+
+> b
+
+> c
+^D
+<blockquote><p>a</p><p>bundefined&gt; c</p></blockquote>
+```
+
+``` bash
+$ marked
+> a
+
+> b
+
+> c
+^D
+<blockquote><p>a
+
+</p></blockquote>
+<blockquote><p>b
+
+</p></blockquote>
+<blockquote><p>c
+</p></blockquote>
+```
+
+- - -
+
+``` bash
+$ markdown.pl
+* hello
+ * world
+ how
+
+ are
+ you
+
+ * today
+* hi
+^D
+<ul>
+<li><p>hello</p>
+
+<ul>
+<li>world
+how</li>
+</ul>
+
+<p>are
+you</p>
+
+<ul>
+<li>today</li>
+</ul></li>
+<li>hi</li>
+</ul>
+```
+
+``` bash
+$ marked
+* hello
+ * world
+ how
+
+ are
+ you
+
+ * today
+* hi
+^D
+<ul>
+<li><p>hello</p>
+<ul>
+<li><p>world
+how</p>
+<p>are
+you</p>
+</li>
+<li><p>today</p>
+</li>
+</ul>
+</li>
+<li>hi</li>
+</ul>
+```
diff --git a/js/vendor/marked/doc/todo.md b/js/vendor/marked/doc/todo.md
new file mode 100644
index 00000000..2e60b162
--- /dev/null
+++ b/js/vendor/marked/doc/todo.md
@@ -0,0 +1,2 @@
+# Todo
+
diff --git a/js/vendor/marked/index.js b/js/vendor/marked/index.js
new file mode 100644
index 00000000..a12f9056
--- /dev/null
+++ b/js/vendor/marked/index.js
@@ -0,0 +1 @@
+module.exports = require('./lib/marked');
diff --git a/js/vendor/marked/lib/marked.js b/js/vendor/marked/lib/marked.js
new file mode 100644
index 00000000..0b7180ff
--- /dev/null
+++ b/js/vendor/marked/lib/marked.js
@@ -0,0 +1,1272 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/chjj/marked
+ */
+
+;(function() {
+
+/**
+ * Block-Level Grammar
+ */
+
+var block = {
+ newline: /^\n+/,
+ code: /^( {4}[^\n]+\n*)+/,
+ fences: noop,
+ hr: /^( *[-*_]){3,} *(?:\n+|$)/,
+ heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
+ nptable: noop,
+ lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+ blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,
+ list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+ html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,
+ def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
+ table: noop,
+ paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,
+ text: /^[^\n]+/
+};
+
+block.bullet = /(?:[*+-]|\d+\.)/;
+block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;
+block.item = replace(block.item, 'gm')
+ (/bull/g, block.bullet)
+ ();
+
+block.list = replace(block.list)
+ (/bull/g, block.bullet)
+ ('hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))')
+ ('def', '\\n+(?=' + block.def.source + ')')
+ ();
+
+block.blockquote = replace(block.blockquote)
+ ('def', block.def)
+ ();
+
+block._tag = '(?!(?:'
+ + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
+ + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
+ + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b';
+
+block.html = replace(block.html)
+ ('comment', /<!--[\s\S]*?-->/)
+ ('closed', /<(tag)[\s\S]+?<\/\1>/)
+ ('closing', /<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)
+ (/tag/g, block._tag)
+ ();
+
+block.paragraph = replace(block.paragraph)
+ ('hr', block.hr)
+ ('heading', block.heading)
+ ('lheading', block.lheading)
+ ('blockquote', block.blockquote)
+ ('tag', '<' + block._tag)
+ ('def', block.def)
+ ();
+
+/**
+ * Normal Block Grammar
+ */
+
+block.normal = merge({}, block);
+
+/**
+ * GFM Block Grammar
+ */
+
+block.gfm = merge({}, block.normal, {
+ fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,
+ paragraph: /^/
+});
+
+block.gfm.paragraph = replace(block.paragraph)
+ ('(?!', '(?!'
+ + block.gfm.fences.source.replace('\\1', '\\2') + '|'
+ + block.list.source.replace('\\1', '\\3') + '|')
+ ();
+
+/**
+ * GFM + Tables Block Grammar
+ */
+
+block.tables = merge({}, block.gfm, {
+ nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,
+ table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/
+});
+
+/**
+ * Block Lexer
+ */
+
+function Lexer(options) {
+ this.tokens = [];
+ this.tokens.links = {};
+ this.options = options || marked.defaults;
+ this.rules = block.normal;
+
+ if (this.options.gfm) {
+ if (this.options.tables) {
+ this.rules = block.tables;
+ } else {
+ this.rules = block.gfm;
+ }
+ }
+}
+
+/**
+ * Expose Block Rules
+ */
+
+Lexer.rules = block;
+
+/**
+ * Static Lex Method
+ */
+
+Lexer.lex = function(src, options) {
+ var lexer = new Lexer(options);
+ return lexer.lex(src);
+};
+
+/**
+ * Preprocessing
+ */
+
+Lexer.prototype.lex = function(src) {
+ src = src
+ .replace(/\r\n|\r/g, '\n')
+ .replace(/\t/g, ' ')
+ .replace(/\u00a0/g, ' ')
+ .replace(/\u2424/g, '\n');
+
+ return this.token(src, true);
+};
+
+/**
+ * Lexing
+ */
+
+Lexer.prototype.token = function(src, top, bq) {
+ var src = src.replace(/^ +$/gm, '')
+ , next
+ , loose
+ , cap
+ , bull
+ , b
+ , item
+ , space
+ , i
+ , l;
+
+ while (src) {
+ // newline
+ if (cap = this.rules.newline.exec(src)) {
+ src = src.substring(cap[0].length);
+ if (cap[0].length > 1) {
+ this.tokens.push({
+ type: 'space'
+ });
+ }
+ }
+
+ // code
+ if (cap = this.rules.code.exec(src)) {
+ src = src.substring(cap[0].length);
+ cap = cap[0].replace(/^ {4}/gm, '');
+ this.tokens.push({
+ type: 'code',
+ text: !this.options.pedantic
+ ? cap.replace(/\n+$/, '')
+ : cap
+ });
+ continue;
+ }
+
+ // fences (gfm)
+ if (cap = this.rules.fences.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'code',
+ lang: cap[2],
+ text: cap[3]
+ });
+ continue;
+ }
+
+ // heading
+ if (cap = this.rules.heading.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'heading',
+ depth: cap[1].length,
+ text: cap[2]
+ });
+ continue;
+ }
+
+ // table no leading pipe (gfm)
+ if (top && (cap = this.rules.nptable.exec(src))) {
+ src = src.substring(cap[0].length);
+
+ item = {
+ type: 'table',
+ header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
+ align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+ cells: cap[3].replace(/\n$/, '').split('\n')
+ };
+
+ for (i = 0; i < item.align.length; i++) {
+ if (/^ *-+: *$/.test(item.align[i])) {
+ item.align[i] = 'right';
+ } else if (/^ *:-+: *$/.test(item.align[i])) {
+ item.align[i] = 'center';
+ } else if (/^ *:-+ *$/.test(item.align[i])) {
+ item.align[i] = 'left';
+ } else {
+ item.align[i] = null;
+ }
+ }
+
+ for (i = 0; i < item.cells.length; i++) {
+ item.cells[i] = item.cells[i].split(/ *\| */);
+ }
+
+ this.tokens.push(item);
+
+ continue;
+ }
+
+ // lheading
+ if (cap = this.rules.lheading.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'heading',
+ depth: cap[2] === '=' ? 1 : 2,
+ text: cap[1]
+ });
+ continue;
+ }
+
+ // hr
+ if (cap = this.rules.hr.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'hr'
+ });
+ continue;
+ }
+
+ // blockquote
+ if (cap = this.rules.blockquote.exec(src)) {
+ src = src.substring(cap[0].length);
+
+ this.tokens.push({
+ type: 'blockquote_start'
+ });
+
+ cap = cap[0].replace(/^ *> ?/gm, '');
+
+ // Pass `top` to keep the current
+ // "toplevel" state. This is exactly
+ // how markdown.pl works.
+ this.token(cap, top, true);
+
+ this.tokens.push({
+ type: 'blockquote_end'
+ });
+
+ continue;
+ }
+
+ // list
+ if (cap = this.rules.list.exec(src)) {
+ src = src.substring(cap[0].length);
+ bull = cap[2];
+
+ this.tokens.push({
+ type: 'list_start',
+ ordered: bull.length > 1
+ });
+
+ // Get each top-level item.
+ cap = cap[0].match(this.rules.item);
+
+ next = false;
+ l = cap.length;
+ i = 0;
+
+ for (; i < l; i++) {
+ item = cap[i];
+
+ // Remove the list item's bullet
+ // so it is seen as the next token.
+ space = item.length;
+ item = item.replace(/^ *([*+-]|\d+\.) +/, '');
+
+ // Outdent whatever the
+ // list item contains. Hacky.
+ if (~item.indexOf('\n ')) {
+ space -= item.length;
+ item = !this.options.pedantic
+ ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
+ : item.replace(/^ {1,4}/gm, '');
+ }
+
+ // Determine whether the next list item belongs here.
+ // Backpedal if it does not belong in this list.
+ if (this.options.smartLists && i !== l - 1) {
+ b = block.bullet.exec(cap[i + 1])[0];
+ if (bull !== b && !(bull.length > 1 && b.length > 1)) {
+ src = cap.slice(i + 1).join('\n') + src;
+ i = l - 1;
+ }
+ }
+
+ // Determine whether item is loose or not.
+ // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
+ // for discount behavior.
+ loose = next || /\n\n(?!\s*$)/.test(item);
+ if (i !== l - 1) {
+ next = item.charAt(item.length - 1) === '\n';
+ if (!loose) loose = next;
+ }
+
+ this.tokens.push({
+ type: loose
+ ? 'loose_item_start'
+ : 'list_item_start'
+ });
+
+ // Recurse.
+ this.token(item, false, bq);
+
+ this.tokens.push({
+ type: 'list_item_end'
+ });
+ }
+
+ this.tokens.push({
+ type: 'list_end'
+ });
+
+ continue;
+ }
+
+ // html
+ if (cap = this.rules.html.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: this.options.sanitize
+ ? 'paragraph'
+ : 'html',
+ pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',
+ text: cap[0]
+ });
+ continue;
+ }
+
+ // def
+ if ((!bq && top) && (cap = this.rules.def.exec(src))) {
+ src = src.substring(cap[0].length);
+ this.tokens.links[cap[1].toLowerCase()] = {
+ href: cap[2],
+ title: cap[3]
+ };
+ continue;
+ }
+
+ // table (gfm)
+ if (top && (cap = this.rules.table.exec(src))) {
+ src = src.substring(cap[0].length);
+
+ item = {
+ type: 'table',
+ header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
+ align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+ cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n')
+ };
+
+ for (i = 0; i < item.align.length; i++) {
+ if (/^ *-+: *$/.test(item.align[i])) {
+ item.align[i] = 'right';
+ } else if (/^ *:-+: *$/.test(item.align[i])) {
+ item.align[i] = 'center';
+ } else if (/^ *:-+ *$/.test(item.align[i])) {
+ item.align[i] = 'left';
+ } else {
+ item.align[i] = null;
+ }
+ }
+
+ for (i = 0; i < item.cells.length; i++) {
+ item.cells[i] = item.cells[i]
+ .replace(/^ *\| *| *\| *$/g, '')
+ .split(/ *\| */);
+ }
+
+ this.tokens.push(item);
+
+ continue;
+ }
+
+ // top-level paragraph
+ if (top && (cap = this.rules.paragraph.exec(src))) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'paragraph',
+ text: cap[1].charAt(cap[1].length - 1) === '\n'
+ ? cap[1].slice(0, -1)
+ : cap[1]
+ });
+ continue;
+ }
+
+ // text
+ if (cap = this.rules.text.exec(src)) {
+ // Top-level should never reach here.
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'text',
+ text: cap[0]
+ });
+ continue;
+ }
+
+ if (src) {
+ throw new
+ Error('Infinite loop on byte: ' + src.charCodeAt(0));
+ }
+ }
+
+ return this.tokens;
+};
+
+/**
+ * Inline-Level Grammar
+ */
+
+var inline = {
+ escape: /^\\([\\`*{}\[\]()#+\-.!_>])/,
+ autolink: /^<([^ >]+(@|:\/)[^ >]+)>/,
+ url: noop,
+ tag: /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
+ link: /^!?\[(inside)\]\(href\)/,
+ reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
+ nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
+ strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
+ em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
+ code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,
+ br: /^ {2,}\n(?!\s*$)/,
+ del: noop,
+ text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/
+};
+
+inline._inside = /(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;
+inline._href = /\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;
+
+inline.link = replace(inline.link)
+ ('inside', inline._inside)
+ ('href', inline._href)
+ ();
+
+inline.reflink = replace(inline.reflink)
+ ('inside', inline._inside)
+ ();
+
+/**
+ * Normal Inline Grammar
+ */
+
+inline.normal = merge({}, inline);
+
+/**
+ * Pedantic Inline Grammar
+ */
+
+inline.pedantic = merge({}, inline.normal, {
+ strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+ em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/
+});
+
+/**
+ * GFM Inline Grammar
+ */
+
+inline.gfm = merge({}, inline.normal, {
+ escape: replace(inline.escape)('])', '~|])')(),
+ url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,
+ del: /^~~(?=\S)([\s\S]*?\S)~~/,
+ text: replace(inline.text)
+ (']|', '~]|')
+ ('|', '|https?://|')
+ ()
+});
+
+/**
+ * GFM + Line Breaks Inline Grammar
+ */
+
+inline.breaks = merge({}, inline.gfm, {
+ br: replace(inline.br)('{2,}', '*')(),
+ text: replace(inline.gfm.text)('{2,}', '*')()
+});
+
+/**
+ * Inline Lexer & Compiler
+ */
+
+function InlineLexer(links, options) {
+ this.options = options || marked.defaults;
+ this.links = links;
+ this.rules = inline.normal;
+ this.renderer = this.options.renderer || new Renderer;
+ this.renderer.options = this.options;
+
+ if (!this.links) {
+ throw new
+ Error('Tokens array requires a `links` property.');
+ }
+
+ if (this.options.gfm) {
+ if (this.options.breaks) {
+ this.rules = inline.breaks;
+ } else {
+ this.rules = inline.gfm;
+ }
+ } else if (this.options.pedantic) {
+ this.rules = inline.pedantic;
+ }
+}
+
+/**
+ * Expose Inline Rules
+ */
+
+InlineLexer.rules = inline;
+
+/**
+ * Static Lexing/Compiling Method
+ */
+
+InlineLexer.output = function(src, links, options) {
+ var inline = new InlineLexer(links, options);
+ return inline.output(src);
+};
+
+/**
+ * Lexing/Compiling
+ */
+
+InlineLexer.prototype.output = function(src) {
+ var out = ''
+ , link
+ , text
+ , href
+ , cap;
+
+ while (src) {
+ // escape
+ if (cap = this.rules.escape.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += cap[1];
+ continue;
+ }
+
+ // autolink
+ if (cap = this.rules.autolink.exec(src)) {
+ src = src.substring(cap[0].length);
+ if (cap[2] === '@') {
+ text = cap[1].charAt(6) === ':'
+ ? this.mangle(cap[1].substring(7))
+ : this.mangle(cap[1]);
+ href = this.mangle('mailto:') + text;
+ } else {
+ text = escape(cap[1]);
+ href = text;
+ }
+ out += this.renderer.link(href, null, text);
+ continue;
+ }
+
+ // url (gfm)
+ if (!this.inLink && (cap = this.rules.url.exec(src))) {
+ src = src.substring(cap[0].length);
+ text = escape(cap[1]);
+ href = text;
+ out += this.renderer.link(href, null, text);
+ continue;
+ }
+
+ // tag
+ if (cap = this.rules.tag.exec(src)) {
+ if (!this.inLink && /^<a /i.test(cap[0])) {
+ this.inLink = true;
+ } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
+ this.inLink = false;
+ }
+ src = src.substring(cap[0].length);
+ out += this.options.sanitize
+ ? escape(cap[0])
+ : cap[0];
+ continue;
+ }
+
+ // link
+ if (cap = this.rules.link.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.inLink = true;
+ out += this.outputLink(cap, {
+ href: cap[2],
+ title: cap[3]
+ });
+ this.inLink = false;
+ continue;
+ }
+
+ // reflink, nolink
+ if ((cap = this.rules.reflink.exec(src))
+ || (cap = this.rules.nolink.exec(src))) {
+ src = src.substring(cap[0].length);
+ link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
+ link = this.links[link.toLowerCase()];
+ if (!link || !link.href) {
+ out += cap[0].charAt(0);
+ src = cap[0].substring(1) + src;
+ continue;
+ }
+ this.inLink = true;
+ out += this.outputLink(cap, link);
+ this.inLink = false;
+ continue;
+ }
+
+ // strong
+ if (cap = this.rules.strong.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.strong(this.output(cap[2] || cap[1]));
+ continue;
+ }
+
+ // em
+ if (cap = this.rules.em.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.em(this.output(cap[2] || cap[1]));
+ continue;
+ }
+
+ // code
+ if (cap = this.rules.code.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.codespan(escape(cap[2], true));
+ continue;
+ }
+
+ // br
+ if (cap = this.rules.br.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.br();
+ continue;
+ }
+
+ // del (gfm)
+ if (cap = this.rules.del.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.del(this.output(cap[1]));
+ continue;
+ }
+
+ // text
+ if (cap = this.rules.text.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += escape(this.smartypants(cap[0]));
+ continue;
+ }
+
+ if (src) {
+ throw new
+ Error('Infinite loop on byte: ' + src.charCodeAt(0));
+ }
+ }
+
+ return out;
+};
+
+/**
+ * Compile Link
+ */
+
+InlineLexer.prototype.outputLink = function(cap, link) {
+ var href = escape(link.href)
+ , title = link.title ? escape(link.title) : null;
+
+ return cap[0].charAt(0) !== '!'
+ ? this.renderer.link(href, title, this.output(cap[1]))
+ : this.renderer.image(href, title, escape(cap[1]));
+};
+
+/**
+ * Smartypants Transformations
+ */
+
+InlineLexer.prototype.smartypants = function(text) {
+ if (!this.options.smartypants) return text;
+ return text
+ // em-dashes
+ .replace(/--/g, '\u2014')
+ // opening singles
+ .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
+ // closing singles & apostrophes
+ .replace(/'/g, '\u2019')
+ // opening doubles
+ .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
+ // closing doubles
+ .replace(/"/g, '\u201d')
+ // ellipses
+ .replace(/\.{3}/g, '\u2026');
+};
+
+/**
+ * Mangle Links
+ */
+
+InlineLexer.prototype.mangle = function(text) {
+ var out = ''
+ , l = text.length
+ , i = 0
+ , ch;
+
+ for (; i < l; i++) {
+ ch = text.charCodeAt(i);
+ if (Math.random() > 0.5) {
+ ch = 'x' + ch.toString(16);
+ }
+ out += '&#' + ch + ';';
+ }
+
+ return out;
+};
+
+/**
+ * Renderer
+ */
+
+function Renderer(options) {
+ this.options = options || {};
+}
+
+Renderer.prototype.code = function(code, lang, escaped) {
+ if (this.options.highlight) {
+ var out = this.options.highlight(code, lang);
+ if (out != null && out !== code) {
+ escaped = true;
+ code = out;
+ }
+ }
+
+ if (!lang) {
+ return '<pre><code>'
+ + (escaped ? code : escape(code, true))
+ + '\n</code></pre>';
+ }
+
+ return '<pre><code class="'
+ + this.options.langPrefix
+ + escape(lang, true)
+ + '">'
+ + (escaped ? code : escape(code, true))
+ + '\n</code></pre>\n';
+};
+
+Renderer.prototype.blockquote = function(quote) {
+ return '<blockquote>\n' + quote + '</blockquote>\n';
+};
+
+Renderer.prototype.html = function(html) {
+ return html;
+};
+
+Renderer.prototype.heading = function(text, level, raw) {
+ return '<h'
+ + level
+ + ' id="'
+ + this.options.headerPrefix
+ + raw.toLowerCase().replace(/[^\w]+/g, '-')
+ + '">'
+ + text
+ + '</h'
+ + level
+ + '>\n';
+};
+
+Renderer.prototype.hr = function() {
+ return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
+};
+
+Renderer.prototype.list = function(body, ordered) {
+ var type = ordered ? 'ol' : 'ul';
+ return '<' + type + '>\n' + body + '</' + type + '>\n';
+};
+
+Renderer.prototype.listitem = function(text) {
+ return '<li>' + text + '</li>\n';
+};
+
+Renderer.prototype.paragraph = function(text) {
+ return '<p>' + text + '</p>\n';
+};
+
+Renderer.prototype.table = function(header, body) {
+ return '<table>\n'
+ + '<thead>\n'
+ + header
+ + '</thead>\n'
+ + '<tbody>\n'
+ + body
+ + '</tbody>\n'
+ + '</table>\n';
+};
+
+Renderer.prototype.tablerow = function(content) {
+ return '<tr>\n' + content + '</tr>\n';
+};
+
+Renderer.prototype.tablecell = function(content, flags) {
+ var type = flags.header ? 'th' : 'td';
+ var tag = flags.align
+ ? '<' + type + ' style="text-align:' + flags.align + '">'
+ : '<' + type + '>';
+ return tag + content + '</' + type + '>\n';
+};
+
+// span level renderer
+Renderer.prototype.strong = function(text) {
+ return '<strong>' + text + '</strong>';
+};
+
+Renderer.prototype.em = function(text) {
+ return '<em>' + text + '</em>';
+};
+
+Renderer.prototype.codespan = function(text) {
+ return '<code>' + text + '</code>';
+};
+
+Renderer.prototype.br = function() {
+ return this.options.xhtml ? '<br/>' : '<br>';
+};
+
+Renderer.prototype.del = function(text) {
+ return '<del>' + text + '</del>';
+};
+
+Renderer.prototype.link = function(href, title, text) {
+ if (this.options.sanitize) {
+ try {
+ var prot = decodeURIComponent(unescape(href))
+ .replace(/[^\w:]/g, '')
+ .toLowerCase();
+ } catch (e) {
+ return '';
+ }
+ if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) {
+ return '';
+ }
+ }
+ var out = '<a href="' + href + '"';
+ if (title) {
+ out += ' title="' + title + '"';
+ }
+ out += '>' + text + '</a>';
+ return out;
+};
+
+Renderer.prototype.image = function(href, title, text) {
+ var out = '<img src="' + href + '" alt="' + text + '"';
+ if (title) {
+ out += ' title="' + title + '"';
+ }
+ out += this.options.xhtml ? '/>' : '>';
+ return out;
+};
+
+/**
+ * Parsing & Compiling
+ */
+
+function Parser(options) {
+ this.tokens = [];
+ this.token = null;
+ this.options = options || marked.defaults;
+ this.options.renderer = this.options.renderer || new Renderer;
+ this.renderer = this.options.renderer;
+ this.renderer.options = this.options;
+}
+
+/**
+ * Static Parse Method
+ */
+
+Parser.parse = function(src, options, renderer) {
+ var parser = new Parser(options, renderer);
+ return parser.parse(src);
+};
+
+/**
+ * Parse Loop
+ */
+
+Parser.prototype.parse = function(src) {
+ this.inline = new InlineLexer(src.links, this.options, this.renderer);
+ this.tokens = src.reverse();
+
+ var out = '';
+ while (this.next()) {
+ out += this.tok();
+ }
+
+ return out;
+};
+
+/**
+ * Next Token
+ */
+
+Parser.prototype.next = function() {
+ return this.token = this.tokens.pop();
+};
+
+/**
+ * Preview Next Token
+ */
+
+Parser.prototype.peek = function() {
+ return this.tokens[this.tokens.length - 1] || 0;
+};
+
+/**
+ * Parse Text Tokens
+ */
+
+Parser.prototype.parseText = function() {
+ var body = this.token.text;
+
+ while (this.peek().type === 'text') {
+ body += '\n' + this.next().text;
+ }
+
+ return this.inline.output(body);
+};
+
+/**
+ * Parse Current Token
+ */
+
+Parser.prototype.tok = function() {
+ switch (this.token.type) {
+ case 'space': {
+ return '';
+ }
+ case 'hr': {
+ return this.renderer.hr();
+ }
+ case 'heading': {
+ return this.renderer.heading(
+ this.inline.output(this.token.text),
+ this.token.depth,
+ this.token.text);
+ }
+ case 'code': {
+ return this.renderer.code(this.token.text,
+ this.token.lang,
+ this.token.escaped);
+ }
+ case 'table': {
+ var header = ''
+ , body = ''
+ , i
+ , row
+ , cell
+ , flags
+ , j;
+
+ // header
+ cell = '';
+ for (i = 0; i < this.token.header.length; i++) {
+ flags = { header: true, align: this.token.align[i] };
+ cell += this.renderer.tablecell(
+ this.inline.output(this.token.header[i]),
+ { header: true, align: this.token.align[i] }
+ );
+ }
+ header += this.renderer.tablerow(cell);
+
+ for (i = 0; i < this.token.cells.length; i++) {
+ row = this.token.cells[i];
+
+ cell = '';
+ for (j = 0; j < row.length; j++) {
+ cell += this.renderer.tablecell(
+ this.inline.output(row[j]),
+ { header: false, align: this.token.align[j] }
+ );
+ }
+
+ body += this.renderer.tablerow(cell);
+ }
+ return this.renderer.table(header, body);
+ }
+ case 'blockquote_start': {
+ var body = '';
+
+ while (this.next().type !== 'blockquote_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.blockquote(body);
+ }
+ case 'list_start': {
+ var body = ''
+ , ordered = this.token.ordered;
+
+ while (this.next().type !== 'list_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.list(body, ordered);
+ }
+ case 'list_item_start': {
+ var body = '';
+
+ while (this.next().type !== 'list_item_end') {
+ body += this.token.type === 'text'
+ ? this.parseText()
+ : this.tok();
+ }
+
+ return this.renderer.listitem(body);
+ }
+ case 'loose_item_start': {
+ var body = '';
+
+ while (this.next().type !== 'list_item_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.listitem(body);
+ }
+ case 'html': {
+ var html = !this.token.pre && !this.options.pedantic
+ ? this.inline.output(this.token.text)
+ : this.token.text;
+ return this.renderer.html(html);
+ }
+ case 'paragraph': {
+ return this.renderer.paragraph(this.inline.output(this.token.text));
+ }
+ case 'text': {
+ return this.renderer.paragraph(this.parseText());
+ }
+ }
+};
+
+/**
+ * Helpers
+ */
+
+function escape(html, encode) {
+ return html
+ .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&amp;')
+ .replace(/</g, '&lt;')
+ .replace(/>/g, '&gt;')
+ .replace(/"/g, '&quot;')
+ .replace(/'/g, '&#39;');
+}
+
+function unescape(html) {
+ return html.replace(/&([#\w]+);/g, function(_, n) {
+ n = n.toLowerCase();
+ if (n === 'colon') return ':';
+ if (n.charAt(0) === '#') {
+ return n.charAt(1) === 'x'
+ ? String.fromCharCode(parseInt(n.substring(2), 16))
+ : String.fromCharCode(+n.substring(1));
+ }
+ return '';
+ });
+}
+
+function replace(regex, opt) {
+ regex = regex.source;
+ opt = opt || '';
+ return function self(name, val) {
+ if (!name) return new RegExp(regex, opt);
+ val = val.source || val;
+ val = val.replace(/(^|[^\[])\^/g, '$1');
+ regex = regex.replace(name, val);
+ return self;
+ };
+}
+
+function noop() {}
+noop.exec = noop;
+
+function merge(obj) {
+ var i = 1
+ , target
+ , key;
+
+ for (; i < arguments.length; i++) {
+ target = arguments[i];
+ for (key in target) {
+ if (Object.prototype.hasOwnProperty.call(target, key)) {
+ obj[key] = target[key];
+ }
+ }
+ }
+
+ return obj;
+}
+
+
+/**
+ * Marked
+ */
+
+function marked(src, opt, callback) {
+ if (callback || typeof opt === 'function') {
+ if (!callback) {
+ callback = opt;
+ opt = null;
+ }
+
+ opt = merge({}, marked.defaults, opt || {});
+
+ var highlight = opt.highlight
+ , tokens
+ , pending
+ , i = 0;
+
+ try {
+ tokens = Lexer.lex(src, opt)
+ } catch (e) {
+ return callback(e);
+ }
+
+ pending = tokens.length;
+
+ var done = function(err) {
+ if (err) {
+ opt.highlight = highlight;
+ return callback(err);
+ }
+
+ var out;
+
+ try {
+ out = Parser.parse(tokens, opt);
+ } catch (e) {
+ err = e;
+ }
+
+ opt.highlight = highlight;
+
+ return err
+ ? callback(err)
+ : callback(null, out);
+ };
+
+ if (!highlight || highlight.length < 3) {
+ return done();
+ }
+
+ delete opt.highlight;
+
+ if (!pending) return done();
+
+ for (; i < tokens.length; i++) {
+ (function(token) {
+ if (token.type !== 'code') {
+ return --pending || done();
+ }
+ return highlight(token.text, token.lang, function(err, code) {
+ if (err) return done(err);
+ if (code == null || code === token.text) {
+ return --pending || done();
+ }
+ token.text = code;
+ token.escaped = true;
+ --pending || done();
+ });
+ })(tokens[i]);
+ }
+
+ return;
+ }
+ try {
+ if (opt) opt = merge({}, marked.defaults, opt);
+ return Parser.parse(Lexer.lex(src, opt), opt);
+ } catch (e) {
+ e.message += '\nPlease report this to https://github.com/chjj/marked.';
+ if ((opt || marked.defaults).silent) {
+ return '<p>An error occured:</p><pre>'
+ + escape(e.message + '', true)
+ + '</pre>';
+ }
+ throw e;
+ }
+}
+
+/**
+ * Options
+ */
+
+marked.options =
+marked.setOptions = function(opt) {
+ merge(marked.defaults, opt);
+ return marked;
+};
+
+marked.defaults = {
+ gfm: true,
+ tables: true,
+ breaks: false,
+ pedantic: false,
+ sanitize: false,
+ smartLists: false,
+ silent: false,
+ highlight: null,
+ langPrefix: 'lang-',
+ smartypants: false,
+ headerPrefix: '',
+ renderer: new Renderer,
+ xhtml: false
+};
+
+/**
+ * Expose
+ */
+
+marked.Parser = Parser;
+marked.parser = Parser.parse;
+
+marked.Renderer = Renderer;
+
+marked.Lexer = Lexer;
+marked.lexer = Lexer.lex;
+
+marked.InlineLexer = InlineLexer;
+marked.inlineLexer = InlineLexer.output;
+
+marked.parse = marked;
+
+if (typeof module !== 'undefined' && typeof exports === 'object') {
+ module.exports = marked;
+} else if (typeof define === 'function' && define.amd) {
+ define(function() { return marked; });
+} else {
+ this.marked = marked;
+}
+
+}).call(function() {
+ return this || (typeof window !== 'undefined' ? window : global);
+}());
diff --git a/js/vendor/marked/man/marked.1 b/js/vendor/marked/man/marked.1
new file mode 100644
index 00000000..f89f1a7b
--- /dev/null
+++ b/js/vendor/marked/man/marked.1
@@ -0,0 +1,88 @@
+.ds q \N'34'
+.TH marked 1 "2014-01-31" "v0.3.1" "marked.js"
+
+.SH NAME
+marked \- a javascript markdown parser
+
+.SH SYNOPSIS
+.B marked
+[\-o \fI<output>\fP] [\-i \fI<input>\fP] [\-\-help]
+[\-\-tokens] [\-\-pedantic] [\-\-gfm]
+[\-\-breaks] [\-\-tables] [\-\-sanitize]
+[\-\-smart\-lists] [\-\-lang\-prefix \fI<prefix>\fP]
+[\-\-no\-etc...] [\-\-silent] [\fIfilename\fP]
+
+.SH DESCRIPTION
+.B marked
+is a full-featured javascript markdown parser, built for speed. It also includes
+multiple GFM features.
+
+.SH EXAMPLES
+.TP
+cat in.md | marked > out.html
+.TP
+echo "hello *world*" | marked
+.TP
+marked \-o out.html in.md \-\-gfm
+.TP
+marked \-\-output="hello world.html" \-i in.md \-\-no-breaks
+
+.SH OPTIONS
+.TP
+.BI \-o,\ \-\-output\ [\fIoutput\fP]
+Specify file output. If none is specified, write to stdout.
+.TP
+.BI \-i,\ \-\-input\ [\fIinput\fP]
+Specify file input, otherwise use last argument as input file. If no input file
+is specified, read from stdin.
+.TP
+.BI \-t,\ \-\-tokens
+Output a token stream instead of html.
+.TP
+.BI \-\-pedantic
+Conform to obscure parts of markdown.pl as much as possible. Don't fix original
+markdown bugs.
+.TP
+.BI \-\-gfm
+Enable github flavored markdown.
+.TP
+.BI \-\-breaks
+Enable GFM line breaks. Only works with the gfm option.
+.TP
+.BI \-\-tables
+Enable GFM tables. Only works with the gfm option.
+.TP
+.BI \-\-sanitize
+Sanitize output. Ignore any HTML input.
+.TP
+.BI \-\-smart\-lists
+Use smarter list behavior than the original markdown.
+.TP
+.BI \-\-lang\-prefix\ [\fIprefix\fP]
+Set the prefix for code block classes.
+.TP
+.BI \-\-no\-sanitize,\ \-no-etc...
+The inverse of any of the marked options above.
+.TP
+.BI \-\-silent
+Silence error output.
+.TP
+.BI \-h,\ \-\-help
+Display help information.
+
+.SH CONFIGURATION
+For configuring and running programmatically.
+
+.B Example
+
+ require('marked')('*foo*', { gfm: true });
+
+.SH BUGS
+Please report any bugs to https://github.com/chjj/marked.
+
+.SH LICENSE
+Copyright (c) 2011-2014, Christopher Jeffrey (MIT License).
+
+.SH "SEE ALSO"
+.BR markdown(1),
+.BR node.js(1)
diff --git a/js/vendor/marked/marked.min.js b/js/vendor/marked/marked.min.js
new file mode 100644
index 00000000..a5164c4d
--- /dev/null
+++ b/js/vendor/marked/marked.min.js
@@ -0,0 +1,6 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/chjj/marked
+ */
+(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].split(/ *\| */)}this.tokens.push(item);continue}if(cap=this.rules.lheading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[2]==="="?1:2,text:cap[1]});continue}if(cap=this.rules.hr.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"hr"});continue}if(cap=this.rules.blockquote.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"blockquote_start"});cap=cap[0].replace(/^ *> ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i<l;i++){item=cap[i];space=item.length;item=item.replace(/^ *([*+-]|\d+\.) +/,"");if(~item.indexOf("\n ")){space-=item.length;item=!this.options.pedantic?item.replace(new RegExp("^ {1,"+space+"}","gm"),""):item.replace(/^ {1,4}/gm,"")}if(this.options.smartLists&&i!==l-1){b=block.bullet.exec(cap[i+1])[0];if(bull!==b&&!(bull.length>1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:cap[1]==="pre"||cap[1]==="script"||cap[1]==="style",text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */)}this.tokens.push(item);continue}if(top&&(cap=this.rules.paragraph.exec(src))){src=src.substring(cap[0].length);this.tokens.push({type:"paragraph",text:cap[1].charAt(cap[1].length-1)==="\n"?cap[1].slice(0,-1):cap[1]});continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"text",text:cap[0]});continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return this.tokens};var inline={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};inline._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;inline._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^<a /i.test(cap[0])){this.inLink=true}else if(this.inLink&&/^<\/a>/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(this.smartypants(cap[0]));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,"—").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){var out="",l=text.length,i=0,ch;for(;i<l;i++){ch=text.charCodeAt(i);if(Math.random()>.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"<pre><code>"+(escaped?code:escape(code,true))+"\n</code></pre>"}return'<pre><code class="'+this.options.langPrefix+escape(lang,true)+'">'+(escaped?code:escape(code,true))+"\n</code></pre>\n"};Renderer.prototype.blockquote=function(quote){return"<blockquote>\n"+quote+"</blockquote>\n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"<h"+level+' id="'+this.options.headerPrefix+raw.toLowerCase().replace(/[^\w]+/g,"-")+'">'+text+"</h"+level+">\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"</"+type+">\n"};Renderer.prototype.listitem=function(text){return"<li>"+text+"</li>\n"};Renderer.prototype.paragraph=function(text){return"<p>"+text+"</p>\n"};Renderer.prototype.table=function(header,body){return"<table>\n"+"<thead>\n"+header+"</thead>\n"+"<tbody>\n"+body+"</tbody>\n"+"</table>\n"};Renderer.prototype.tablerow=function(content){return"<tr>\n"+content+"</tr>\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"</"+type+">\n"};Renderer.prototype.strong=function(text){return"<strong>"+text+"</strong>"};Renderer.prototype.em=function(text){return"<em>"+text+"</em>"};Renderer.prototype.codespan=function(text){return"<code>"+text+"</code>"};Renderer.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"};Renderer.prototype.del=function(text){return"<del>"+text+"</del>"};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0){return""}}var out='<a href="'+href+'"';if(title){out+=' title="'+title+'"'}out+=">"+text+"</a>";return out};Renderer.prototype.image=function(href,title,text){var out='<img src="'+href+'" alt="'+text+'"';if(title){out+=' title="'+title+'"'}out+=this.options.xhtml?"/>":">";return out};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i<this.token.header.length;i++){flags={header:true,align:this.token.align[i]};cell+=this.renderer.tablecell(this.inline.output(this.token.header[i]),{header:true,align:this.token.align[i]})}header+=this.renderer.tablerow(cell);for(i=0;i<this.token.cells.length;i++){row=this.token.cells[i];cell="";for(j=0;j<row.length;j++){cell+=this.renderer.tablecell(this.inline.output(row[j]),{header:false,align:this.token.align[j]})}body+=this.renderer.tablerow(cell)}return this.renderer.table(header,body)}case"blockquote_start":{var body="";while(this.next().type!=="blockquote_end"){body+=this.tok()}return this.renderer.blockquote(body)}case"list_start":{var body="",ordered=this.token.ordered;while(this.next().type!=="list_end"){body+=this.tok()}return this.renderer.list(body,ordered)}case"list_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.token.type==="text"?this.parseText():this.tok()}return this.renderer.listitem(body)}case"loose_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.tok()}return this.renderer.listitem(body)}case"html":{var html=!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;return this.renderer.html(html)}case"paragraph":{return this.renderer.paragraph(this.inline.output(this.token.text))}case"text":{return this.renderer.paragraph(this.parseText())}}};function escape(html,encode){return html.replace(!encode?/&(?!#?\w+;)/g:/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;i<arguments.length;i++){target=arguments[i];for(key in target){if(Object.prototype.hasOwnProperty.call(target,key)){obj[key]=target[key]}}}return obj}function marked(src,opt,callback){if(callback||typeof opt==="function"){if(!callback){callback=opt;opt=null}opt=merge({},marked.defaults,opt||{});var highlight=opt.highlight,tokens,pending,i=0;try{tokens=Lexer.lex(src,opt)}catch(e){return callback(e)}pending=tokens.length;var done=function(err){if(err){opt.highlight=highlight;return callback(err)}var out;try{out=Parser.parse(tokens,opt)}catch(e){err=e}opt.highlight=highlight;return err?callback(err):callback(null,out)};if(!highlight||highlight.length<3){return done()}delete opt.highlight;if(!pending)return done();for(;i<tokens.length;i++){(function(token){if(token.type!=="code"){return--pending||done()}return highlight(token.text,token.lang,function(err,code){if(err)return done(err);if(code==null||code===token.text){return--pending||done()}token.text=code;token.escaped=true;--pending||done()})})(tokens[i])}return}try{if(opt)opt=merge({},marked.defaults,opt);return Parser.parse(Lexer.lex(src,opt),opt)}catch(e){e.message+="\nPlease report this to https://github.com/chjj/marked.";if((opt||marked.defaults).silent){return"<p>An error occured:</p><pre>"+escape(e.message+"",true)+"</pre>"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); \ No newline at end of file
diff --git a/js/vendor/marked/package.json b/js/vendor/marked/package.json
new file mode 100644
index 00000000..eb1e28db
--- /dev/null
+++ b/js/vendor/marked/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "marked",
+ "description": "A markdown parser built for speed",
+ "author": "Christopher Jeffrey",
+ "version": "0.3.3",
+ "main": "./lib/marked.js",
+ "bin": "./bin/marked",
+ "man": "./man/marked.1",
+ "preferGlobal": true,
+ "repository": "git://github.com/chjj/marked.git",
+ "homepage": "https://github.com/chjj/marked",
+ "bugs": { "url": "http://github.com/chjj/marked/issues" },
+ "license": "MIT",
+ "keywords": ["markdown", "markup", "html"],
+ "tags": ["markdown", "markup", "html"],
+ "devDependencies": {
+ "markdown": "*",
+ "showdown": "*",
+ "robotskirt": "*"
+ },
+ "scripts": { "test": "node test", "bench": "node test --bench" }
+}