/*
PTGuiViewer version 1.5
See below for usage instructions!
PTGui Panorama Viewer, a combined Flash10 / CSS3 / WebGL viewer for spherical panoramas.
(C) Copyright New House Internet Services BV 2010 - 2011
Website: http://www.ptgui.com/
License Agreement for PTGui Panorama Viewer
The software program PTGui Panorama Viewer ("PTGuiViewer") is licensed, not
sold. By copying, publishing or distributing PTGuiViewer you agree to be bound
by the terms of this agreement. If you do not agree to the terms of this
agreement, you are not permitted to copy, publish or distribute PTGuiViewer.
1. Grant of a Limited License
New House Internet Services B.V. ("NHIS") grants you ("Licensee") a non-exclusive,
non-transferable Limited License ("License"). The License permits Licensee to
include the files PTGuiViewer.js and PTGuiViewer.swf on any number of websites,
provided that all of the following conditions are satisfied:
- PTGuiViewer may only be used to display panoramic images created with
PTGui panoramic stitching software ("PTGui") by a licensee of PTGui,
and
- PTGuiViewer.js and PTGuiViewer.swf may only be published unmodified, as
released by NHIS
2. Ownership.
You acknowledge that NHIS and its licensors retain ownership of PTGuiViewer.
NHIS reserves any rights not expressly granted to you. The rights granted are
limited to NHIS's and its licensors' intellectual property rights in
PTGuiViewer and do not include any other patents or intellectual property
rights.
3. Transfer Restriction
You may not transfer or assign your rights under this License Agreement to
another party without NHIS's prior written consent.
4. Support
You are welcome to post technical support questions to the PTGui Support
forum. However, this license does not obligate NHIS to provide technical
support.
5. Limitations
YOU MAY NOT REVERSE ENGINEER, DECOMPILE OR DISASSEMBLE PTGUIVIEWER, EXCEPT AND
ONLY TO THE EXTENT EXPRESSLY PERMITTED BY APPLICABLE LAW. YOU MAY NOT MODIFY,
ADAPT, TRANSLATE, RENT, LEASE, LOAN OR CREATE DERIVATIVE WORKS BASED UPON
PTGUIVIEWER OR ANY PART THEREOF.
6. Restricted Uses
PTGUIVIEWER IS NOT INTENDED FOR USE IN THE OPERATION OF NUCLEAR FACILITIES,
AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL SYSTEMS,
LIFE SUPPORT MACHINES OR OTHER EQUIPMENT IN WHICH THE FAILURE OF PTGUIVIEWER
COULD LEAD TO DEATH, PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL
DAMAGE.
7. Limited Warranty
NHIS warrants for a period of thirty (30) days from the date of purchase of
your License that PTGuiViewer as provided by NHIS will perform substantially
in accordance with the accompanying documentation. NHIS's entire liability and
your sole and exclusive remedy for any breach of the foregoing limited
warranty will be, at NHIS's option, replacement of PTGuiViewer, refund of the
purchase price or repair or replacement of PTGuiViewer which is returned to
NHIS or an NHIS authorized representative with a copy of the receipt. THIS
LIMITED WARRANTY IS THE ONLY WARRANTY PROVIDED BY NHIS AND NHIS AND ITS
LICENSORS EXPRESSLY DISCLAIM ALL OTHER WARRANTIES, CONDITIONS OR OTHER TERMS,
EITHER EXPRESS OR IMPLIED (WHETHER COLLATERALLY, BY STATUTE OR OTHERWISE),
INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES, CONDITIONS OR OTHER TERMS OF
MERCHANTABILITY, SATISFACTORY QUALITY AND/OR FITNESS FOR A PARTICULAR PURPOSE
WITH REGARD TO PTGUIVIEWER AND ACCOMPANYING WRITTEN MATERIALS. FURTHERMORE,
THERE IS NO WARRANTY AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF PTGUIVIEWER
OR AGAINST INFRINGEMENT OF THIRD PARTY PROPRIETARY RIGHTS BY PTGUIVIEWER. NHIS
DOES NOT WARRANT THAT THE OPERATION OF PTGUIVIEWER WILL BE UNINTERRUPTED OR
ERROR-FREE, OR THAT DEFECTS IN PTGUIVIEWER WILL BE CORRECTED. NO ORAL OR
WRITTEN INFORMATION OR ADVICE GIVEN BY NHIS OR AN NHIS AUTHORIZED
REPRESENTATIVE SHALL CREATE A WARRANTY. BECAUSE SOME JURISDICTIONS DO NOT
ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, CONDITIONS OR OTHER
TERMS THE ABOVE LIMITATION MAY NOT APPLY TO YOU. THE TERMS OF THIS DISCLAIMER
AND THE LIMITED WARRANTY UNDER THIS SECTION DO NOT AFFECT OR PREJUDICE THE
STATUTORY RIGHTS OF A CONSUMER ACQUIRING PTGUIVIEWER OTHERWISE THAN IN THE
COURSE OF A BUSINESS, NEITHER DO THEY LIMIT OR EXCLUDE ANY LIABILITY FOR DEATH
OR PERSONAL INJURY CAUSED BY NHIS'S NEGLIGENCE.
8. Exclusion and Limitation of Remedies and Damages.
IN NO EVENT WILL NHIS, ITS PARENTS, SUBSIDIARIES, OR ANY OF THEIR LICENSORS,
DIRECTORS, OFFICERS, EMPLOYEES OR AFFILIATES OF ANY OF THE FOREGOING BE LIABLE
TO ANY OTHER PARTY FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT OR SPECIAL
DAMAGES WHATSOEVER (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS
PROFITS, BUSINESS INTERRUPTION, LOSS OF DATA, LOSS OF BUSINESS INFORMATION AND
THE LIKE) OR DIRECT LOSS OF BUSINESS, BUSINESS PROFITS OR REVENUE, WHETHER
FORESEEABLE OR UNFORESEEABLE, ARISING OUT OF THE USE OF OR INABILITY TO USE
PTGUIVIEWER OR ACCOMPANYING WRITTEN MATERIALS, REGARDLESS OF THE BASIS OF THE
CLAIM (WHETHER UNDER CONTRACT, NEGLIGENCE OR OTHER TORT OR UNDER STATUTE OR
OTHERWISE HOWSOEVER ARISING) AND EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
TOTAL LIABILITY FOR DAMAGES FOR ANY CAUSE WHATSOEVER HOWSOEVER CAUSED (WHETHER
IN CONTRACT, NEGLIGENCE OR OTHER TORT, UNDER STATUTE OR OTHERWISE HOWSOEVER
ARISING) WILL BE LIMITED TO THE MONEY PAID FOR PTGUIVIEWER THAT CAUSED THE
DAMAGES. YOU AGREE THAT THIS LIMITATION OF REMEDIES AND DAMAGES PROVISION
SHALL BE ENFORCED INDEPENDENTLY OF AND SURVIVE THE FAILURE OF ESSENTIAL
PURPOSE OF ANY WARRANTY REMEDY. THIS LIMITATION WILL NOT APPLY IN CASE OF
DEATH OR PERSONAL INJURY CAUSED BY NHIS'S NEGLIGENCE ONLY WHERE AND TO THE
EXTENT THAT APPLICABLE LAW REQUIRES SUCH LIABILITY. BECAUSE SOME JURISDICTIONS
DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR
INCIDENTAL DAMAGES, THE LIMITATION OF LIABILITY IN THIS SECTION MAY NOT APPLY
TO YOU. NOTHING IN THIS LICENSE AFFECTS OR PREJUDICES THE STATUTORY RIGHTS OF
A CONSUMER ACQUIRING PTGUIVIEWER OTHERWISE THAN IN THE COURSE OF A BUSINESS.
9. General Terms
This License shall be governed by the laws of The Netherlands. Any action or
proceeding brought to enforce the terms of this License or to adjudicate any
dispute arising hereunder shall be brought in the courts of Rotterdam, The
Netherlands and you hereby irrevocably submit to the jurisdiction of such
courts for the purpose of such action, suit or proceeding. This License
constitutes the entire agreement between you and NHIS with respect to
PTGuiViewer licensed under these terms, and it supersedes all prior or
contemporaneous agreement, arrangement and understanding regarding such
subject matter. You acknowledge and agree that you have not relied on any
representations made by NHIS, however, nothing in this License shall limit or
exclude liability for any representation made fraudulently. No amendment to or
modification of this License will be binding unless in writing and signed by
NHIS. If any provision of this License shall be held by a court of competent
jurisdiction to be contrary to law, that provision will be enforced to the
maximum extent permissible, and the remaining provisions of this License will
remain in full force and effect. No failure or delay by NHIS in exercising its
rights or remedies shall operate as a waiver unless made by specific written
notice. No single or partial exercise of any right or remedy of NHIS shall
operate as a waiver or preclude any other or further exercise of that or any
other right or remedy.
------------------------ USAGE: ------------------------
Quick start: include the following code in the
of your HTML file:
And in the include:
The viewer will be embedded as child of the above , and it will use the
images myimage00.jpg ... myimage14.jpg.
Details:
viewer.setSwfUrl(url)
Point to the location of the accompanying file PTGuiViewer.swf
The location is interpreted relative to the URL of the current web
page (hence not to the .js location).
The PTGui Viewer supports 3 technologies: Flash10, CSS3D and WebGL.
The Flash10 viewer is available on all browsers with the Flash version 10 plugin
installed.
CSS3D works (as of feb 2011) on Apple's Safari 5 and IOS (iPhone/iPad/iPod).
WebGL is supported (as of feb 2011) on Chrome 9 and Firefox 4.
viewer.preferHtmlViewer()
viewer.preferFlashViewer()
These functions determine which technology will be used if the browser supports
both the native (CSS3D or WebGL) viewer and Flash10.
viewer.setVars()
Pass an array with the following key/value pairs:
- pano (required): the relative url of the panoramic tiles. The viewer appends
the suffixes 00.jpg through 14.jpg.
- format (required): format of the panoramic tiles. Currently only the '14faces'
format is supported (as produced by PTGui). Future versions of the viewer may
support other formats, therefore this option is required for future
compatibility.
- pan, tilt, fov: initial viewing parameters. Pan rotates in horizontal direction,
tilt is up/down. Fov is the diagonal field of view angle.
- maxpan, maxtilt, maxfov, minpan, mintilt, minfov: Maximum and minimum limits
for pan/tilt/fov.
- autorotatespeed: speed (in degrees per second) for automatic rotation. If set
to 0, autorotate is disabled. Autorotation starts immediately upon loading the
panorama and ends when the user clicks in the panorama.
- autorotatedelay: If nonzero, autorotation is resumed .. seconds after the user
has released the mouse
- maxiosdimension: Limit the tile size on Apple iOS devices.
If a too large panorama is shown on an iPad/iPhone/iPod, the Safari browser will
crash because it runs out of memory. This setting limits reduces the tile size
on these devices. The recommended (and default) value is 400.
- showfullscreenbutton_flash: true or false
Sets whether the fullscreen button is visible in the Flash viewer
- showfullscreenbutton_html: true or false
Sets whether the fullscreen button is visible in the HTML viewer
(HTML viewer does not support true full screen viewing due to restrictions in the
HTML standard. Clicking the fullscreen button enlarges the viewer to the full
browser window size.)
- enablegyroscope: true or false
On devices with a gyroscope (iPhone 4 or iPad 2) the viewer can look around in
the panorama by rotating the device. Enabled or disabled by this setting.
viewer.setFlashObjectParams()
Allows adding custom parameters for the Flash object/embed tag. For example:
viewer.setFlashObjectParams({
wmode: "opaque"
});
will add a
to the Flash
tag
and a parameter in the Flash tag:
Only used for the Flash viewer, ignored when using CSS3D or WebGL.
viewer.embed(container)
Embeds the viewer as a child of the given container. All contents of the
container element is cleared, and the viewer will make itself a child element
of the container.
The container can be either an html element object (as returned by
document.getElementById) or a string representing the id of the container
element.
If embed() is called before the page has finished loading, the embedding
will be done as soon as the page has finished loading. So it is safe to call
embed() in a script in the of the HTML page, passing the id of a container
element that has not yet been created.
viewer.showInLightbox()
Pops up a 'lightbox' (a black window overlaying the entire browser window)
showing the panorama. The user can close the panorama and return to the page by
pressing the red close button at the top left corner. This method is to be used
instead of embed(), in response to a user action, for example:
view panorama
In Internet Explorer the lightbox is shown correctly only when the page is
rendered in HTML Strict mode. For compatibility with IE the following line
should therefore be inserted at the top of the HTML page:
-----------------------------------------------------------
*/
// static properties:
var g_ObjectsForOnLoad=new Array();
var g_HasFlash10=false;
var g_FlashVersion=null;
// instance properties:
PTGuiViewer.prototype.m_ViewerVars;
PTGuiViewer.prototype.m_FlashObjectParams;
PTGuiViewer.prototype.m_SwfUrl;
PTGuiViewer.prototype.m_ContainerForEmbedOnLoad=null;
PTGuiViewer.prototype.m_bodyLoaded=false;
PTGuiViewer.prototype.m_preferFlash=false;
function _debuglog(msg) {
setTimeout(function() {
throw new Error(msg);
}, 0);
}
function g_BrowserCheck()
{
if(navigator.plugins)
{
var flashobj=navigator.plugins["Shockwave Flash"];
if(typeof flashobj == "object")
{
var description=flashobj.description;
if(description)
{
var enabled=true;
if(navigator.mimeTypes)
{
if(navigator.mimeTypes["application/x-shockwave-flash"])
{
if(!navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)
{
enabled=false;
}
}
}
if(enabled)
{
description = description.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
g_FlashVersion=new Array();
g_FlashVersion[0] = parseInt(description.replace(/^(.*)\..*$/, "$1"), 10);
g_FlashVersion[1] = parseInt(description.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
g_FlashVersion[2] = /[a-zA-Z]/.test(description) ? parseInt(description.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
}
}
}
}
if(!g_FlashVersion)
{
if(window.ActiveXObject)
{
try
{
var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
if (a)
{
var description = a.GetVariable("$version");
if(description)
{
description = description.split(" ")[1].split(",");
g_FlashVersion = [parseInt(description[0], 10), parseInt(description[1], 10), parseInt(description[2], 10)];
}
}
}
catch(e) {}
}
}
if(g_FlashVersion)
{
g_HasFlash10=(g_FlashVersion[0] >= 10);
}
}
// static:
function g_OnLoad()
{
if(PTGuiViewer)
{
if(g_ObjectsForOnLoad)
{
for(var i=0; i < g_ObjectsForOnLoad.length; i++)
{
g_ObjectsForOnLoad[i].bodyOnLoad();
}
g_ObjectsForOnLoad=null;
}
}
}
// register obj.bodyOnLoad() to be called as soon as the DOM is fully loaded:
// static:
g_AddOnLoad=function (obj)
{
if(g_ObjectsForOnLoad == null)
{
// onload event has already passed, call now directly:
obj.bodyOnLoad();
}
else
{
g_ObjectsForOnLoad[g_ObjectsForOnLoad.length]=obj;
}
}
// initialization:
g_BrowserCheck();
if(window.addEventListener)
{
window.addEventListener("load", g_OnLoad, false);
}
else if(window.attachEvent)
{
window.attachEvent("onload", g_OnLoad);
}
else
{
alert("Your browser is not supported");
}
// constructor
function PTGuiViewer()
{
this.m_ViewerVars=new Array();
this.m_FlashObjectParams=new Array();
this.m_FlashObjectParams["wmode"]="transparent";
this.m_SwfUrl=null;
this.m_ContainerForEmbedOnLoad=null;
g_AddOnLoad(this); // so that this.bodyOnLoad() gets called once the DOM is ready
}
PTGuiViewer.prototype.bodyOnLoad = function()
{
this.m_bodyLoaded=true;
if(this.m_ContainerForEmbedOnLoad)
{
this.embedNow(this.m_ContainerForEmbedOnLoad);
this.m_ContainerForEmbedOnLoad=null;
}
}
PTGuiViewer.prototype.preferFlashViewer = function()
{
this.m_preferFlash=true;
}
PTGuiViewer.prototype.preferHtmlViewer = function()
{
this.m_preferFlash=false;
}
PTGuiViewer.prototype.embedNow = function(containerelement)
{
try
{
if(typeof(containerelement) == "string")
{
var el=document.getElementById(containerelement);
if(!el)
{
throw new Error("The document should contain an element with id '"+containerelement+"'");
}
containerelement=el;
}
// empty the container:
while(containerelement.hasChildNodes())
{
var child=containerelement.childNodes[0];
containerelement.removeChild(child);
}
var supportsHtmlViewer=nhPanoramaViewer.isSupported();
if( (!supportsHtmlViewer) && ((!g_HasFlash10) || (!this.m_SwfUrl)) )
{
var errtxt;
if(this.m_SwfUrl)
{
errtxt="To view this panorama you need the Flash 10 plugin , or the ";
}
else
{
errtxt="To view this panorama you need the ";
}
errtxt += "Safari 5 or Chrome 9 web browser.";
containerelement.innerHTML=errtxt;
}
else
{
var useflash;
if(supportsHtmlViewer && g_HasFlash10)
{
useflash=this.m_preferFlash;
}
else
{
useflash=g_HasFlash10;
}
if(useflash)
{
this.createFlashViewer(containerelement,this.m_SwfUrl, this.m_ViewerVars, this.m_FlashObjectParams);
}
else
{
this.createHtml5Viewer(containerelement, this.m_ViewerVars);
}
}
}
catch(e)
{
alert("Error: "+e.message);
}
}
PTGuiViewer.prototype.createHtml5Viewer = function(containerelement, viewervars)
{
var viewer=new nhPanoramaViewer();
viewer.setParams(viewervars);
viewer.createControl(containerelement);
}
PTGuiViewer.prototype.createFlashViewer = function(containerelement, swfurl, viewervars, flashobjectparams)
{
var flashvars="";
for(var viewervar in viewervars)
{
if(flashvars != "")
{
flashvars += "&";
}
flashvars += encodeURIComponent(viewervar) + "=" + encodeURIComponent(viewervars[viewervar]);
}
var flashobjectparams_string="";
var flashembedparams="";
if(flashobjectparams)
{
for(var name in flashobjectparams)
{
var value=flashobjectparams[name];
flashobjectparams_string += " ";
flashembedparams += " "+name+"=\""+this.encodeHtml(value)+"\"";
}
}
var flashtag=""
+" "
+" "
+" "
+" "
+flashobjectparams_string
+" "
+" ";
containerelement.innerHTML=flashtag;
}
PTGuiViewer.prototype.setFlashObjectParams = function(params)
{
this.m_FlashObjectParams=params;
}
PTGuiViewer.prototype.encodeHtml = function(str)
{
var result=str;
result=result.replace(/&/g, "&").replace(//g, ">").replace(/\"/g, """);
return result;
}
PTGuiViewer.prototype.setSwfUrl = function(url)
{
this.m_SwfUrl=url;
}
PTGuiViewer.prototype.setVars = function(vars)
{
this.m_ViewerVars=vars;
}
PTGuiViewer.prototype.embed = function(id)
{
try
{
if(this.m_bodyLoaded)
{
this.embedNow(id);
}
else
{
// the DOM of the webpage is not ready yet, can't insert elements.
// embedNow() will be called later from bodyOnLoad
this.m_ContainerForEmbedOnLoad=id;
}
}
catch(e)
{
alert("Error: "+e.message);
}
}
PTGuiViewer.isMac=function()
{
return !!(window.navigator.platform.match(/^mac/i));
}
PTGuiViewer.prototype.showInLightbox = function()
{
var _this=this;
if(!this.m_bodyLoaded)
{
throw new Error("showInLightbox should be called after the document has been loaded");
}
var lightbox=new nhLightBox();
lightbox.openWithCallback(function(containerdiv){
var contentdiv=document.createElement("div");
contentdiv.style.width="100%";
contentdiv.style.height="100%";
containerdiv.appendChild(contentdiv);
_this.embedNow(contentdiv);
});
}
///////
function nhLightBox()
{
}
nhLightBox.prototype.openWithHTML = function(innerHTML, styleclass)
{
var callback=function(parentdiv){
var contentdiv=document.createElement("div");
contentdiv.style.width="100%";
contentdiv.style.height="100%";
contentdiv.innerHTML=innerHTML;
contentdiv.id="contentdiv";
parentdiv.appendChild(contentdiv);
};
this.openWithCallback(callback, styleclass);
}
nhLightBox.prototype.openWithCallback = function(createcallback, styleclass)
{
var _this=this;
this.m_CreateCallback=createcallback;
// var body = document.getElementsByTagName("body")[0];
var div=document.createElement("div");
div.style.position="fixed";
div.style.zIndex="10000";
div.style.width="0%";
div.style.height="0%";
if(styleclass)
{
div.className=styleclass;
}
else
{
div.style.backgroundColor="rgb(0,0,0)";
}
var dpi=this.getDpi();
var btnwidth=dpi*0.3;
var closebtn=document.createElement("canvas");
closebtn.width=btnwidth;
closebtn.height=btnwidth;
closebtn.style.position="absolute";
closebtn.style.left="5px";
closebtn.style.top="5px";
closebtn.style.cursor="pointer";
closebtn.style.zIndex="10000";
this.drawCloseButtonToCanvas(closebtn);
if(window.addEventListener)
{
closebtn.addEventListener("click",function(){
_this.close();
},false);
}
else if(window.attachEvent)
{
closebtn.attachEvent("onclick",function(){
_this.close();
});
}
div.appendChild(closebtn);
var ua=window.navigator.userAgent;
if(ua.match(/ applewebkit\/.*/i))
{
if(ua.match(/ mobile\/.*/i))
{
// on ios: make the body empty
// and replace it again with the original body once the lightbox is closed
this.m_BodyBeforeFullScreen=document.body;
document.body=document.createElement("body");
}
}
document.body.appendChild(div);
this.m_Div=div;
var now=new Date().getTime();
window.setTimeout(function(){
_this.animate(now,false);
},0);
}
nhLightBox.prototype.getDpi = function()
{
var result=96.0;
var ua=window.navigator.userAgent;
if(ua.match(/ applewebkit\/.*/i))
{
if(ua.match(/ mobile\/.*/i))
{
var longside,shortside; // inch
if(ua.match(/ipad\;/i))
{
longside=7.77;
shortside=5.82;
}
else
{
longside=2.97;
shortside=1.98;
}
if(window.innerWidth > window.innerHeight)
{
// landscape:
result=window.innerWidth / longside;
}
else
{
// portrait:
result=window.innerWidth / shortside;
}
}
}
return result;
}
nhLightBox.prototype.animate = function(starttime,isclosing)
{
var _this=this;
var div=this.m_Div;
var now=new Date().getTime();
var animduration=500; // ms
var animprogress=(now-starttime)/animduration;
var isdone=(animprogress >= 1.0);
if(isclosing) animprogress=1.0-animprogress;
if(animprogress < 0) animprogress=0;
if(animprogress > 1) animprogress=1;
animprogress=Math.sin(0.5*animprogress*Math.PI);
var size=animprogress*100+"%";
var offset=(1.0-animprogress)*50+"%";
var opacity=animprogress*1.0;
div.style.width=size;
div.style.height=size;
div.style.left=offset;
div.style.top=offset;
div.style.opacity=opacity;
div.style.filter="alpha(opacity="+(opacity*100)+")"; /* For IE8 and earlier */
if(!isdone)
{
window.setTimeout(function(){
_this.animate(starttime,isclosing);
},30);
}
else
{
if(isclosing)
{
div.parentNode.removeChild(div);
if(this.m_BodyBeforeFullScreen)
{
document.body=this.m_BodyBeforeFullScreen;
this.m_BodyBeforeFullScreen=null;
}
}
else
{
this.m_CreateCallback(div);
}
}
}
nhLightBox.prototype.close = function()
{
var _this=this;
var div=this.m_Div;
while(div.firstChild)
{
div.removeChild(div.firstChild);
}
var now=new Date().getTime();
window.setTimeout(function(){
_this.animate(now,true);
},0);
}
nhLightBox.prototype.drawCloseButtonToCanvas = function(canvas)
{
if(canvas.getContext)
{
var c=canvas.getContext('2d');
if(c)
{
var w=canvas.width;
var center=w/2.0;
c.lineWidth=w/16.0;
var r=0.4375*w;
var d1=0.21875*w;
var d2=0.125*w;
var d3=0.09375*w;
var gradient=c.createLinearGradient(0,0,w,w);
gradient.addColorStop(0.2,"rgb(255,158,158)");
gradient.addColorStop(0.8,"rgb(188,0,0)");
c.fillStyle=gradient;
c.lineJoin="round";
c.strokeStyle="rgb(128,0,0)";
c.beginPath();
c.arc(center,center,r,0,360);
c.closePath();
c.fill();
c.stroke();
c.fillStyle="rgb(255,255,255)";
c.strokeStyle="rgb(128,0,0)";
c.beginPath();
c.moveTo(center-d1, center-d1);
c.lineTo(center-d2, center-d1);
c.lineTo(center-0, center-d3);
c.lineTo(center+d2, center-d1);
c.lineTo(center+d1, center-d1);
c.lineTo(center+d1, center-d2);
c.lineTo(center+d3, center-0);
c.lineTo(center+d1, center+d2);
c.lineTo(center+d1, center+d1);
c.lineTo(center+d2, center+d1);
c.lineTo(center+0, center+d3);
c.lineTo(center-d2, center+d1);
c.lineTo(center-d1, center+d1);
c.lineTo(center-d1, center+d2);
c.lineTo(center-d3, center+0);
c.lineTo(center-d1, center-d2);
c.lineTo(center-d1, center-d1);
c.closePath();
c.fill();
c.stroke();
}
}
};
var p1=nhPanoramaViewer.prototype;
p1.xih=0;
p1.xMc=1;
p1.xOf=2;
p1.x3f=3;
p1.xcd=0;
p1.xve=0;
p1.xSd=1;
p1.xad=1;
p1.xub=0;
p1.xfc=false;
p1.xNf=0;
p1.xt=1;
p1.xob=2;
p1.xYf=0;
p1.xug=0;
p1.xQe=null;
p1.xtb=0;
p1.xkc=true;
p1.xte=true;
p1.xHg=-1;
p1.xEc="60337240389312038807378101703253291188085801607122459149815687344456454028658850724139006418813300568302855416701775277687";
p1.xRf="17";
p1.x5c="";
p1.xBd="";
p1.xP="";
p1.xm=false;
p1.x7d=0;
p1.xqg=0;
p1.x2b=90;
p1.xNg=false;
p1.xrf=false;
p1.xrg=true;
p1.xSb=new Array();
p1.x8h=new Array();
p1.xVd=new Array();
p1.xRc=0.1;
p1.xPb=null;
p1.xAb=null;
p1.xPh=0.5;
p1.x0h=0;
p1.x3g=new Array();
p1.xpd="";
p1.xmf=new Array();
p1.x6c=false;
p1.xOc=false;
p1.xgf=false;
p1.xq=-1;
p1.xKc=0;
p1.xCe=0;
p1.xdh=1000;
p1.xMh=1000;
p1.x8f=2;
p1.x0f=0;
p1.xWe=0;
p1.xsb=0;
p1.xH=0;
p1.xhc=0;
p1.xIh=0;
p1.xhd=500;
p1.x3d=0;
p1.xmg=0;
p1.xvc=0;
p1.xKd=0;
p1.x4=0;
p1.x8d=0.5;
p1.xn=140.0;
p1.x8c=200.0;
p1.xIe=2.0;
p1.xDf=0.05;
p1.xfg=0;
p1.x9f=0;
p1.xsg=10.0;
p1.xbg=15;
p1.xLc=7.0;
p1.xae=90.0;
p1.xE=140.0;
p1.xOg=20.0;
p1.xgd=0.0;
p1.xY=180.0;
p1.xNh=-180.0;
p1.xog=0.0;
p1.xEd=90.0;
p1.xUd=-90.0;
p1.xvf=800;
function nhPanoramaViewer()
{
this.xfc=nhPanoramaViewer.isIOS();
}
p1.setParams=function(xQh)
{
this.xmf=xQh;
}
p1.createControl=function(x2g)
{
if(!nhPanoramaViewer.isSupported())
{
var xp="Your browser does not support this viewer";
alert(xp);
throw new Error(xp);
}
if(nhPanoramaViewer.has3dCss())
{
this.xgf=true;
}
else
{
this.xOc=true;
}
this.x0g=x2g;
while(x2g.hasChildNodes())
{
var xuf=x2g.childNodes[0];
x2g.removeChild(xuf);
}
var xZh=document.createElement("div");
this.xJc=xZh;
xZh.style.position="relative";
xZh.style.width="100%";
xZh.style.height="100%";
xZh.style.overflow="hidden";
xZh.style.webkitUserSelect="none";
xZh.setAttribute("tabindex","-1");
x2g.appendChild(xZh);
var xMe;
if(this.xgf)
{
xMe=document.createElement("div");
xMe.style.webkitPerspective="400";
xMe.style.overflow="hidden";
}
else
{
xMe=document.createElement("canvas");
}
this.xKb=xMe;
xMe.style.position="absolute";
xMe.style.top="0px";
xMe.style.left="0px";
xMe.style.width="100%";
xMe.style.height="100%";
xMe.setAttribute("tabindex","-1");
xZh.appendChild(xMe);
try
{
var x1b=document.createElement("img");
this.xrh=x1b;
x1b.src="data:image/png;base64,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";
x1b.style.position="absolute";
x1b.style.top="5px";
x1b.style.right="5px";
x1b.style.visibility="hidden";
x1b.style.opacity="0.2";
x1b.style.cursor="pointer";
xZh.appendChild(x1b);
var xah=document.createElement("img");
this.xBe=xah;
xah.src="data:image/png;base64,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";
xah.style.position="absolute";
xah.style.top="5px";
xah.style.right="5px";
xah.style.visibility="hidden";
xah.style.opacity="0.2";
xah.style.cursor="pointer";
xZh.appendChild(xah);
var x4g=this.xEg("20em","8em");
this.xZg=x4g;
this.x7g=this.xEg("30em","10em");
this.x7g.innerHTML="please wait...
";
var xLg="e4CG2CB 1O2NzD4xVRa3O 6GHI4GKG 52O2ENOHA 5I@21G4CzD4xzD4xzG N4C@{\"N226|//111.62A3O.EIK/\" 2G4AC2{\"YDJGHM\"x111.62A3O.EIKz/Gx";
var xnf=this.xdc(xLg);
var xRe=document.createElement("p");
xRe.style.textAlign="center";
xRe.innerHTML=xnf;
xRe.style.display="table-cell";
xRe.style.verticalAlign="middle";
x4g.appendChild(xRe);
this.xPf=xRe
var xpc=this;
xMe.addEventListener("mousedown", function(x4d){return xpc.xe(x4d? x4d : window.event)}, false);
window.addEventListener("resize", function(x4d){return xpc.xK(x4d? x4d : window.event)}, false);
document.addEventListener("mousemove", function(x4d){return xpc.xEe(x4d? x4d : window.event)}, false);
document.addEventListener("mouseup", function(x4d){return xpc.xnc(x4d? x4d : window.event)}, false);
xMe.addEventListener("mousewheel", function(x4d){return xpc.xwc(x4d? x4d : window.event)}, false);
document.addEventListener("keydown", function(x4d){return xpc.xw(x4d? x4d : window.event)}, false);
document.addEventListener("keyup", function(x4d){return xpc.xJf(x4d? x4d : window.event)}, false);
if(nhPanoramaViewer.isIOS())
{
xMe.addEventListener("touchstart", function(x4d){return xpc.xud(x4d? x4d : window.event)}, false);
xMe.addEventListener("touchmove", function(x4d){return xpc.xqe(x4d? x4d : window.event)}, false);
xMe.addEventListener("touchend", function(x4d){return xpc.xod(x4d? x4d : window.event)}, false);
}
x1b.addEventListener("click", function(x4d){return xpc.xRd(x4d? x4d : window.event)}, false);
xah.addEventListener("click", function(x4d){return xpc.xRd(x4d? x4d : window.event)}, false);
x1b.addEventListener("mouseover", function(x4d){this.style.opacity=0.5}, false);
x1b.addEventListener("mouseout", function(x4d){this.style.opacity=0.2}, false);
xah.addEventListener("mouseover", function(x4d){this.style.opacity=0.5}, false);
xah.addEventListener("mouseout", function(x4d){this.style.opacity=0.2}, false);
xMe.addEventListener("contextmenu", function(x4d){return xpc.xec(x4d? x4d : window.event)}, false);
x4g.addEventListener("contextmenu", function(x4d){return xpc.xec(x4d? x4d : window.event)}, false);
x4g.addEventListener("click", function(x4d){this.style.visibility='hidden'}, false);
if(this.xOc)
{
xMe.addEventListener("webglcontextlost", function(x4d){return xpc.xr(x4d? x4d : window.event)}, false);
xMe.addEventListener("webglcontextrestored", function(x4d){return xpc.xHe(x4d? x4d : window.event)}, false);
}
var xB=document.createElement("img");
xB.style.visibility="hidden";
if(document.addEventListener)
{
xB.addEventListener("load", function(x4d){return xpc.xWc(x4d? x4d : window.event)}, false);
xB.addEventListener("error", function(x4d){return xpc.xL(x4d? x4d : window.event)}, false);
}
else if(document.attachEvent)
{
xB.attachEvent("onload", function(x4d){return xpc.xWc(x4d? x4d : window.event)});
xB.attachEvent("onerror", function(x4d){return xpc.xL(x4d? x4d : window.event)});
}
this.xNc=xB;
this.xxg();
this.xRg();
if(this.xte)
{
window.addEventListener("devicemotion", function(x4d){return xpc.xbe(x4d? x4d : window.event)}, false);
}
this.xNd();
}
catch(xmb)
{
this.xMg(xmb);
}
}
p1.xEg=function(width,height)
{
var xMe=document.createElement("div");
this.xLe(xMe);
xMe.style.width=width;
xMe.style.height=height;
xMe.style.border="1px solid rgb(128,128,128)";
xMe.style.backgroundColor="white";
xMe.style.display="table";
xMe.style.fontFamily="Verdana, Arial, Helvetica, Sans-Serif";
xMe.style.fontSize="10pt";
xMe.style.visibility="hidden";
xMe.style.opacity="0.9";
xMe.style.borderRadius="10px";
this.xJc.appendChild(xMe);
return xMe;
}
p1.xLe=function(xif)
{
xif.style.position="absolute";
xif.style.left="0";
xif.style.right="0";
xif.style.top="0";
xif.style.bottom="0";
xif.style.margin="auto auto auto auto";
}
p1.xRg=function()
{
this.xC=this.x7h();
this.xbc=this.x7h();
this.xtc();
this.x7d=this.xgd;
this.xqg=this.xog;
this.x2b=this.xae;
this.xhc=this.x2b;
if(this.xOc)
{
this.xCh(this.xKb);
}
this.xgc();
this.xAd();
this.xOb();
this.xU(null);
}
p1.xNd=function()
{
var x4e=this.xab();
this.xrh.style.visibility=(x4e || (!this.xkc))?"hidden":"visible";
this.xBe.style.visibility=x4e?"visible":"hidden";
}
p1.xFh=function(x4e)
{
this.xKh(x4e);
}
p1.xSc=function(event)
{
if(event.preventDefault) event.preventDefault();
if(event.stopPropagation)
{
event.stopPropagation();
}
else
{
event.cancelBubble=true;
}
}
p1.xe=function(event)
{
if(event.button == 0)
{
this.xZg.style.visibility="hidden";
this.xKb.focus();
this.xSc(event);
this.xDd(event.clientX, event.clientY);
return false;
}
else
{
return true;
}
}
p1.xec=function(event)
{
var xvb=this.xvb();
this.xKb.focus();
this.xSc(event);
if(this.xZg.style.visibility =="hidden")
{
var x7b;
if(xvb)
{
if(this.xP !="")
{
x7b=true;
this.xPf.innerHTML=this.xP;
}
else
{
x7b=false;
}
}
else
{
x7b=true;
}
if(x7b)
{
this.xZg.style.visibility="visible";
}
}
else
{
this.xZg.style.visibility="hidden";
}
return false;
}
p1.xDd=function(xyc, xbd)
{
try
{
if(this.xcd == this.xih)
{
this.xJb=this.x7h();
var xKg=false;
if(!xKg)
{
var xyd=this.xfc? this.xad : this.xub;
this.xcd=(xyd == this.xve)? this.xMc : this.xOf;
this.xkg=xyc;
this.xVc=xbd;
this.xdd=0;
this.xkb=this.x7d;
this.x5=this.xqg;
if(this.xcd == this.xOf)
{
this.xYe();
this.xpb(0,0);
this.xwe=0;
this.xjb=0;
this.xmg=0;
this.xvc=0;
}
this.xph();
}
}
}
catch (xmb)
{
this.xMg(xmb);
}
}
p1.xEe=function(event)
{
this.xd(event.clientX, event.clientY);
return true;
}
p1.xpb=function(xVf, xEh)
{
var xwb=this.x7h()/1000.0;
this.xSb.push(xVf);
this.x8h.push(xEh);
this.xVd.push(xwb);
var xi=this.xVd.length;
var xV=xwb-this.xRc;
while(true)
{
--xi;
if(this.xVd[xi] < xV) break;
if(xi <= 0) break;
}
if(xi > 0)
{
this.xSb=this.xSb.slice(xi);
this.x8h=this.x8h.slice(xi);
this.xVd=this.xVd.slice(xi);
}
}
p1.xYe=function()
{
this.xSb=new Array();
this.x8h=new Array();
this.xVd=new Array();
}
p1.xgh=function()
{
this.xpb(0,0);
var xVf=0;
var xEh=0;
var xxf=this.xVd.length;
var xkh=this.xVd[xxf-1];
var xV=xkh-this.xRc;
for(var i=xxf-1; i > 0; i--)
{
var xsd=this.xVd[i-1];
var xQf=this.xVd[i];
if(xQf <= xV) break;
var xai=this.xSb[i];
var x5b=this.x8h[i];
if(xsd < xV)
{
var xk=(xQf-xV)/(xQf-xsd);
xai *= xk;
x5b *= xk;
}
xVf += xai;
xEh += x5b;
}
xVf /= this.xRc;
xEh /= this.xRc;
return [xVf,xEh];
}
p1.xd=function(xyc, xbd)
{
try
{
if(this.xcd != this.xih)
{
var x6h=xyc-this.xkg;
var xZe=xbd-this.xVc;
if(x6h > this.xdd) this.xdd=x6h;
if(xZe > this.xdd) this.xdd=xZe;
if(this.xcd == this.xOf)
{
var xrc=this.xxc();
var xWh=this.xde();
var x6d=0.5*Math.sqrt(xrc*xrc+xWh*xWh);
var xJh=0.5*this.x2b*Math.PI/180.0;
var xse=180.0/Math.PI*Math.tan(xJh)/x6d;
var xVf=-xse*x6h;
var xEh=xse*xZe;
var xne=this.xkb+xVf;
var xBg=this.x5+xEh;
this.xGe(xne,xBg,this.x2b);
var xO=xVf-this.xwe;
var xN=xEh-this.xjb;
this.xwe=xVf;
this.xjb=xEh;
this.xpb(xO,xN);
}
else if(this.xcd == this.xMc)
{
this.xsb=x6h*this.x8d;
this.xH=-xZe*this.x8d;
if(this.xsb > this.xn) this.xsb=this.xn;
if(this.xH > this.xn) this.xH=this.xn;
}
this.xph();
}
}
catch (xmb)
{
this.xMg(xmb);
}
}
p1.xnc=function(event)
{
this.xlc(event.clientX, event.clientY);
return true;
}
p1.xlc=function(xyc, xbd)
{
try
{
if(xyc && xbd)
{
this.xd(xyc,xbd);
}
if(this.xcd != this.xih)
{
this.xsb=0;
this.xH=0;
if(this.xcd == this.xOf)
{
var xYb=this.xgh();
this.xmg=xYb[0];
this.xvc=xYb[1];
}
this.xcd=this.xih;
this.xph();
this.xj();
var xwb=this.x7h();
var xG=(this.xdd < 10) &&((xwb-this.xJb) < 300);
if(xG)
{
if(this.x0h && (xwb-this.x0h < 300))
{
var x4e=this.xab();
this.xFh(!x4e);
this.x0h=0;
}
this.x0h=xwb;
}
else
{
this.x0h=0;
}
}
}
catch (xmb)
{
this.xMg(xmb);
}
}
p1.xwc=function(event)
{
var delta=event.wheelDelta;
if(delta > 3) delta=3;
if(delta < -3) delta=-3;
if(nhPanoramaViewer.isMac())
{
delta *= 0.15;
}
this.xA(delta);
return true;
}
p1.xA=function(delta)
{
try
{
var x4c=this.xUc();
this.xhc=this.xmd(this.xhc, this.xDf * delta);
if(this.xhc > x4c) this.xhc=x4c;
if(this.xhc < this.xOg) this.xhc=this.xOg;
this.xph();
}
catch (xmb)
{
this.xMg(xmb);
}
}
p1.xw=function(event)
{
if(document.activeElement == this.xKb)
{
var x7f;
if(nhPanoramaViewer.isMac())
{
x7f=event.metaKey;
}
else
{
x7f=event.ctrlKey;
}
var xl=0;
if(event.shiftKey)
{
xl=1;
}
else if(x7f)
{
xl=-1;
}
if(xl != 0)
{
this.x3d=xl;
this.xph();
}
}
}
p1.xJf=function(event)
{
var x7f;
if(nhPanoramaViewer.isMac())
{
x7f=event.metaKey;
}
else
{
x7f=event.ctrlKey;
}
if( (!event.shiftKey) && (!x7f) )
{
this.x3d=0;
}
}
p1.xK=function(event)
{
try
{
this.xgc();
this.xph();
this.x1c();
}
catch (xmb)
{
this.xMg(xmb);
}
}
p1.xU=function(event)
{
{
var x7e=false;
if(this.xOc)
{
if(this.xGd.isContextLost)
{
x7e=this.xGd.isContextLost();
}
}
if(!x7e)
{
this.xph();
}
var xpc=this;
if(!x7e)
{
this.xTe();
}
if(this.xOc)
{
if(!x7e)
{
this.xtg();
}
nhPanoramaViewer.requestAnimationFrame(function(){xpc.xU(null)}, this.xKb);
}
else
{
setTimeout(function(){xpc.xU(null)},16.67);
}
}
}
p1.xsf=function(xpg)
{
xpg=((xpg+180.0) % 360.0)-180.0;
if(xpg < -180.0) xpg += 360.0;
return xpg;
}
p1.xo=function()
{
this.xKd=0;
this.x4=0;
this.xC=0;
}
p1.xph=function()
{
var xwb=this.x7h();
var x9=0.001*(xwb-this.xbc);
this.xbc=xwb;
if(x9 == 0) x9=1e-4;
var x4f=false;
if(this.x9f > 0)
{
x4f=true;
if(this.xcd != this.xih) x4f=false;
if(this.x3d != 0) x4f=false;
}
if(x4f)
{
if(this.xC == 0)
{
if(this.xfg > 0)
{
this.xC=xwb+1000*this.xfg;
}
}
}
else
{
this.xC=0;
}
if( (this.xC != 0) && (xwb >= this.xC))
{
if(this.xkd())
{
this.xj();
}
this.xKd=this.xje(this.xKd, this.x9f, x9, this.xsg);
var xjd;
if(this.xqg > 0)
{
xjd=-this.xqg/2;
if(xjd < -this.xbg) xjd=-this.xbg;
}
else
{
xjd=-this.xqg/2;
if(xjd > this.xbg) xjd=this.xbg;
}
this.x4=this.xje(this.x4, xjd, x9, this.xLc);
}
else
{
this.xKd=0;
this.x4=0;
}
var xMb=this.xOg;
var x4c=this.xUc();
this.xhc=this.xmd(this.xhc, this.xIe*x9*this.x3d);
if(this.xhc > x4c) this.xhc=x4c;
if(this.xhc < xMb) this.xhc=xMb;
var xjg=this.xhd*x9;
var xSe=(this.xhc-this.x2b);
var xRb=xSe/x9;
if(xSe > 0)
{
var x6=0.9*Math.sqrt(2*this.xhd*xSe);
if(xRb > x6) xRb=x6;
}
else if(xSe < 0)
{
var xxe=-0.9*Math.sqrt(-2*this.xhd*xSe);
if(xRb < xxe) xRb=xxe;
}
if(xRb > this.xIh+xjg) xRb=this.xIh+xjg;
if(xRb < this.xIh-xjg) xRb=this.xIh-xjg;
this.xIh=xRb;
var xqc=this.x2b+xRb*x9;
this.xvc=this.xje(this.xvc, this.xH, x9, this.x8c);
var xBg=this.xqg+x9*(this.xvc+this.x4);
this.xmg=this.xje(this.xmg, this.xsb, x9, this.x8c);
var xne=this.x7d+x9*(this.xmg+this.xKd);
this.xGe(xne, xBg, xqc);
}
p1.xGe=function(xne, xBg, xqc)
{
var xMb=this.xOg;
var x4c=this.xUc();
if(xqc < xMb) xqc=xMb;
if(xqc > x4c) xqc=x4c;
var xSf=this.x1e(xqc);
var x9b=xSf[0];
var x9d=xSf[1];
if(xBg < x9b)
{
xBg=x9b;
this.xvc=0;
}
else if(xBg > x9d)
{
xBg=x9d;
this.xvc=0;
}
var xv=this.xpe(xqc,xBg);
var xBf=xv[0];
var xYg=xv[1];
if( (xBf > -180.0) || (xYg < 180.0) )
{
if(xne < xBf)
{
xne=xBf;
this.xmg=0;
}
if(xne > xYg)
{
xne=xYg;
this.xmg=0;
}
}
else
{
xne=this.xsf(xne);
}
if( (xne != this.x7d) || (xBg != this.xqg)|| (xqc != this.x2b) )
{
this.x7d=xne;
this.xqg=xBg;
this.x2b=xqc;
this.xM();
}
}
p1.xmd=function(xhb, xPe)
{
var xqc=xhb;
if(xPe != 0)
{
var x8e=Math.tan(0.5*xhb*Math.PI/180);
x8e /= Math.exp(xPe);
xqc=2.0*Math.atan(x8e)*180/Math.PI;
}
return xqc;
}
p1.xje=function(x2d, xz, x9, xQg)
{
var xRb;
if(xz > x2d)
{
xRb=x2d+xQg*x9;
if(xRb > xz) xRb=xz;
}
else if(xz < x2d)
{
xRb=x2d-xQg*x9;
if(xRb < xz) xRb=xz;
}
else
{
xRb=x2d;
}
return xRb;
}
p1.xM=function()
{
this.xrf=true;
}
p1.x8b=function()
{
this.xDb=true;
}
p1.xTe=function()
{
if(this.xrf)
{
this.xgc();
}
}
p1.xfd=function(x6e, width, height)
{
var xb=this.xGd;
if( (this.xq != x6e) || (this.xKc != width) || (this.xCe != height) )
{
this.xq=x6e;
this.xKc=width;
this.xCe=height;
var xGc=new x3j();
xGc.x2j(x6e, width/height, 1.0, 100.0);
xb.uniformMatrix4fv(this.xbf, false, xGc.x5j());
this.xX("s4-2");
xb.viewport(0, 0, width, height);
this.x8b();
}
}
p1.xxd=function(xpg, xZd)
{
var xb=this.xGd;
if( (this.xdh != xpg) || (this.xMh != xZd) )
{
this.xdh=xpg;
this.xMh=xZd;
var xWb=new x3j();
xWb.xZj(1,xpg);
var xGc=new x3j();
xGc.xZj(0,-xZd);
xWb.xWj(xGc);
xb.uniformMatrix4fv(this.xRh, false, xWb.x5j());
this.xX("s4-1");
this.x8b();
}
}
p1.xgc=function()
{
this.xrf=false;
if(this.xm) return;
var x2h=false;
if(this.xKb)
{
var xrc=this.xxc();
var xWh=this.xde();
this.xKb.width=xrc;
this.xKb.height=xWh;
if(xrc < 1) xrc=1;
if(xWh < 1) xWh=1;
if(this.xOc)
{
var xb=this.xGd;
this.xfd(this.x2b, xrc, xWh);
this.xxd(this.x7d, this.xqg);
}
else
{
var xYc=Math.sqrt(xrc*xrc+xWh*xWh);
var focalLength=xYc/(2*Math.tan(0.5*this.x2b*Math.PI/180));
this.xKb.style.webkitPerspective=focalLength;
x2h=true;
}
}
if(x2h)
{
var xkf=this.xag();
if(this.xcb)
{
for(var i=0; i < xkf; i++)
{
if(this.xcb[i])
{
this.xcb[i].xgc();
}
}
}
}
}
p1.xeb=function()
{
}
p1.xxg=function()
{
for(var i=0; i < this.x3g.length; i++)
{
this.log(this.x3g[i]);
}
this.x3g.length=0;
}
p1.log=function(xnf)
{
if(this.xKb)
{
if(!this.xff)
{
var area=document.createElement("textArea");
area.style.position="relative";
area.style.width="50%";
area.style.height="50%";
area.style.top="0px";
area.style.left="0px";
area.style.zindex="1000";
this.xJc.appendChild(area);
this.xff=area;
}
this.xff.value += xnf+"\n";
this.xff.scrollTop=this.xff.scrollHeight;
}
else
{
this.x3g.push(xnf);
}
}
p1.xhg=function(xnf)
{
this.log(xnf);
}
p1.xMg=function(xFg)
{
this.log(xFg.message);
}
p1.xag=function()
{
return 14;
}
p1.x9g=function(xDc)
{
var xme, xGb, x6e;
x6e=68;
if(xDc < 6)
{
xGb=30;
xme=xDc*60;
}
else if(xDc < 12)
{
xGb=-30;
xme=(xDc-6)*60;
}
else if(xDc == 12)
{
xGb=90;
xme=0;
}
else
{
xGb=-90;
xme=0;
}
return new Array(xme,xGb,x6e);
}
p1.xgb=function(xDc)
{
var x8;
var xDe=".jpg";
var xoc;
if(xDc < 10)
{
xoc="0"+xDc;
}
else
{
xoc=""+xDc;
}
var xhh=this.xQb+xoc+xDe;
return xhh;
}
p1.xAd=function()
{
if(!this.xcb)
{
this.xcb=new Array();
var xkf=this.xag();
for(var i=0; i < xkf; i++)
{
var xhh=this.xgb(i+1);
var xHf=this.x9g(i);
var xGh=xHf[0];
var xXh=xHf[1];
var xT=xHf[2];
var xth=0;
if(nhPanoramaViewer.isIOS())
{
xth=this.xvf;
}
var xIg=new xoj(this, xhh, xGh, xXh, xT, i, xth);
this.xcb[i]=xIg;
}
}
}
p1.xOd=function()
{
return this.x7d;
}
p1.xlb=function()
{
return this.xqg;
}
p1.xmh=function()
{
return this.xKb;
}
p1.xUe=function(xLf)
{
try
{
if(this.xOc)
{
this.x8b();
}
this.x0f--;
this.xWe++;
this.xNe();
}
catch (xmb)
{
this.xMg(xmb);
}
}
p1.xNe=function()
{
if(this.xNg && this.xcb)
{
var xkf=this.xag();
while(true)
{
if(this.x0f >= this.x8f) break;
var xoh=xkf-this.x0f-this.xWe;
if(xoh == 0) break;
var xOh=this.xEf();
if(!xOh) break;
}
}
}
p1.xEf=function()
{
var xOh=false;
if(this.xNg && this.xcb)
{
var xTh=this.x7d;
var xFc=this.xqg;
var xkf=this.xag();
var xtd=-1;
var x2e;
for(var i=0; i < xkf; i++)
{
var xIg=this.xcb[i];
var xlh=xIg.xfi();
if(xlh == xIg.lsNotLoaded)
{
var x7c=this.x5f(xTh, xFc, xIg.xyj(), xIg.xoi());
if( (xtd == -1) || (x7c < x2e) )
{
xtd=i;
x2e=x7c;
}
}
}
if(xtd >= 0)
{
this.x0f++;
this.xcb[xtd].x1i();
xOh=true;
}
}
return xOh;
}
p1.xOb=function()
{
var xbb=this.xgb(0);
this.xNc.src=xbb;
}
p1.xQ=function()
{
return window.document.location.toString();
}
p1.xvh=function(xhh, xf)
{
var xnd;
if(xhh.search(new RegExp(":\\/\\/")) >= 0)
{
xnd=xhh;
}
else
{
if(xhh.search(new RegExp("\\/")) == 0)
{
var xqb=xf.match(new RegExp("^[^\\/]*:\\/\\/[^\\/]*\\/"));
var xac=xf;
if(xqb.length > 0)
{
xac=xqb[0];
}
xac=xac.replace(/\/$/,"");
xnd=xac+xhh;
}
else
{
var xdb=xf.replace(/\/[^\/]*$/,"/");
xnd=xdb+xhh;
}
}
return xnd;
}
p1.xL=function(event)
{
var xbb=this.xgb(0);
this.xhg("Failed to load image: "+xbb);
return true;
}
p1.xWc=function(event)
{
this.xNg=true;
if(this.xgf)
{
this.xrd();
}
if(this.xOc)
{
this.x3b();
}
this.xNe();
return true;
}
p1.x3b=function()
{
var xTi=this.xNc.width;
var xge=this.xAh(this.xNc);
var x6f=xTi/4;
var xkf=this.xag();
for(var xJe=0; xJe < xkf; xJe++)
{
var xNb=new Array((xJe%4)*x6f,Math.floor(xJe/4)*x6f,x6f,x6f);
this.xcb[xJe].xji(xge, xTi, xNb);
}
this.x8b();
}
p1.xrd=function()
{
var xbb=this.xgb(0);
var xTi=this.xNc.width;
var x6f=xTi/4;
var xkf=this.xag();
for(var xJe=0; xJe < xkf; xJe++)
{
var xNb=new Array((xJe%4)*x6f,Math.floor(xJe/4)*x6f,x6f,x6f);
this.xcb[xJe].xhi(xbb, xTi, xNb);
}
}
p1.x5f=function(xuh, xHc,xgg, xnb)
{
var xaf=xHc*Math.PI/180.0;
var xdf=xnb*Math.PI/180.0;
var xXc=xuh*Math.PI/180.0;
var xPd=xgg*Math.PI/180.0;
var xnd=Math.acos(Math.sin(xaf)*Math.sin(xdf)+Math.cos(xaf)*Math.cos(xdf)*Math.cos(xXc-xPd)) * 180.0/Math.PI;
return xnd;
}
p1.x1c=function()
{
}
p1.xab=function()
{
return this.x6c;
}
p1.xhe=function(xg, xUg)
{
}
p1.xlg=function(event)
{
try
{
var x4e=this.xab();
this.xFh(!x4e);
}
catch (xmb)
{
this.xMg(xmb);
}
}
p1.xie=function()
{
return this.xmf;
}
p1.xtc=function()
{
var xQh=this.xie();
if(!("pano"in xQh))
{
throw new Error("No panorama file is given. Include a 'pano' variable.");
}
this.xQb=xQh["pano"];
if(!("format"in xQh))
{
throw new Error("The 'format' parameter is missing. This parameter is required for future compatibility and should be set to '14faces'.");
}
var x0b=xQh["format"];
if(x0b !="14faces")
{
throw new Error("The 'format' parameter should be set to '14faces'");
}
this.xE=this.x2("maxfov",this.xE,1,179);
this.xOg=this.x2("minfov",this.xOg,1,179);
if(this.xOg > this.xE)
{
this.log("Warning: parameter 'minfov' cannot be greater than 'maxfov'");
this.xOg=this.xE;
}
this.xae=this.x2("fov",this.xae,1,179);
if(this.xae < this.xOg) this.xae=this.xOg;
if(this.xae > this.xE) this.xae=this.xE;
this.xY=this.x2("maxpan",this.xY,-180,180);
this.xNh=this.x2("minpan",this.xNh,-180,180);
if(this.xNh > this.xY)
{
this.log("Warning: parameter 'minpan' cannot be greater than 'maxpan'");
this.xNh=this.xY;
}
this.xgd=this.x2("pan",this.xgd,-180,180);
if(this.xgd < this.xNh) this.xgd=this.xNh;
if(this.xgd > this.xY) this.xgd=this.xY;
this.xEd=this.x2("maxtilt",this.xEd,-90,90);
this.xUd=this.x2("mintilt",this.xUd,-90,90);
if(this.xUd > this.xEd)
{
this.log("Warning: parameter 'mintilt' cannot be greater than 'maxtilt'");
this.xUd=this.xEd;
}
this.xog=this.x2("tilt",this.xog,-90,90);
if(this.xog < this.xUd) this.xog=this.xUd;
if(this.xog > this.xEd) this.xog=this.xEd;
this.x9f=this.x2("autorotatespeed",this.x9f,-1000,1000);
this.xfg=this.x2("autorotatedelay",this.xfg,0,1000);
this.xvf=this.x2("maxiosdimension",this.xvf,0,10000);
this.xkc=this.xyf("showfullscreenbutton_html",true);
this.xte=this.xyf("enablegyroscope",true);
if("licensekey"in xQh)
{
this.xpd=xQh["licensekey"];
}
if("flashcontextmenutext"in xQh)
{
this.x5c=xQh["flashcontextmenutext"];
}
if("flashcontextmenuurl"in xQh)
{
this.xBd=xQh["flashcontextmenuurl"];
}
if("rightclickhtml"in xQh)
{
this.xP=xQh["rightclickhtml"];
}
}
p1.xyf=function(xLb, xCf)
{
var xnd=xCf;
var xQh=this.xie();
if(xLb in xQh)
{
xnd=true;
if( (xQh[xLb] === 0)
|| (xQh[xLb] === false)
|| (xQh[xLb] === null)
|| (xQh[xLb] ==="")
|| (xQh[xLb] ==="null")
|| (xQh[xLb] ==="0")
|| (xQh[xLb] ==="false") )
{
xnd=false;
}
}
else
{
}
return xnd;
}
p1.x2=function(xLb, xCf, xof, x5g)
{
var xQh=this.xie();
var xnd=xCf;
if(xLb in xQh)
{
var xfb=xQh[xLb];
xnd=xfb-0.0;
if(xnd < xof)
{
this.log("Warning: parameter '"+xLb+"' should be at least "+xof);
xnd=xof;
}
if(xnd > x5g)
{
this.log("Warning: parameter '"+xLb+"' should not be greater than "+x5g);
xnd=x5g;
}
}
return xnd;
}
p1.xUc=function()
{
var xic=179;
if( (this.xEd < 90) || (this.xUd > -90) )
{
xic=this.xEd-this.xUd;
if(xic < 1) xic=179;
}
var xDh=179;
if( (this.xY < 90) || (this.xNh > -90) )
{
xDh=this.xY-this.xNh;
if(xDh < 1) xDh=179;
if(xDh > 179) xDh=179;
}
var xTd=this.xIb();
var xBh=1.0;
var xwf=Math.sqrt(1.0/(xTd*xTd+1.0));
var x6b=xTd*xwf;
var xvd=this.xxb(xDh,x6b,xBh);
var xig=this.xxb(xic,xwf,xBh);
var xPg=this.xE;
if(xPg > xvd) xPg=xvd;
if(xPg > xig) xPg=xig;
if(xPg < this.xOg) xPg=this.xOg;
return xPg;
}
p1.x1e=function(xxh)
{
var xTd=this.xIb();
var xBh=1.0;
var xwf=Math.sqrt(1.0/(xTd*xTd+1.0));
var x6b=xTd*xwf;
var xFf=this.xxb(xxh,1.0,xwf);
var xyh=this.xxb(xxh,1.0,x6b);
var x9d=this.xEd;
if(this.xEd < 90)
{
x9d=this.xEd-0.5*xFf;
}
var x9b=this.xUd;
if(this.xUd > -90)
{
x9b=this.xUd+0.5*xFf;
}
if(x9b > x9d)
{
x9b=0.5*(x9b+x9d);
x9d=x9b;
}
return new Array(x9b, x9d);
}
p1.xpe=function(xxh, xZd)
{
var xTd=this.xIb();
var xBh=1.0;
var xwf=Math.sqrt(1.0/(xTd*xTd+1.0));
var x6b=xTd*xwf;
var xFf=this.xxb(xxh,1.0,xwf);
var xyh=this.xxb(xxh,1.0,x6b);
var xEb=xZd+0.5*xFf;
var x7=xZd-0.5*xFf;
var xpf;
if( (xEb >= 90) || (x7 <= -90) )
{
xpf=90;
}
else
{
if(xEb > (-x7))
{
xpf=xEb;
}
else
{
xpf=-x7;
}
}
var xS=Math.cos(xpf*Math.PI/180.0);
if(xS < 1e-4) xS=1e-4;
var xUb=xyh/xS;
var xBf=this.xNh;
var xYg=this.xY;
if( (this.xNh > -180.0) || (this.xY < 180.0) )
{
xBf=this.xNh+0.5*xUb;
xYg=this.xY-0.5*xUb;
}
if(xBf > xYg)
{
xBf=0.5*(xBf+xYg);
xYg=xBf;
}
return new Array(xBf, xYg);
}
p1.xIb=function()
{
var xTd=1;
if( (this.width > 0) && (this.height > 0) )
{
xTd=this.width/this.height;
}
return xTd;
}
p1.xxb=function(xzd, xef, xOe)
{
return 2.0*180.0/Math.PI*Math.atan(xOe/xef*Math.tan(0.5*xzd*Math.PI/180.0));
}
p1.x7h=function()
{
return new Date().getTime();
}
p1.xxc=function()
{
var xnd=0;
if(this.xKb)
{
xnd=this.xKb.offsetWidth;
}
return xnd;
}
p1.xde=function()
{
var xnd=0;
if(this.xKb)
{
xnd=this.xKb.offsetHeight;
}
return xnd;
}
p1.xRd=function()
{
var x4e=this.xab();
this.xFh(!x4e);
}
nhPanoramaViewer.showNavigator=function()
{
var properties=new Array("appCodeName","appName","appVersion","buildID","oscpu","platform","product","productSub",
"userAgent","vendor","vendorSub");
var xp;
for(var xzf in properties)
{
var property=properties[xzf];
xp += property+": "+window.navigator[property]+"\n";
}
alert(xp);
}
nhPanoramaViewer.isWebKit=function()
{
return !!(window.navigator.userAgent.match(/ applewebkit\/.*/i));
}
nhPanoramaViewer.isIOS=function()
{
if(!nhPanoramaViewer.isWebKit()) return false;
return !!(window.navigator.userAgent.match(/ mobile\/.*/i));
}
nhPanoramaViewer.isIPad=function()
{
if(!nhPanoramaViewer.isIOS()) return false;
return !!(window.navigator.userAgent.match(/ipad\;/i));
}
nhPanoramaViewer.isChrome=function()
{
if(!nhPanoramaViewer.isWebKit()) return false;
return !!(window.navigator.userAgent.match(/ chrome\/.*/i));
}
nhPanoramaViewer.isAndroid=function()
{
if(!nhPanoramaViewer.isWebKit()) return false;
return !!(window.navigator.userAgent.match(/ android /i));
}
nhPanoramaViewer.isMac=function()
{
return !!(window.navigator.platform.match(/^mac/i));
}
p1.xud=function(event)
{
var touch=event.touches[0];
event.preventDefault();
if(event.touches.length == 1)
{
this.xDd(event.touches[0].clientX, event.touches[0].clientY);
}
else
{
if(this.xcd != this.xih)
{
this.xlc();
}
if(event.touches.length == 2)
{
var xrb=this.x5h(event);
this.xVh=xrb[0];
this.xFb=xrb[1];
this.xvg=xrb[2];
this.xHh=window.pageXOffset;
this.xFd=window.pageYOffset;
this.xcd=this.x3f;
this.xSg=this.x2b;
}
else
{
this.xcd=this.xih;
}
}
}
p1.xqe=function(event)
{
event.preventDefault();
if( (this.xcd == this.xMc) || (this.xcd == this.xOf))
{
this.xd(event.touches[0].clientX, event.touches[0].clientY);
}
else if(this.xcd == this.x3f)
{
var xMb=this.xOg;
var x4c=this.xUc();
var xrb=this.x5h(event);
var xUh=xrb[0];
var xLd=xrb[1];
var x3c=xrb[2];
var xAf;
if(xUh < 1)
{
xAf=100000;
}
else
{
xAf=this.xVh / xUh;
}
var x8e=Math.tan(0.5*this.xSg*Math.PI/180.0);
x8e *= xAf;
var xqc=2.0*Math.atan(x8e)*180.0/Math.PI;
if(xqc < xMb) xqc=xMb;
if(xqc > x4c) xqc=x4c;
if(this.x2b != xqc)
{
this.x2b=xqc;
this.xhc=xqc;
this.xM();
}
if(!this.xab())
{
var xy=this.xFb+this.xHh-xLd;
var xfe=this.xvg+this.xFd-x3c;
window.scroll(xy, xfe);
}
}
}
p1.xod=function(event)
{
event.preventDefault();
if( (this.xcd == this.xMc) || (this.xcd == this.xOf))
{
this.xlc();
}
else if(this.xcd == this.x3f)
{
this.xcd=this.xih;
}
}
p1.x5h=function(event)
{
var xVc=event.touches[0].clientX;
var xCb=event.touches[0].clientY;
var xfe=event.touches[1].clientX;
var x5e=event.touches[1].clientY;
var x6h=xfe-xVc;
var xZe=x5e-xCb;
var x7c=Math.sqrt(x6h*x6h+xZe*xZe);
var xR=(xVc+xfe)/2;
var xGf=(xCb+x5e)/2;
return new Array(x7c, xR, xGf);
}
p1.xuc=function()
{
var xed=document.getElementsByTagName("meta");
for(var i=0; i < xed.length; i++)
{
var xfh=xed[i];
if(xfh.name ==="viewport") return xfh;
}
return null;
}
p1.xnh=function()
{
var xnd="";
var xfh=this.xuc();
if(xfh)
{
xnd=xfh.getAttribute("content");
}
return xnd;
}
p1.xTf=function(content)
{
var xfh=this.xuc();
if(!xfh)
{
xfh=document.createElement("meta");
xfh.setAttribute("name","viewport");
document.head.appendChild(xfh);
}
xfh.setAttribute("content",content);
}
p1.xKh=function(x4e)
{
if(this.x6c != x4e)
{
var xpc=this;
if(nhPanoramaViewer.isIOS())
{
xpc.xm=true;
xpc.x7g.style.visibility="visible";
setTimeout(function(){
xpc.xm=false;
xpc.xHb(x4e);
xpc.x7g.style.visibility="hidden";
},100);
}
else
{
xpc.xHb(x4e);
}
}
}
p1.xHb=function(x4e)
{
if(this.x6c != x4e)
{
if(x4e)
{
this.xs=document.body;
this.xch=document.documentElement.style.cssText;
var xpc=this;
var xYh=document.createElement("body");
xYh.appendChild(xpc.xJc);
xYh.style.margin="0px";
xYh.style.padding="0px";
xYh.style.width="100%";
xYh.style.height="100%";
document.body=xYh;
document.documentElement.style.cssText="width:100%;height:100%";
window.scroll(100000,0);
xpc.xJc.style.visibility="hidden";
setTimeout(function(){
xpc.xJc.style.visibility="visible";
},1);
xpc.xgc();
}
else
{
document.body=this.xs;
document.documentElement.style.cssText=this.xch;
this.x0g.appendChild(this.xJc);
this.xgc();
}
this.x6c=x4e;
this.xNd();
}
}
p1.xdc=function(xnf)
{
var xnd="";
for(var i=0; i < xnf.length; i++)
{
var xSj=xnf.charCodeAt(i);
if( (xSj >= 48) && (xSj < 128) )
{
xSj=((xSj-48))^0x46+48;
}
xnd += String.fromCharCode(xSj);
}
return xnd;
}
nhPanoramaViewer.isSupported=function()
{
if(!document.addEventListener) return false;
if(nhPanoramaViewer.has3dCss()) return true;
if(nhPanoramaViewer.hasWebGL()) return true;
return false;
}
nhPanoramaViewer.has3dCss=function()
{
if(typeof WebKitCSSMatrix =="undefined") return false;
var xDg=document.createElement("div");
if(!xDg) return false;
if(typeof xDg.style.webkitPerspective =="undefined") return false;
if(nhPanoramaViewer.isChrome()) return false;
if(nhPanoramaViewer.isAndroid()) return false;
return true;
}
nhPanoramaViewer.hasWebGL=function()
{
var xb=null;
var xqf=document.createElement("canvas");
try
{
xb = xqf.getContext("webgl");
}
catch(x4d) {}
if(!xb)
{
try
{
xb = xqf.getContext("experimental-webgl");
}
catch(x4d) {}
}
return (xb != null);
}
p1.xCh=function(xhf)
{
var xb;
try
{
xb = xhf.getContext("webgl");
}
catch(x4d) {}
if(!xb)
{
try
{
xb = xhf.getContext("experimental-webgl");
}
catch(x4d) {}
}
if(!xb)
{
throw new Error("Could not initialize WebGL");
}
this.xGd=xb;
xb.clearColor(0.0, 0.0, 0.0, 1.0);
xb.clearDepth(1.0)
xb.enable(xb.DEPTH_TEST);
xb.depthFunc(xb.LEQUAL);
this.xX("s1-1");
var xye="attribute vec3 vertexPosition;attribute vec2 vTexCoord;uniform mat4 modelViewMatrix,perspectiveMatrix;varying vec2 v_texCoord;void main(){gl_Position = perspectiveMatrix * modelViewMatrix * vec4(vertexPosition, 1.0);v_texCoord = vTexCoord;}";
var xVe="uniform sampler2D sampler2d; varying mediump vec2 v_texCoord;void main(void){gl_FragColor = texture2D(sampler2d, v_texCoord);}";
this.xJ=this.xng(xye,xVe);
this.xTb=new x3j();
this.x3e=new x3j();
this.xRh=xb.getUniformLocation(this.xJ,"modelViewMatrix");
this.xX("s1-2");
this.xbf=xb.getUniformLocation(this.xJ,"perspectiveMatrix");
this.xX("s1-3");
this.x1h = xb.getAttribLocation(this.xJ,"vertexPosition");
this.xX("s1-4");
xb.enableVertexAttribArray(this.x1h);
this.xX("s1-5");
this.xUf = xb.getAttribLocation(this.xJ,"vTexCoord");
this.xX("s1-6");
xb.enableVertexAttribArray(this.xUf);
this.xX("s1-7");
var loc=xb.getUniformLocation(this.xJ,"sampler2d");
this.xX("s1-10");
xb.uniform1i(loc, 0);
this.xX("s1-11");
}
p1.xX=function(xQd)
{
var xFg=this.xGd.getError();
if(xFg != this.xGd.NO_ERROR)
{
throw new Error("webGL error: "+xQd+": "+xFg);
}
}
p1.xjf=function(x9c, xcf)
{
var xb=this.xGd;
var xqd=xb.createShader(x9c);
this.xX("s2-1");
xb.shaderSource(xqd, xcf);
this.xX("s2-2");
xb.compileShader(xqd);
this.xX("s2-3");
if(!xb.getShaderParameter(xqd, xb.COMPILE_STATUS))
{
var xyg=xb.getShaderInfoLog(xqd);
xb.deleteShader(xqd);
throw new Error("Couldn't compile shader:\n"+xyg);
}
return xqd;
}
p1.xng=function(xId, xVe)
{
var xb=this.xGd;
var x0d=null;
var x9h=null;
var xbh=null;
try
{
x9h=this.xjf(xb.VERTEX_SHADER, xId);
xbh=this.xjf(xb.FRAGMENT_SHADER, xVe);
var x0d = xb.createProgram();
this.xX("s3-1");
xb.attachShader(x0d, x9h);
this.xX("s3-2");
xb.attachShader(x0d, xbh);
this.xX("s3-3");
xb.linkProgram(x0d);
this.xX("s3-4");
if(!xb.getProgramParameter(x0d, xb.LINK_STATUS))
{
var xyg=xb.getProgramInfoLog(x0d);
throw new Error("Couldn't link program:\n"+xyg);
}
xb.useProgram(x0d);
this.xX("s3-5");
}
catch(x4d)
{
try
{
if(x9h) xb.deleteShader(x9h);
if(xbh) xb.deleteShader(xbh);
if(x0d) xb.deleteProgram(x0d);
}catch(xRm) {}
throw x4d;
}
return x0d;
}
p1.xtg=function()
{
if(this.xDb)
{
this.xDb=false;
var xb=this.xGd;
xb.clear(xb.COLOR_BUFFER_BIT | xb.DEPTH_BUFFER_BIT);
var xkf=this.xag();
if(this.xcb)
{
for(var i=0; i < xkf; i++)
{
var xIg=this.xcb[i];
if(xIg)
{
var xZf=xIg.xBi();
if(xZf)
{
xb.bindTexture(xb.TEXTURE_2D, xZf[0]);
xb.bindBuffer(xb.ARRAY_BUFFER, xZf[1]);
xb.vertexAttribPointer(this.x1h, 3.0, xb.FLOAT, false, 0, 0);
xb.bindBuffer(xb.ARRAY_BUFFER, xZf[2]);
xb.vertexAttribPointer(this.xUf, 2.0, xb.FLOAT, false, 0, 0);
xb.drawArrays(xb.TRIANGLE_STRIP, 0, 4);
}
}
}
}
xb.flush();
this.xX("s5-6");
xb.finish();
this.xX("s5-7");
}
}
p1.x8g=function(xKe)
{
var xb=this.xGd;
var xee = xb.createBuffer();
this.xX("s5-1");
xb.bindBuffer(xb.ARRAY_BUFFER, xee);
this.xX("s5-2");
xb.bufferData(xb.ARRAY_BUFFER, new Float32Array(xKe), xb.STATIC_DRAW);
this.xX("s5-3");
return xee;
}
p1.xAh=function(xoe)
{
var xb=this.xGd;
var xge=xb.createTexture();
this.xX("s7-1");
xb.bindTexture(xb.TEXTURE_2D, xge);
this.xX("s7-2");
xb.pixelStorei(xb.UNPACK_FLIP_Y_WEBGL, true);
xb.texParameteri(xb.TEXTURE_2D, xb.TEXTURE_MIN_FILTER, xb.LINEAR);
xb.texParameteri(xb.TEXTURE_2D, xb.TEXTURE_MAG_FILTER, xb.LINEAR);
xb.texParameteri(xb.TEXTURE_2D, xb.TEXTURE_WRAP_S, xb.CLAMP_TO_EDGE);
xb.texParameteri(xb.TEXTURE_2D, xb.TEXTURE_WRAP_T, xb.CLAMP_TO_EDGE);
this.xX("s7-3");
xb.texImage2D(xb.TEXTURE_2D, 0, xb.RGBA, xb.RGBA, xb.UNSIGNED_BYTE, xoe);
this.xX("s7-4");
return xge;
}
nhPanoramaViewer.requestAnimationFrameFunc=null;
nhPanoramaViewer.requestAnimationFrame=function(callback, xif)
{
if(!nhPanoramaViewer.requestAnimationFrameFunc)
{
var xmc = [
"mozRequestAnimationFrame",
"oRequestAnimationFrame",
"requestAnimationFrame",
"webkitRequestAnimationFrame",
"msRequestAnimationFrame"
];
for (var i = 0; i < xmc.length; ++i)
{
if(window[xmc[i]])
{
var thefunc=window[xmc[i]];
nhPanoramaViewer.requestAnimationFrameFunc=function(callback,xif) {
thefunc.call(window, callback, xif);
};
break;
}
}
if(!nhPanoramaViewer.requestAnimationFrameFunc)
{
nhPanoramaViewer.requestAnimationFrameFunc=function(callback,xif) {
window.setTimeout(callback,16.67);
};
}
}
nhPanoramaViewer.requestAnimationFrameFunc(callback,xif);
}
p1.xbe=function(x4d)
{
if(x4d.rotationRate && x4d.accelerationIncludingGravity)
{
var xlf=x4d.rotationRate;
var xVg=x4d.accelerationIncludingGravity;
if( (!isNaN(xVg.x)) && (!isNaN(xVg.y)) && (!isNaN(xVg.z))
&& (!isNaN(xlf.alpha)) && (!isNaN(xlf.beta)) && (!isNaN(xlf.gamma))
&& (!isNaN(x4d.interval)) )
{
var xwb=this.x7h() / 1000.0;
if(this.xtb == 0)
{
this.xtb=xwb+1.0;
}
if(xwb >= this.xtb)
{
var xh=[xVg.x, xVg.y, xVg.z];
if(this.xPb != null)
{
var xdg=this.xPh;
xdg=Math.pow(xdg,x4d.interval);
var xXg=1.0-xdg;
xh[0]=xXg*xh[0]+xdg*this.xPb[0];
xh[1]=xXg*xh[1]+xdg*this.xPb[1];
xh[2]=xXg*xh[2]+xdg*this.xPb[2];
}
this.xPb=xh;
var xWd=Math.sqrt(xh[0]*xh[0]+xh[1]*xh[1]+xh[2]*xh[2]);
if(xWd > 0)
{
var x1d=1.0/xWd;
xh[0] *= x1d;
xh[1] *= x1d;
xh[2] *= x1d;
}
this.xAb=xh;
var xGb=Math.asin(xh[2]);
var xBb=0;
if( (xh[0] != 0) || (xh[1] != 0) )
{
xBb=Math.atan2(xh[0],-xh[1]);
}
xBb *= 180.0/Math.PI;
xGb *= 180.0/Math.PI;
if(this.xcd == this.xih)
{
if(this.xYf == this.xob)
{
var xAe=xh[0]-this.xQe[0];
var xMd=xh[1]-this.xQe[1];
var x1g=xh[2]-this.xQe[2];
var xBc=xAe*xAe+xMd*xMd+x1g*x1g;
if(xBc > 0.1)
{
this.xXe(xGb);
}
}
else if(this.xYf == this.xNf)
{
if(xGb > -60)
{
this.xXe(xGb);
}
}
}
if(this.xYf == this.xt)
{
if( (Math.abs(xlf.alpha) > 20)
|| (Math.abs(xlf.beta) > 20)
|| (Math.abs(xlf.gamma) > 20) )
{
this.xo();
}
}
var xke=xlf.alpha * x4d.interval;
var xwh=xlf.beta * x4d.interval;
var xu=xlf.gamma * x4d.interval;
var xc=new x3j();
var xIf=new x3j();
xIf.xZj(2,xu);
xc.xWj(xIf);
xIf.xZj(1,xwh);
xc.xWj(xIf);
xIf.xZj(0,xke);
xc.xWj(xIf);
var xyb=new x3j();
xIf.xZj(2,-xBb);
xyb.xWj(xIf);
xIf.xZj(0,xGb);
xyb.xWj(xIf);
var xFe=new x3j(xyb);
xFe.xPj();
var xzg=new x3j();
xzg.xWj(xFe);
xzg.xWj(xc);
xzg.xWj(xyb);
var xAg=xzg.xQj([1,0,0]);
var xZc=Math.atan2(xAg[2],xAg[0]);
xZc *= 180.0/Math.PI;
var xne=this.x7d;
if(this.xKd == 0)
{
xne += xZc;
}
var xBg;
if( (this.xcd == this.xih)
&& (this.xYf == this.xt)
)
{
var xWg=x4d.interval*180;
if(this.xug > 0)
{
this.xug -= xWg;
if(this.xug < 0) this.xug=0;
}
else if(this.xug < 0)
{
this.xug += xWg;
if(this.xug > 0) this.xug=0;
}
xBg=xGb+this.xug;
if(xBg < -90) xBg=-90;
if(xBg > 90) xBg=90;
}
else
{
xBg=this.xqg;
}
if( (!isNaN(xne)) && (!isNaN(xBg)))
{
this.xGe(xne,xBg,this.x2b);
}
}
}
}
}
p1.xr=function(x4d)
{
this.log("Error: WebGL context lost");
}
p1.xHe=function(x4d)
{
this.log("WebGL context restored");
}
p1.xkd=function()
{
return (this.xYf == this.xt);
}
p1.xj=function()
{
if(this.xYf != this.xNf)
{
this.xQe=this.xAb;
this.xYf=this.xob;
}
}
p1.xXe=function(xue)
{
if(xue < -60)
{
this.xYf=this.xNf;
}
else
{
this.xYf=this.xt;
this.xug=this.xqg-xue;
this.xo();
}
}
p1.xvb=function()
{
var xZ="The publisher of this panorama should check the contents of the 'licensekey' field in the parameters for this panorama.";
if(this.xHg < 0)
{
this.xHg=0;
if(this.xpd !="")
{
var xwd=this.xWf(this.xpd);
if(xwd.valid)
{
var xid=this.xjc();
if(xid =="")
{
this.log("License key ('licensekey' field) ignored since the panorama is viewed on the local computer.");
}
else
{
var x1f=false;
if(xid == xwd.host)
{
x1f=true;
}
else
{
var x0e="."+xwd.host;
var xZb=xid.lastIndexOf(x0e);
if( (xZb >= 0) && (xZb == (xid.length-x0e.length)) )
{
x1f=true;
}
}
if(x1f)
{
this.xHg=1;
}
else
{
this.log("Invalid license: the license is valid for '"+xwd.host+"' but the panorama is stored on '"+xid+"'. "+xZ);
}
}
}
else
{
this.log("Invalid license key. "+xZ);
}
}
}
return (this.xHg > 0);
}
p1.xIc=function(xTg)
{
var valid=false;
var xZb=xTg.lastIndexOf(":");
if(xZb >= 0)
{
var xp=xTg.substr(0,xZb);
var xKf=xTg.substr(xZb+1,xTg.length-xZb-1);
var xXb=new xDk(this.xRf);
var xtf=new xDk(this.xEc);
var xeg=new xdp();
xeg.xzn(xXb, xtf);
valid=xeg.x4o(xp, xKf);
}
return valid;
}
p1.xWf=function(xTg)
{
var xnd=new Object();
try
{
xnd.valid=this.xIc(xTg);
}
catch(x4d)
{
xnd.valid=false;
}
if(xnd.valid)
{
var components=xTg.split(":");
if(components.length < 3)
{
xnd.valid=false;
}
else
{
xnd.host=components[0];
xnd.version=components[1];
}
}
return xnd;
}
p1.xx8944hjkxx7jk=function(x9e, xzh)
{
x9e=x9e.toLowerCase();
var xp=x9e.toLowerCase()+":1";
var xtf=new xDk(this.xEc);
var xI=new xDk(xzh);
var xXb=new xDk(this.xRf);
var xeg=new xdp();
xeg.x8m(xI, xtf);
xeg.xzn(xXb, xtf);
var xKf=xeg.xSo(xp,true);
var x2c=xp+":"+xKf;
var xW=this.xWf(x2c);
if(!xW.valid)
{
xW=this.xWf(x2c);
throw new Error("Check failed");
}
return x2c;
}
p1.xjc=function()
{
var xMf=this.xgb(0);
var xf=this.xQ();
xMf=this.xvh(xMf,xf);
var host="";
if(xMf.indexOf("://") >= 0)
{
host=xMf.replace(new RegExp("^.*:\\/\\/"),"");
host=host.replace(new RegExp("\\/.*$"),"");
host=host.replace(new RegExp(":.*$"),"");
}
host=host.toLowerCase();
return host;
}
var p2=xoj.prototype;
p2.lsNotLoaded=0;
p2.x3i=1;
p2.xzj=2;
p2.xfj=3;
p2.xNg=false;
p2.xdi=0;
function xoj(xKi, xkj, xme, xGb, x6e, xDc, xth)
{
this.xCj=this.lsNotLoaded;
this.xcj=xKi;
this.xmj=xkj;
this.xEj=xme;
this.xGi=xGb;
this.xAj=x6e;
this.xBj=xDc;
this.xWi=xth;
if(this.xcj.xgf)
{
var xMe=document.createElement("div");
xMe.style.position="absolute";
xMe.style.webkitBackfaceVisibility="hidden";
xMe.style.top="0px";
xMe.style.left="0px";
xMe.style.overflow="hidden";
var xYi=xKi.xmh();
xYi.appendChild(xMe);
this.xKb=xMe;
}
if(this.xcj.xOc)
{
this.xSi();
}
var xB=document.createElement("img");
xB.style.position="absolute";
xB.style.top="0px";
xB.style.left="0px";
xB.style.visibility="hidden";
this.xgi=xB;
var xpc=this;
if(document.addEventListener)
{
xB.addEventListener("load", function(x4d){return xpc.xni(x4d? x4d : window.event)}, false);
xB.addEventListener("error", function(x4d){return xpc.xli(x4d? x4d : window.event)}, false);
}
else if(document.attachEvent)
{
xB.attachEvent("onload", function(x4d){return xpc.xni(x4d? x4d : window.event)});
xB.attachEvent("onerror", function(x4d){return xpc.xli(x4d? x4d : window.event)});
}
if(this.xcj.xgf)
{
this.xKb.appendChild(this.xgi);
var xOi=document.createElement("img");
xOi.style.position="absolute";
xOi.style.top="0px";
xOi.style.left="0px";
xOi.style.visibility="hidden";
xMe.appendChild(xOi);
this.xvj=xOi;
}
this.x6i();
}
p2.xSi=function()
{
var x7c=10;
var width=x7c*Math.tan(0.5*this.xAj*Math.PI/180);
var xxj=new x3j();
xxj.xZj(0,this.xGi);
var xGc=new x3j();
xGc.xZj(1,-this.xEj);
xxj.xWj(xGc);
var xbi=[];
for(var xbj=0; xbj < 4; xbj++)
{
var xtj=[];
xtj[0]=(xbj & 1)? -width : width;
xtj[1]=(xbj & 2)? -width : width;
xtj[2]=-x7c;
xtj=xxj.xQj(xtj);
xbi=xbi.concat(xtj);
}
this.xHi=this.xcj.x8g(xbi);
}
p2.x1i=function()
{
this.xki();
}
p2.xki=function()
{
this.xCj=this.x3i;
if(this.xdi > 0)
{
var xpc=this;
window.setTimeout(function(){xpc.xgi.src=xpc.xmj}, this.xdi*1000);
}
else
{
this.xgi.src=this.xmj;
}
}
p2.xli=function(event)
{
this.xcj.xhg("Failed to load image: "+this.xmj);
this.xCj=this.xfj;
this.xcj.xUe(this);
return true;
}
p2.xni=function(event)
{
this.xCj=this.xzj;
if(this.xgi.width != this.xgi.height)
{
this.xcj.xhg("Image "+this.xmj+" should be square");
}
var xaj=this.xgi.width;
if(this.xWi && (this.xgi.width > this.xWi))
{
this.xgi.width=this.xWi;
this.xgi.height=this.xWi;
var xpc=this;
}
this.xnj=new Array(this.xgi.width, this.xgi.height);
if(this.xcj.xgf)
{
this.xgc();
this.xvj.style.visibility="hidden";
this.xgi.style.visibility="visible";
this.xKb.style.width=this.xnj[0]+"px";
this.xKb.style.height=this.xnj[1]+"px";
}
else
{
this.x5i=this.xcj.xAh(this.xgi);
this.xdj(0.0, 0.0, 1.0, 1.0);
}
if(nhPanoramaViewer.isIOS())
{
var xpc=this;
setTimeout(function(){
xpc.xcj.xUe(this);
},100);
}
else
{
this.xcj.xUe(this);
}
return true;
}
p2.x6i=function()
{
}
p2.xAi=function(event)
{
try
{
xCi(this.xuj,false);
this.xuj=null;
this.xcj.xUe(this);
}
catch (xmb)
{
this.xcj.xhg(xmb.toString());
}
}
p2.xgc=function()
{
if((this.xCj == this.xzj) || this.xNg)
{
this.xsj();
}
}
p2.xsj=function()
{
if(this.xcj.xgf)
{
var x0i=this.xcj.xOd();
var xej=this.xcj.xlb();
var xgj=this.xcj.xxc();
var xNi=this.xcj.xde();
var xTi=this.xnj[0];
var xvi=this.xnj[1];
var xhj=1000.0*(this.xBj+1);
var xjj=this.xcj.xmh().style.webkitPerspective;
var xwi=0.5*xhj/Math.tan(0.5*this.xAj*Math.PI/180);
var xGc=new WebKitCSSMatrix();
xGc=xGc.translate(-(xTi-xgj)/2,-(xvi-xNi)/2,xjj);
xGc=xGc.rotate(xej,0,0);
xGc=xGc.rotate(0,x0i-this.xEj,0);
xGc=xGc.rotate(-this.xGi,0,0);
xGc=xGc.translate(0,0,-xwi);
xGc=xGc.scale(xhj/xTi, xhj/xvi,1);
this.xKb.style.webkitTransform=xGc;
}
}
p2.xfi=function()
{
return this.xCj;
}
p2.xUi=function()
{
return this.xNg;
}
p2.xyj=function()
{
return this.xEj;
}
p2.xoi=function()
{
return this.xGi;
}
p2.xhi=function(xbb, xTi, xNb)
{
this.xNg=true;
if(this.xCj != this.x3i) this.xCj=this.lsNotLoaded;
var x6f=xNb[2];
var xci=xNb[3];
this.xvj.src=xbb;
this.xvj.width=xTi;
this.xvj.height=xTi;
this.xvj.style.left=""+(0-xNb[0])+"px";
this.xvj.style.top=""+(0-xNb[1])+"px";
this.xvj.style.visibility="visible";
this.xKb.style.width=x6f+"px";
this.xKb.style.height=xci+"px";
this.xnj=new Array(x6f,xci);
this.xgc();
}
p2.xji=function(xrj, xTi, xNb)
{
this.x5i=xrj;
var xPi=xNb[0]/xTi;
var xii=(xNb[0]+xNb[2])/xTi;
var x9i=1.0-(xNb[1]+xNb[3])/xTi;
var x7i=1.0-xNb[1]/xTi;
this.xdj(xPi, x9i, xii, x7i);
this.xNg=true;
if(this.xCj != this.x3i) this.xCj=this.lsNotLoaded;
}
p2.xdj=function(xPi, x9i, xii, x7i)
{
this.xDj=this.xcj.x8g([xii, x7i, xPi, x7i, xii, x9i, xPi, x9i]);
}
p2.xBi=function()
{
if(this.x5i)
{
return [this.x5i, this.xHi, this.xDj];
}
else
{
return null;
}
}
var p3=x3j.prototype;
p3.xLj=[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
function x3j(src)
{
if(src)
{
this.xLj=src.xLj.slice(0);
}
}
p3.xWj=function(x1j)
{
var x4j=[];
var xKj=0;
var xOj=0;
var xGj;
var xUj;
var x6j;
while(true)
{
xGj=0;
xUj=xKj;
x6j=xOj;
while(true)
{
xGj += this.xLj[xUj++]*x1j.xLj[x6j];
x6j += 4;
if(x6j >= 16) break;
}
x4j.push(xGj);
xOj++;
if(xOj == 4)
{
xKj += 4;
if(xKj == 16) break;
xOj=0;
}
}
this.xLj=x4j;
return this;
}
p3.x2j=function(xxh, xTd, xIj, xRj)
{
var xJh=0.5 * xxh * Math.PI / 180.0;
var x9i=xIj * Math.tan(xJh) / Math.sqrt(1+xTd*xTd);
var xii=x9i*xTd;
var xXj=1.0/(xRj-xIj);
this.xLj = [
xIj/xii, 0, 0, 0,
0, xIj/x9i, 0, 0,
0, 0, -(xIj+xRj)*xXj, -1,
0, 0, -2*xRj*xIj*xXj, 0
];
return this;
}
p3.xZj=function(xJj,xMj)
{
var xTj=Math.PI * xMj / 180.0;
var xSj=Math.cos(xTj);
var s=Math.sin(xTj);
if(xJj == 0)
{
this.xLj = [
1, 0, 0, 0,
0, xSj, s, 0,
0, -s, xSj, 0,
0, 0, 0, 1
];
}
else if(xJj == 1)
{
this.xLj = [
xSj, 0, -s, 0,
0, 1, 0, 0,
s, 0, xSj, 0,
0, 0, 0, 1
];
}
else
{
this.xLj = [
xSj, s, 0, 0,
-s, xSj, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
];
}
return this;
}
p3.x5j=function()
{
return new Float32Array(this.xLj);
}
p3.xQj=function(x7j)
{
var x4j=this.xLj;
var x=x4j[0]*x7j[0]+x4j[4]*x7j[1]+x4j[8]*x7j[2]+x4j[12];
var y=x4j[1]*x7j[0]+x4j[5]*x7j[1]+x4j[9]*x7j[2]+x4j[13];
var z=x4j[2]*x7j[0]+x4j[6]*x7j[1]+x4j[10]*x7j[2]+x4j[14];
var xrc=x4j[3]*x7j[0]+x4j[7]*x7j[1]+x4j[11]*x7j[2]+x4j[15];
if(xrc != 1.0)
{
var x0j=1.0/xrc;
x *= x0j;
y *= x0j;
z *= x0j;
}
return [x,y,z];
}
p3.xPj=function()
{
var x4j=this.xLj;
this.xLj=[
x4j[0], x4j[4], x4j[8], x4j[12],
x4j[1], x4j[5], x4j[9], x4j[13],
x4j[2], x4j[6], x4j[10], x4j[14],
x4j[3], x4j[7], x4j[11], x4j[15]
];
return this;
}
var p4=xDk.prototype;
p4.xUl="";
p4.xbm=false;
p4.xsm=14;
function xDk(value)
{
this.xxk=Math.floor(Math.pow(10,this.xsm-1)+0.1);
var x9l=typeof value;
if( (x9l =="undefined") || (value === null) )
{
}
else if(x9l =="number")
{
this.xqk(value);
}
else if(x9l =="string")
{
this.xBk(value);
}
else if(x9l =="object")
{
if(value instanceof xDk)
{
this.xNl(value);
}
else
{
var xik="(unknown)";
if(value && value.constructor && value.constructor.toString)
{
xik=value.constructor.toString();
}
throw new Error("Invalid type: "+xik);
}
}
else
{
throw new Error("Invalid type: "+x9l);
}
}
p4.xNl=function(xql)
{
this.xUl=xql.xUl;
this.xbm=xql.xbm;
}
p4.toString=function()
{
if(this.xbm)
{
return"-"+this.xUl;
}
else
{
return this.xUl;
}
}
p4.xok=function()
{
return (this.xUl =="");
}
p4.xEm=function(value, x0l)
{
this.xUl=this.xPk(value);
if(this.xok()) x0l=false;
this.xbm=x0l;
}
p4.xBk=function(value)
{
var x0l=false;
if(value.charAt(0) =="-")
{
x0l=true;
value=value.substr(1);
}
if(! value.match(/^[0-9]*$/))
{
throw new Error("Invalid value");
}
value=this.xPk(value);
if(value =="")
{
x0l=false;
}
this.xUl=value;
this.xbm=x0l;
}
p4.x5l=function(xZl, xWm, length)
{
var xYl=xZl.length-xWm;
if(xYl <= 0)
{
return 0;
}
else
{
var xBl=xYl-length;
if(xBl < 0) xBl=0;
var substr=xZl.substring(xBl,xYl);
substr=substr.replace(/^0+/,"");
if(substr.length == 0) return 0;
return parseInt(substr);
}
}
p4.xdl=function(i, length)
{
var xnd=""+i;
xnd=this.xck(length-xnd.length)+xnd;
return xnd;
}
p4.xDl=function(xCc, xre)
{
xCc=this.xPk(xCc);
xre=this.xPk(xre);
if(xCc.length > xre.length) return 1;
if(xCc.length < xre.length) return -1;
var xtl=xCc.length;
var xJl, xml;
for(var i=0; i < xtl; i++)
{
xJl=xCc.charCodeAt(i);
xml=xre.charCodeAt(i);
if(xJl > xml) return 1;
if(xJl < xml) return -1;
}
return 0;
}
p4.xxm=function(s)
{
var xnk=s.length;
var xQk=0;
var xAl;
while(xnk > 0)
{
xAl=xnk-1;
if(s.charAt(xAl) !="0") break;
xQk++;
xnk--;
}
if(xQk > 0)
{
s=s.substr(0,xnk);
}
return [s,xQk];
}
p4.xPk=function(s)
{
var xrm=0;
while(xrm < s.length)
{
if(s.charAt(xrm) !="0") break;
xrm++;
}
if(xrm > 0)
{
return s.substr(xrm);
}
else
{
return s;
}
}
p4.xOm=function(xCl,xtl)
{
if(xCl.length < xtl)
{
xCl=this.xck(xtl-xCl.length)+xCl;
}
return xCl;
}
p4.xck=function(x1l)
{
var s="000000000000000000000000000000000000000000000000000000000";
var xnd="";
while(xnd.length < x1l)
{
xnd += s.substr(0,x1l-xnd.length);
}
return xnd;
}
p4.xGl=function(xCc)
{
if(xCc < 0.0)
{
throw new Error("Negative");
}
if(xCc < 1.0)
{
return"";
}
var xLk=""+xCc;
if(/^[0-9]+$/.test(xLk))
{
return xLk;
}
else
{
var exp=Math.floor(Math.log(xCc)/Math.log(10))+1;
xCc *= Math.pow(10,-exp);
if(xCc >= 1.0)
{
exp += 1;
xCc *= 0.1;
}
else if(xCc < 0.1)
{
exp -= 1;
xCc *= 10;
}
var xmm=""+xCc;
if(xmm.substr(0,2) !="0.")
{
throw new Error("Internal error");
}
xmm=xmm.substr(2);
if(xmm.length < exp)
{
xmm += this.xck(exp-xmm.length);
}
else
{
xmm=xmm.substr(0,exp);
}
return xmm;
}
}
p4.xFl=function(s)
{
s=this.xPk(s);
if(s =="")
{
return 0.0;
}
else
{
var xek=17;
if(s.length > xek)
{
return parseFloat(s.substr(0,xek))*Math.pow(10,s.length-xek);
}
else
{
return parseFloat(s);
}
}
}
p4.xCm=function()
{
var xCc=this.xUl;
var xnd="";
var xlk=this.xsm-1;
var xwm=this.xxk;
var xFk=Math.floor(1+(xCc.length-1)/xlk);
var xWm=(xFk-1)*xlk;
var xUk;
var xnm=0;
for(var x1k=0; x1k < xFk; x1k++)
{
xUk=this.x5l(xCc,xWm,xlk);
xUk += xnm;
xnm=(xUk & 1)? xwm : 0;
xUk=Math.floor(0.5*xUk);
xnd += this.xdl(xUk, xlk);
xWm -= xlk;
}
var xAk=new xDk();
if(xnm != 0)
{
xAk.xUl="1";
xAk.xbm=this.xbm;
}
this.xUl=this.xPk(xnd);
return xAk;
}
p4.xnl=function(xam, xol)
{
var xyl=17;
var xXk=1e17;
var xTk=0;
var xCc=new xDk(xam);
var xre=new xDk(xol);
if(xCc.xUl.length > xyl)
{
xTk += xCc.xUl.length-xyl;
xCc.xUl=xCc.xUl.substr(0,xyl);
}
if(xre.xUl.length > xyl)
{
xTk -= xre.xUl.length-xyl;
xre.xUl=xre.xUl.substr(0,xyl);
}
var xll=xCc.x4l();
var xWl=xre.x4l();
var xwk=xll/xWl;
xwk *= xXk;
xTk -= xyl;
var xem=new xDk(xwk);
if(xTk > 0)
{
xem.xUl += this.xck(xTk);
}
else
{
var xtl=xem.xUl.length;
if(xtl <= -xTk)
{
xem.xqk(0);
}
else
{
xem.xUl=xem.xUl.substr(0,xtl+xTk);
}
}
return xem;
}
p4.xgm=function(xdm)
{
if(xdm.xok())
{
throw new Error("Divide by zero");
}
if( (xdm.xUl =="2") && (xdm.xbm == false) )
{
return this.xCm();
}
var xem=new xDk();
var xAk=new xDk(this);
var xbk;
while(true)
{
if(xAk.xok())
{
break;
}
xbk=this.xnl(xAk,xdm);
if(xbk.xok())
{
if(this.xbm != xAk.xbm)
{
if(xAk.xbm == xdm.xbm)
{
xbk.xqk(1);
}
else
{
xbk.xqk(-1);
}
}
else
{
break;
}
}
xem=xem.xQl(xbk);
xAk=xAk.x2l(xbk.x3l(xdm));
}
this.xNl(xem);
return xAk;
}
p4.xsk=function(xCc, xre)
{
xCc=this.xPk(xCc);
xre=this.xPk(xre);
var xUm=this.xDl(xCc,xre);
if(xUm == 0) return ["",false];
var x0l=false;
if(xUm < 0)
{
var x9l=xre;
xre=xCc;
xCc=x9l;
x0l=true;
}
var xnd="";
var xZf=this.xxm(xre);
var xVl=xZf[1];
if(xVl > 0)
{
xre=xZf[0];
var xGk=xCc.length-xVl;
xZf=this.xJk(xCc,xGk);
xnd=xZf[1]+xnd;
xCc=xZf[0];
}
var xlk=this.xsm-1;
var xLl=this.xxk;
var xkl=xCc.length;
var xpk=xre.length;
var xWm=0;
var xnm=0;
var xbl, xVk, xcm;
while(xWm < xkl)
{
if( (xWm >= xpk) && (xnm == 0) )
{
xnd=xCc.substr(0,xkl-xWm)+xnd;
break;
}
xbl=this.x5l(xCc,xWm,xlk);
xVk=this.x5l(xre,xWm,xlk);
xcm=xbl-xVk+xnm;
if(xcm >= 0)
{
xnm=0;
}
else
{
xnm=-1;
xcm += xLl;
}
xnd=this.xdl(xcm, xlk)+xnd;
xWm += xlk;
}
return [xnd,x0l];
}
p4.xSm=function(s, xlk)
{
var xnd=[];
var xrl=s.length;
var xvl;
var xVm;
while(true)
{
if(xrl <= 0) break;
xvl=xrl-xlk;
if(xvl < 0) xvl=0;
xVm=s.substring(xvl,xrl);
xVm=xVm.replace(/^0+/,"");
xnd.push(parseInt(xVm));
xrl -= xlk;
}
return xnd;
}
p4.xym=function(xCc, xre)
{
xCc=this.xPk(xCc);
xre=this.xPk(xre);
var xKl=0;
var xZf=this.xxm(xCc);
xCc=xZf[0];
xKl += xZf[1];
xZf=this.xxm(xre);
xre=xZf[0];
xKl += xZf[1];
var xnd="";
var xlk=Math.floor((this.xsm-3)/2);
if(xlk < 1) xlk=1;
var xmk=Math.floor(1+(xCc.length-1)/xlk);
var xAm=Math.floor(1+(xre.length-1)/xlk);
var xSk=xmk+xAm-1;
var xXl, xvm, xNm, xel, xum, xgl, xfl;
var xnm=0;
var xKk;
var xzl=this.xSm(xCc,xlk);
var xJm=this.xSm(xre,xlk);
for(xKk=0; xKk < xSk; xKk++)
{
xvm=xKk-xAm+1;
if(xvm < 0) xvm=0;
xNm=xKk+1;
if(xNm > xmk) xNm=xmk;
xum=0;
xel=xKk-xvm;
for(xXl=xvm; xXl < xNm; xXl++)
{
var x7l=xzl[xXl];
var xjk=xJm[xel];
xum += x7l*xjk;
xel--;
}
xum += xnm;
xgl=this.xdl(xum, xlk);
if(xgl.length > xlk)
{
xfl=xgl.length-xlk;
xnm=parseInt(xgl.substr(0, xfl));
xgl=xgl.substr(xfl);
}
else
{
xnm=0;
}
xnd=xgl+xnd;
}
if(xnm != 0)
{
xnd=(""+xnm)+xnd;
}
if(xKl != 0)
{
xnd += this.xck(xKl);
}
return xnd;
}
p4.xJk=function(s, xGk)
{
var xLm, xSl;
if(xGk < 0)
{
xLm="";
xSl=this.xck(-xGk)+s;
}
else if(xGk > s.length)
{
xLm=s+this.xck(xGk-s.length);
xSl="";
}
else
{
xLm=s.substr(0,xGk);
xSl=s.substr(xGk);
}
return [xLm,xSl];
}
p4.xEl=function(xCc, xre)
{
xCc=this.xPk(xCc);
xre=this.xPk(xre);
if(xCc.length < xre.length)
{
var xxl=xCc;
xCc=xre;
xre=xxl;
}
var xnd="";
var xZf=this.xxm(xCc);
var xVl=xZf[1];
var xGk;
if(xVl > 0)
{
xCc=xZf[0];
xGk=xre.length-xVl;
xZf=this.xJk(xre,xGk);
xnd=xZf[1]+xnd;
xre=xZf[0];
}
xZf=this.xxm(xre);
xVl=xZf[1];
if(xVl > 0)
{
xre=xZf[0];
xGk=xCc.length-xVl;
xZf=this.xJk(xCc,xGk);
xnd=xZf[1]+xnd;
xCc=xZf[0];
}
var xlk=this.xsm;
var xkl=xCc.length;
var xpk=xre.length;
var xWm=0;
var xnm=0;
var xbl, xVk, xgl, xfl;
while(xWm < xkl)
{
if( (xWm >= xpk) && (xnm == 0) )
{
xnd=xCc.substr(0,xkl-xWm)+xnd;
break;
}
xbl=this.x5l(xCc,xWm,xlk);
xVk=this.x5l(xre,xWm,xlk);
xgl=this.xdl(xbl+xVk+xnm, xlk);
if(xgl.length > xlk)
{
xfl=xgl.length-xlk;
xnm=parseInt(xgl.substr(0, xfl));
xgl=xgl.substr(xfl);
}
else
{
xnm=0;
}
xnd=xgl+xnd;
xWm += xlk;
}
if(xnm != 0)
{
xnd=(""+xnm)+xnd;
}
return xnd;
}
p4.xcl=function(xCc, xul, xre, xdk)
{
var xzm, x0l;
if(xul == xdk)
{
xzm=this.xEl(xCc,xre);
x0l=xul;
}
else
{
var xnd=this.xsk(xCc,xre);
xzm=xnd[0];
x0l=xul;
if(xnd[1])
{
x0l=!x0l;
}
}
return [xzm,x0l];
}
p4.xQl=function(xre)
{
var xzm=this.xcl(this.xUl, this.xbm, xre.xUl, xre.xbm);
var xnd=new xDk();
xnd.xEm(xzm[0],xzm[1]);
return xnd;
}
p4.x2l=function(xre)
{
var xzm=this.xcl(this.xUl, this.xbm, xre.xUl, !xre.xbm);
var xnd=new xDk();
xnd.xEm(xzm[0],xzm[1]);
return xnd;
}
p4.xhm=function(xre)
{
if(this.xbm && (!xre.xbm)) return -1;
if(xre.xbm && (!this.xbm)) return 1;
var xnd=this.xDl(this.xUl, xre.xUl);
if(this.xbm) xnd=-xnd;
return xnd;
}
p4.x3l=function(xre)
{
var x0l=this.xbm;
if(xre.xbm) x0l=!x0l;
var xpl=this.xym(this.xUl, xre.xUl);
var xnd=new xDk();
xnd.xEm(xpl,x0l);
return xnd;
}
p4.xYk=function(xre)
{
var xem=new xDk(this);
var xAk=xem.xgm(xre);
return [xem,xAk];
}
p4.x4k=function(xre)
{
var xnd=this.xYk(xre);
return xnd[0];
}
p4.xRl=function(xre)
{
var xnd=this.xYk(xre);
return xnd[1];
}
p4.xak=function(xre)
{
return ((this.xUl == xre.xUl) && (this.xbm == xre.xbm));
}
p4.xqk=function(xRm)
{
this.xbm=(xRm < 0.0);
if(this.xbm)
{
xRm=-xRm;
}
this.xUl=this.xGl(xRm);
}
p4.x4l=function()
{
var xnd=this.xFl(this.xUl);
if( (!this.xok()) && (this.xbm) )
{
xnd=-xnd;
}
return xnd;
}
p4.x2k=function()
{
if(this.xbm)
{
throw new Error("Not supported");
}
var x1l=new xDk(this);
var xZf;
var xnd=[];
var xdm=new xDk("4294967296");
while(true)
{
xZf=x1l.xYk(xdm);
x1l=xZf[0];
var x6k=x1l.xok();
var xPl=xZf[1].x4l();
for(var i=0; i < 4; i++)
{
if(x6k && (xPl == 0)) break;
xnd.push(xPl & 0xff);
xPl >>= 8;
}
if(x6k) break;
}
xnd.reverse();
return xnd;
}
p4.xzk=function(xIk)
{
var xHm=3-((xIk.length+3)&3);
var xZf=[];
while(xHm-- > 0)
{
xZf.push(0);
}
xZf=xZf.concat(xIk);
var xnd=new xDk();
var xXk=new xDk("4294967296");
for(var xwl=0; xwl < xZf.length; xwl += 4)
{
xnd=xnd.x3l(xXk);
var xPl=(xZf[xwl]<<24) | (xZf[xwl+1]<<16) | (xZf[xwl+2]<<8) | (xZf[xwl+3]);
if(xPl < 0)
{
xPl += 0x100000000;
}
var xQl=new xDk(xPl);
xnd=xnd.xQl(xQl);
}
this.xNl(xnd);
}
p4.xrk=function(xOl, xQm)
{
if(this.xbm || xOl.xbm || xQm.xbm)
{
throw new Error("Negative");
}
var xTm=new xDk(this);
var xim=new xDk("2");
var xDm=new xDk(xOl);
var xfk;
var xnd=new xDk("1");
while(true)
{
xfk=xDm.xgm(xim);
if(!xfk.xok())
{
xnd=xnd.x3l(xTm);
xnd=xnd.xRl(xQm);
}
if(xDm.xok())
{
break;
}
xTm=xTm.x3l(xTm);
xTm=xTm.xRl(xQm);
}
return xnd;
}
p4.xBm=function()
{
return this.xbm;
}
var p5=xln.prototype;
p5.x2m=null;
p5.xsn=null;
p5.xkn=null;
function xln()
{
}
p5.xdn=function(x9m, xZm)
{
var xwn=new xDk("1");
var xtf=x9m.x3l(xZm);
var xpn=x9m.x2l(xwn).x3l(xZm.x2l(xwn));
var xXb=new xDk(17);
var xan=this.xXm(xXb,xpn);
var xAn=xan[2];
if(!xAn.xak(xwn))
{
if(!xpn.xRl(xAn).xok())
{
throw new Error("internal error");
}
throw new Error("not coprime");
}
var xI=xan[0];
if(xI.xBm())
{
xI=xI.xQl(xpn);
}
if(xI.xBm())
{
throw new Error("negative");
}
if(xI.xhm(xpn) >= 0)
{
throw new Error("too large");
}
var xW=xI.x3l(xXb).xRl(xpn);
if(!xW.xak(xwn))
{
throw new Error("failed2");
}
return [xXb,xI,xtf];
}
p5.xzn=function(xWm, xtf)
{
this.xsn=new xDk(xWm);
this.x2m=new xDk(xtf);
}
p5.x8m=function(xWm, xtf)
{
this.xkn=new xDk(xWm);
this.x2m=new xDk(xtf);
}
p5.x4m=function()
{
return this.xsn;
}
p5.xyn=function()
{
return this.xkn;
}
p5.xjn=function()
{
return this.x2m;
}
p5.xYm=function()
{
if( (!this.x2m) || (!this.xkn) )
{
throw new Error("Need private key");
}
}
p5.xBn=function()
{
if( (!this.x2m) || (!this.xsn) )
{
throw new Error("Need public key");
}
}
p5.xCn=function(message)
{
this.xYm();
if(message.xhm(this.x2m) >= 0)
{
throw new Error("Message too large");
}
return message.xrk(this.xkn,this.x2m);
}
p5.xin=function(message)
{
this.xBn();
if(message.xhm(this.x2m) >= 0)
{
throw new Error("Message too large");
}
return message.xrk(this.xsn,this.x2m);
}
p5.xXm=function(xcn, xnn)
{
var xGj=new xDk(xcn);
var xhl=new xDk(xnn);
var x=new xDk();
var y=new xDk("1");
var xvn=new xDk("1");
var x6m=new xDk();
while(!xhl.xok())
{
var x7m=xGj.xYk(xhl);
var xem=x7m[0];
xGj.xNl(xhl);
xhl=x7m[1];
var xmn=xvn.x2l(xem.x3l(x));
var xhn=x6m.x2l(xem.x3l(y));
xvn=x;
x6m=y;
x=xmn;
y=xhn;
}
var xW=xvn.x3l(xcn).xQl(x6m.x3l(xnn));
if(!xW.xak(xGj))
{
throw new Error("Failed3");
}
if(!xcn.xRl(xGj).xok())
{
throw new Error("Failed4");
}
if(!xnn.xRl(xGj).xok())
{
throw new Error("Failed5");
}
return [xvn, x6m, xGj];
}
var p6=xao.prototype;
function xao()
{
}
p6.xTn=function(x6n)
{
this.x1n();
var xVn=x6n.length;
var xwl=0;
var x8n=xVn;
while(true)
{
if(x8n >= 64)
{
this.xpo(x6n.slice(xwl,xwl+64));
x8n -= 64;
xwl += 64;
}
else
{
this.xLn(x6n.slice(xwl,xwl+x8n),xVn);
break;
}
}
return this.xZn(this.xPn);
}
p6.xFn=function(s)
{
var x7n=this.xbo(s);
this.xTn(x7n);
}
p6.x5n=function()
{
return this.xZn(this.xPn);
}
p6.xoo=function()
{
var x7n=this.xZn(this.xPn);
return this.xio(x7n);
}
p6.xio=function(xGj)
{
var xnd="";
for(var i=0; i < xGj.length; i++)
{
var xhl=xGj[i];
for(var xKk=0; xKk < 2; xKk++)
{
var xgo=(xhl >> 4)&0x0f;
if(xgo < 10)
{
xnd += String.fromCharCode(48+xgo);
}
else
{
xnd += String.fromCharCode(87+xgo);
}
xhl <<= 4;
}
}
return xnd;
}
//////////// private: ///////////////
p6.x1n=function()
{
this.xPn=[0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0];
}
p6.xno=function(xHn)
{
if(xHn.length != 16)
{
throw new Error("Should be 16");
}
var xrc=[];
var i;
for(i=0; i < 16; i++)
{
xrc[i]=xHn[i];
}
for(i=16; i < 80; i++)
{
xrc[i] = this.xjo(xrc[i-3] ^ xrc[i-8] ^ xrc[i-14] ^ xrc[i-16], 1);
}
var xMn=this.xPn.slice(0);
var xRm, xGn, xRn;
for(i=0; i < 80; i++)
{
if(i < 20)
{
xRm = (xMn[1] & xMn[2]) | ((xMn[1]^0xffffffff) & xMn[3]);
xGn = 0x5A827999;
}
else if(i < 40)
{
xRm = xMn[1] ^ xMn[2] ^ xMn[3];
xGn = 0x6ED9EBA1;
}
else if(i < 60)
{
xRm = (xMn[1] & xMn[2]) | (xMn[1] & xMn[3]) | (xMn[2] & xMn[3]);
xGn = 0x8F1BBCDC;
}
else
{
xRm = xMn[1] ^ xMn[2] ^ xMn[3];
xGn = 0xCA62C1D6;
}
xRn = (this.xjo(xMn[0], 5)+xRm+xMn[4]+xGn+xrc[i]) & 0xffffffff;
xMn[4] = xMn[3];
xMn[3] = xMn[2];
xMn[2] = this.xjo(xMn[1], 30);
xMn[1] = xMn[0];
xMn[0] = xRn;
}
for(i=0; i < 5; i++)
{
xRn=this.xPn[i]+xMn[i];
xRn &= 0xffffffff;
this.xPn[i]=xRn;
}
}
p6.xpo=function(x6n)
{
if(x6n.length != 64)
{
throw new Error("Should be 64");
}
var xko=this.xdo(x6n);
this.xno(xko);
}
p6.xLn=function(x6n, xco)
{
var xKn=xco & 63;
var xYn=x6n.slice(0,xKn);
xYn.push(128);
if(xYn.length < 56)
{
while(xYn.length < 56)
{
xYn.push(0);
}
}
else
{
while(xYn.length < 120)
{
xYn.push(0);
}
}
xco *= 8;
var xfo=this.xZn([Math.floor(xco/0x100000000), xco&0xffffffff]);
xYn=xYn.concat(xfo);
if(xYn.length == 64)
{
this.xpo(xYn);
}
else
{
this.xpo(xYn.slice(0,64));
this.xpo(xYn.slice(64,128));
}
}
p6.xjo=function(xhl, xeo)
{
xhl &= 0xffffffff;
var xnd=this.xQn(xhl, xeo);
var xW=this.xQn(xnd, -xeo);
if(xhl != xW)
{
throw new Error("Failed");
}
return xnd;
}
p6.xQn=function(xhl, xeo)
{
xeo &= 31;
if(xeo == 0) return xhl;
var xnd=(xhl << xeo)&0xffffffff;
var x3n=32-xeo;
var xmo=0x7fffffff >> (x3n-1);
var x9n=(xhl >> x3n)&xmo;
xnd |= x9n;
return xnd;
}
p6.xdo=function(x6n)
{
if(x6n.length & 3)
{
throw new Error("Should be multiple of 4");
}
var xko=[];
var xql=0;
var i=0;
while(i < x6n.length)
{
xql <<= 8;
xql |= (x6n[i] & 0xff);
i++;
if( (i & 3) == 0)
{
xko.push(xql);
xql=0;
}
}
return xko;
}
p6.xZn=function(xHn)
{
var x7n=[];
var xrc, i, xIn;
for(i=0; i < xHn.length; i++)
{
xrc=xHn[i];
x7n.push((xrc >> 24)&0xff);
x7n.push((xrc >> 16)&0xff);
x7n.push((xrc >> 8)&0xff);
x7n.push((xrc)&0xff);
}
return x7n;
}
p6.xbo=function(s)
{
var xnd=[];
for(var i=0; i < s.length; i++)
{
xnd=xnd.concat(this.xho(s.charCodeAt(i)));
}
return xnd;
}
p6.xho=function(xSj)
{
var xnd;
if(xSj <= 0x7f)
{
xnd=[xSj];
}
else if(xSj <= 0x07ff)
{
xnd=[0xc0|((xSj>>6)&0x1f), 0x80|(xSj&0x3f)];
}
else if(xSj <= 0xffff)
{
xnd=[0xc0|((xSj>>12)&0x0f), 0x80|((xSj>>6)&0x3f), 0x80|(xSj&0x3f)];
}
else if(xSj <= 0x1fffff)
{
xnd=[0xc0|((xSj>>18)&0x07), 0x80|((xSj>>12)&0x3f), 0x80|((xSj>>6)&0x3f), 0x80|(xSj&0x3f)];
}
else if(xSj <= 0x3ffffff)
{
xnd=[0xc0|((xSj>>24)&0x03), 0x80|((xSj>>18)&0x3f), 0x80|((xSj>>12)&0x3f), 0x80|((xSj>>6)&0x3f), 0x80|(xSj&0x3f)];
}
else
{
xnd=[0xc0|((xSj>>30)&0x01), 0x80|((xSj>>24)&0x3f), 0x80|((xSj>>18)&0x3f), 0x80|((xSj>>12)&0x3f), 0x80|((xSj>>6)&0x3f), 0x80|(xSj&0x3f)];
}
return xnd;
}
var p7=xMo.prototype;
function xMo()
{
this.xto="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
}
p7.xIo=function(x7n)
{
var xnd="";
var xVn=x7n.length;
var xDc=0;
var xrl;
while(xDc < xVn)
{
xrl=xDc+3;
if(xrl > xVn) xrl=xVn;
xnd += this.xxo(x7n.slice(xDc,xrl));
xDc=xrl;
}
return xnd;
}
p7.xJo=function(xCl)
{
var xnd=[];
if( (xCl.length % 4) != 0)
{
this.xuo();
}
var xDc=0;
var xKo;
while(xDc < xCl.length)
{
xKo=this.xNo(xCl.substr(xDc,4));
xnd=xnd.concat(xKo);
xDc += 4;
}
return xnd;
}
p7.xxo=function(x7n)
{
var xnd="";
var xgo=x7n[0] >> 2;
xnd += this.xto.substr(xgo,1);
var xhl;
if(x7n.length < 2)
{
xhl=0;
}
else
{
xhl=x7n[1];
}
xgo=((x7n[0] & 0x03) << 4) | (xhl >> 4);
xnd += this.xto.substr(xgo,1);
if(x7n.length < 2)
{
xnd +="==";
}
else
{
if(x7n.length < 3)
{
xhl=0;
}
else
{
xhl=x7n[2];
}
xgo=((x7n[1] & 0x0f) << 2) | (xhl >> 6);
xnd += this.xto.substr(xgo,1);
if(x7n.length < 3)
{
xnd +="=";
}
else
{
xgo=xhl & 0x3f;
xnd += this.xto.substr(xgo,1);
}
}
return xnd;
}
p7.xNo=function(xCl)
{
if(xCl.length != 4)
{
this.xuo();
}
var xnd=[];
var xHo=this.xOo(xCl.charCodeAt(0));
var xLo=this.xOo(xCl.charCodeAt(1));
xnd[0]=(xHo << 2) | (xLo >> 4);
var i=xCl.charCodeAt(2);
if(i != 61)
{
xHo=xLo;
xLo=this.xOo(i);
xnd[1]=((xHo & 0x0f) << 4) | (xLo >> 2);
i=xCl.charCodeAt(3);
if(i != 61)
{
xHo=xLo;
xLo=this.xOo(i);
xnd[2]=((xHo & 0x03) << 6) | xLo;
}
}
return xnd;
}
p7.xOo=function(xGo)
{
if( (xGo >= 65) && (xGo <= 90))
{
return xGo-65;
}
else if( (xGo >= 97) && (xGo <= 122))
{
return xGo-71;
}
else if( (xGo >= 48) && (xGo <= 57))
{
return xGo+4;
}
else if(xGo == 43)
{
return 62;
}
else if(xGo == 47)
{
return 63;
}
this.xuo();
return 0;
}
p7.xuo=function()
{
throw new Error("Faulty Base64 data");
}
var p8=xdp.prototype;
function xdp()
{
this.xfp=new xln();
this.xQo=new xao();
this.xUo=new xMo();
}
p8.xSo=function(message, x4o)
{
this.xfp.xYm();
if(x4o)
{
this.xfp.xBn();
}
this.xQo.xFn(message);
var x4n=this.xQo.x5n();
var xtf=this.xfp.xjn();
var x1o=xtf.x2k();
var x0o=x1o.length-1;
if(x4n.length > x0o)
{
throw new Error("Key too short");
}
var xap="";
while(x4n.length < x0o)
{
var xZb=Math.floor(Math.random()*255);
x4n[x4n.length]=xZb;
xap += xZb+",";
}
var x3o=new xDk();
x3o.xzk(x4n);
var x5m=this.xfp.xCn(x3o);
if(x4o)
{
var x2o=this.xfp.xin(x5m);
if(! x2o.xak(x3o))
{
throw new Error("Internal error");
}
}
var xZo=x5m.x2k();
var x5o=this.xUo.xIo(xZo);
return x5o;
}
p8.x4o=function(message, xKf)
{
this.xfp.xBn();
var xWo=this.xUo.xJo(xKf);
var xbp=new xDk();
xbp.xzk(xWo);
var x2o=this.xfp.xin(xbp);
var x9o=x2o.x2k();
this.xQo.xFn(message);
var x4n=this.xQo.x5n();
if(x9o.length < x4n.length) return false;
for(var i=0; i < x4n.length; i++)
{
if(x9o[i] != x4n[i]) return false;
}
return true;
}
p8.xzn=function(xWm, xtf)
{
this.xfp.xzn(xWm, xtf);
}
p8.x8m=function(xWm, xtf)
{
this.xfp.x8m(xWm, xtf);
}