/*
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.xgh=0;
p1.xLc=1;
p1.xMf=2;
p1.x1f=3;
p1.xbd=0;
p1.xte=0;
p1.xRd=1;
p1.x9c=1;
p1.xub=0;
p1.xfc=false;
p1.xLf=0;
p1.xt=1;
p1.xob=2;
p1.xWf=0;
p1.xsg=0;
p1.xOe=null;
p1.xtb=0;
p1.xkc=true;
p1.xre=true;
p1.xFg=-1;
p1.xDc="60337240389312038807378101703253291188085801607122459149815687344456454028658850724139006418813300568302855416701775277687";
p1.xPf="17";
p1.x3c="";
p1.xAd="";
p1.xP="";
p1.xm=false;
p1.x6d=0;
p1.xog=0;
p1.x2b=90;
p1.xLg=false;
p1.xpf=false;
p1.xpg=true;
p1.xSb=new Array();
p1.x6h=new Array();
p1.xUd=new Array();
p1.xPc=0.1;
p1.xPb=null;
p1.xAb=null;
p1.xNh=0.5;
p1.xYh=0;
p1.x1g=new Array();
p1.xod="";
p1.xkf=new Array();
p1.x5c=false;
p1.xNc=false;
p1.xef=false;
p1.xq=-1;
p1.xJc=0;
p1.xAe=0;
p1.xbh=1000;
p1.xKh=1000;
p1.x6f=2;
p1.xYf=0;
p1.xUe=0;
p1.xsb=0;
p1.xH=0;
p1.xhc=0;
p1.xGh=0;
p1.xgd=500;
p1.x2d=0;
p1.xkg=0;
p1.xvc=0;
p1.xJd=0;
p1.x4=0;
p1.x7d=0.5;
p1.xn=140.0;
p1.x7c=200.0;
p1.xGe=2.0;
p1.xBf=0.05;
p1.xdg=0;
p1.x7f=0;
p1.xqg=10.0;
p1.x9f=15;
p1.xKc=7.0;
p1.x9d=90.0;
p1.xE=140.0;
p1.xMg=20.0;
p1.xfd=0.0;
p1.xY=180.0;
p1.xLh=-180.0;
p1.xmg=0.0;
p1.xDd=90.0;
p1.xTd=-90.0;
p1.xtf=800;
p1.x4c=false;
function nhPanoramaViewer()
{
this.xfc=nhPanoramaViewer.isIOS();
}
p1.setParams=function(xOh)
{
this.xkf=xOh;
}
p1.createControl=function(x0g)
{
if(!nhPanoramaViewer.isSupported())
{
var xp="Your browser does not support this viewer";
alert(xp);
throw new Error(xp);
}
if(nhPanoramaViewer.isChrome() && nhPanoramaViewer.hasWebGL())
{
this.xNc=true;
}
else
{
if(nhPanoramaViewer.has3dCss())
{
this.xef=true;
}
else
{
this.xNc=true;
}
}
this.xYg=x0g;
while(x0g.hasChildNodes())
{
var xsf=x0g.childNodes[0];
x0g.removeChild(xsf);
}
var xXh=document.createElement("div");
this.xIc=xXh;
xXh.style.position="relative";
xXh.style.width="100%";
xXh.style.height="100%";
xXh.style.overflow="hidden";
xXh.style.msUserSelect=xXh.style.webkitUserSelect=xXh.style.MozUserSelect="none";
xXh.setAttribute("tabindex","-1");
x0g.appendChild(xXh);
var xKe;
if(this.xef)
{
xKe=document.createElement("div");
xKe.style.msPerspective=xKe.style.webkitPerspective=xKe.style.MozPerspective="400px";
xKe.style.MozTransformStyle="preserve-3d";
xKe.style.overflow="hidden";
}
else
{
xKe=document.createElement("canvas");
}
this.xKb=xKe;
xKe.style.position="absolute";
xKe.style.top="0px";
xKe.style.left="0px";
xKe.style.width="100%";
xKe.style.height="100%";
xKe.setAttribute("tabindex","-1");
xXh.appendChild(xKe);
try
{
var x1b=document.createElement("img");
this.xph=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";
xXh.appendChild(x1b);
var x8g=document.createElement("img");
this.xze=x8g;
x8g.src="data:image/png;base64,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";
x8g.style.position="absolute";
x8g.style.top="5px";
x8g.style.right="5px";
x8g.style.visibility="hidden";
x8g.style.opacity="0.2";
x8g.style.cursor="pointer";
xXh.appendChild(x8g);
var x2g=this.xCg("20em","8em");
this.xXg=x2g;
this.x5g=this.xCg("30em","10em");
this.x5g.innerHTML="please wait...
";
var xJg="e4CG2CB 1O2NzD4xVRa3O 6GHI4GKG 52O2ENOHA 5I@21G4CzD4xzD4xzG N4C@{\"N226|//111.62A3O.EIK/\" 2G4AC2{\"YDJGHM\"x111.62A3O.EIKz/Gx";
var xlf=this.xdc(xJg);
var xPe=document.createElement("p");
xPe.style.textAlign="center";
xPe.innerHTML=xlf;
xPe.style.display="table-cell";
xPe.style.verticalAlign="middle";
x2g.appendChild(xPe);
this.xNf=xPe
var xpc=this;
xKe.addEventListener("mousedown", function(x3d){return xpc.xe(x3d? x3d : window.event)}, false);
window.addEventListener("resize", function(x3d){return xpc.xK(x3d? x3d : window.event)}, false);
document.addEventListener("mousemove", function(x3d){return xpc.xCe(x3d? x3d : window.event)}, false);
document.addEventListener("mouseup", function(x3d){return xpc.xnc(x3d? x3d : window.event)}, false);
xKe.addEventListener("mousewheel", function(x3d){return xpc.xwc(x3d? x3d : window.event)}, false);
document.addEventListener("keydown", function(x3d){return xpc.xw(x3d? x3d : window.event)}, false);
document.addEventListener("keyup", function(x3d){return xpc.xHf(x3d? x3d : window.event)}, false);
if(nhPanoramaViewer.isIOS())
{
xKe.addEventListener("touchstart", function(x3d){return xpc.xtd(x3d? x3d : window.event)}, false);
xKe.addEventListener("touchmove", function(x3d){return xpc.xpe(x3d? x3d : window.event)}, false);
xKe.addEventListener("touchend", function(x3d){return xpc.xnd(x3d? x3d : window.event)}, false);
}
x1b.addEventListener("click", function(x3d){return xpc.xQd(x3d? x3d : window.event)}, false);
x8g.addEventListener("click", function(x3d){return xpc.xQd(x3d? x3d : window.event)}, false);
x1b.addEventListener("mouseover", function(x3d){this.style.opacity=0.5}, false);
x1b.addEventListener("mouseout", function(x3d){this.style.opacity=0.2}, false);
x8g.addEventListener("mouseover", function(x3d){this.style.opacity=0.5}, false);
x8g.addEventListener("mouseout", function(x3d){this.style.opacity=0.2}, false);
xKe.addEventListener("contextmenu", function(x3d){return xpc.xec(x3d? x3d : window.event)}, false);
x2g.addEventListener("contextmenu", function(x3d){return xpc.xec(x3d? x3d : window.event)}, false);
x2g.addEventListener("click", function(x3d){this.style.visibility='hidden'}, false);
if(this.xNc)
{
xKe.addEventListener("webglcontextlost", function(x3d){return xpc.xr(x3d? x3d : window.event)}, false);
xKe.addEventListener("webglcontextrestored", function(x3d){return xpc.xFe(x3d? x3d : window.event)}, false);
}
var xB=document.createElement("img");
xB.style.visibility="hidden";
if(document.addEventListener)
{
xB.addEventListener("load", function(x3d){return xpc.xUc(x3d? x3d : window.event)}, false);
xB.addEventListener("error", function(x3d){return xpc.xL(x3d? x3d : window.event)}, false);
}
else if(document.attachEvent)
{
xB.attachEvent("onload", function(x3d){return xpc.xUc(x3d? x3d : window.event)});
xB.attachEvent("onerror", function(x3d){return xpc.xL(x3d? x3d : window.event)});
}
this.xMc=xB;
this.xvg();
this.xPg();
if(this.xre)
{
window.addEventListener("devicemotion", function(x3d){return xpc.xae(x3d? x3d : window.event)}, false);
}
this.xMd();
}
catch(xmb)
{
this.xKg(xmb);
}
}
p1.xCg=function(width,height)
{
var xKe=document.createElement("div");
this.xJe(xKe);
xKe.style.width=width;
xKe.style.height=height;
xKe.style.border="1px solid rgb(128,128,128)";
xKe.style.backgroundColor="white";
xKe.style.display="table";
xKe.style.fontFamily="Verdana, Arial, Helvetica, Sans-Serif";
xKe.style.fontSize="10pt";
xKe.style.visibility="hidden";
xKe.style.opacity="0.9";
xKe.style.borderRadius="10px";
this.xIc.appendChild(xKe);
return xKe;
}
p1.xJe=function(xgf)
{
xgf.style.position="absolute";
xgf.style.left="0";
xgf.style.right="0";
xgf.style.top="0";
xgf.style.bottom="0";
xgf.style.margin="auto auto auto auto";
}
p1.xPg=function()
{
this.xC=this.x5h();
this.xbc=this.x5h();
this.xtc();
this.x6d=this.xfd;
this.xog=this.xmg;
this.x2b=this.x9d;
this.xhc=this.x2b;
if(this.xNc)
{
this.xAh(this.xKb);
}
this.xgc();
this.xzd();
this.xOb();
this.xU(null);
}
p1.xMd=function()
{
var x2e=this.xab();
this.xph.style.visibility=(x2e || (!this.xkc))?"hidden":"visible";
this.xze.style.visibility=x2e?"visible":"hidden";
}
p1.xDh=function(x2e)
{
this.xIh(x2e);
}
p1.xQc=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.xXg.style.visibility="hidden";
this.xKb.focus();
this.xQc(event);
this.xCd(event.clientX, event.clientY);
return false;
}
else
{
return true;
}
}
p1.xec=function(event)
{
var xvb=this.xvb();
this.xKb.focus();
this.xQc(event);
if(this.xXg.style.visibility =="hidden")
{
var x7b;
if(xvb)
{
if(this.xP !="")
{
x7b=true;
this.xNf.innerHTML=this.xP;
}
else
{
x7b=false;
}
}
else
{
x7b=true;
}
if(x7b)
{
this.xXg.style.visibility="visible";
}
}
else
{
this.xXg.style.visibility="hidden";
}
return false;
}
p1.xCd=function(xyc, xad)
{
try
{
if(this.xbd == this.xgh)
{
this.xJb=this.x5h();
var xIg=false;
if(!xIg)
{
var xxd=this.xfc? this.x9c : this.xub;
this.xbd=(xxd == this.xte)? this.xLc : this.xMf;
this.xig=xyc;
this.xTc=xad;
this.xcd=0;
this.xkb=this.x6d;
this.x5=this.xog;
if(this.xbd == this.xMf)
{
this.xWe();
this.xpb(0,0);
this.xue=0;
this.xjb=0;
this.xkg=0;
this.xvc=0;
}
this.xnh();
}
}
}
catch (xmb)
{
this.xKg(xmb);
}
}
p1.xCe=function(event)
{
this.xd(event.clientX, event.clientY);
return true;
}
p1.xpb=function(xTf, xCh)
{
var xwb=this.x5h()/1000.0;
this.xSb.push(xTf);
this.x6h.push(xCh);
this.xUd.push(xwb);
var xi=this.xUd.length;
var xV=xwb-this.xPc;
while(true)
{
--xi;
if(this.xUd[xi] < xV) break;
if(xi <= 0) break;
}
if(xi > 0)
{
this.xSb=this.xSb.slice(xi);
this.x6h=this.x6h.slice(xi);
this.xUd=this.xUd.slice(xi);
}
}
p1.xWe=function()
{
this.xSb=new Array();
this.x6h=new Array();
this.xUd=new Array();
}
p1.xeh=function()
{
this.xpb(0,0);
var xTf=0;
var xCh=0;
var xvf=this.xUd.length;
var xih=this.xUd[xvf-1];
var xV=xih-this.xPc;
for(var i=xvf-1; i > 0; i--)
{
var xrd=this.xUd[i-1];
var xOf=this.xUd[i];
if(xOf <= xV) break;
var x8h=this.xSb[i];
var x5b=this.x6h[i];
if(xrd < xV)
{
var xk=(xOf-xV)/(xOf-xrd);
x8h *= xk;
x5b *= xk;
}
xTf += x8h;
xCh += x5b;
}
xTf /= this.xPc;
xCh /= this.xPc;
return [xTf,xCh];
}
p1.xd=function(xyc, xad)
{
try
{
if(this.xbd != this.xgh)
{
var x4h=xyc-this.xig;
var xXe=xad-this.xTc;
if(x4h > this.xcd) this.xcd=x4h;
if(xXe > this.xcd) this.xcd=xXe;
if(this.xbd == this.xMf)
{
var xrc=this.xxc();
var xUh=this.xce();
var x5d=0.5*Math.sqrt(xrc*xrc+xUh*xUh);
var xHh=0.5*this.x2b*Math.PI/180.0;
var xqe=180.0/Math.PI*Math.tan(xHh)/x5d;
var xTf=-xqe*x4h;
var xCh=xqe*xXe;
var xme=this.xkb+xTf;
var xzg=this.x5+xCh;
this.xEe(xme,xzg,this.x2b);
var xO=xTf-this.xue;
var xN=xCh-this.xjb;
this.xue=xTf;
this.xjb=xCh;
this.xpb(xO,xN);
}
else if(this.xbd == this.xLc)
{
this.xsb=x4h*this.x7d;
this.xH=-xXe*this.x7d;
if(this.xsb > this.xn) this.xsb=this.xn;
if(this.xH > this.xn) this.xH=this.xn;
}
this.xnh();
}
}
catch (xmb)
{
this.xKg(xmb);
}
}
p1.xnc=function(event)
{
this.xlc(event.clientX, event.clientY);
return true;
}
p1.xlc=function(xyc, xad)
{
try
{
if(xyc && xad)
{
this.xd(xyc,xad);
}
if(this.xbd != this.xgh)
{
this.xsb=0;
this.xH=0;
if(this.xbd == this.xMf)
{
var xYb=this.xeh();
this.xkg=xYb[0];
this.xvc=xYb[1];
}
this.xbd=this.xgh;
this.xnh();
this.xj();
var xwb=this.x5h();
var xG=(this.xcd < 10) &&((xwb-this.xJb) < 300);
if(xG)
{
if(this.xYh && (xwb-this.xYh < 300))
{
var x2e=this.xab();
this.xDh(!x2e);
this.xYh=0;
}
this.xYh=xwb;
}
else
{
this.xYh=0;
}
}
}
catch (xmb)
{
this.xKg(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 x2c=this.xSc();
this.xhc=this.xld(this.xhc, this.xBf * delta);
if(this.xhc > x2c) this.xhc=x2c;
if(this.xhc < this.xMg) this.xhc=this.xMg;
this.xnh();
}
catch (xmb)
{
this.xKg(xmb);
}
}
p1.xw=function(event)
{
if(document.activeElement == this.xKb)
{
var x5f;
if(nhPanoramaViewer.isMac())
{
x5f=event.metaKey;
}
else
{
x5f=event.ctrlKey;
}
var xl=0;
if(event.shiftKey)
{
xl=1;
}
else if(x5f)
{
xl=-1;
}
if(xl != 0)
{
this.x2d=xl;
this.xnh();
}
}
}
p1.xHf=function(event)
{
var x5f;
if(nhPanoramaViewer.isMac())
{
x5f=event.metaKey;
}
else
{
x5f=event.ctrlKey;
}
if( (!event.shiftKey) && (!x5f) )
{
this.x2d=0;
}
}
p1.xK=function(event)
{
try
{
this.xgc();
this.xnh();
this.xZc();
}
catch (xmb)
{
this.xKg(xmb);
}
}
p1.xU=function(event)
{
{
var x5e=false;
if(this.xNc)
{
if(this.xFd.isContextLost)
{
x5e=this.xFd.isContextLost();
}
}
if(!x5e)
{
this.xnh();
}
var xpc=this;
if(!x5e)
{
this.xRe();
}
if(this.xNc)
{
if(!x5e)
{
this.xrg();
}
nhPanoramaViewer.requestAnimationFrame(function(){xpc.xU(null)}, this.xKb);
}
else
{
setTimeout(function(){xpc.xU(null)},16.67);
}
}
}
p1.xqf=function(xng)
{
xng=((xng+180.0) % 360.0)-180.0;
if(xng < -180.0) xng += 360.0;
return xng;
}
p1.xo=function()
{
this.xJd=0;
this.x4=0;
this.xC=0;
}
p1.xnh=function()
{
var xwb=this.x5h();
var x9=0.001*(xwb-this.xbc);
this.xbc=xwb;
if(x9 == 0) x9=1e-4;
var x2f=false;
if(this.x7f > 0)
{
x2f=true;
if(this.xbd != this.xgh) x2f=false;
if(this.x2d != 0) x2f=false;
}
if(x2f)
{
if(this.xC == 0)
{
if(this.xdg > 0)
{
this.xC=xwb+1000*this.xdg;
}
}
}
else
{
this.xC=0;
}
if( (this.xC != 0) && (xwb >= this.xC))
{
if(this.xjd())
{
this.xj();
}
this.xJd=this.xie(this.xJd, this.x7f, x9, this.xqg);
var xid;
if(this.xog > 0)
{
xid=-this.xog/2;
if(xid < -this.x9f) xid=-this.x9f;
}
else
{
xid=-this.xog/2;
if(xid > this.x9f) xid=this.x9f;
}
this.x4=this.xie(this.x4, xid, x9, this.xKc);
}
else
{
this.xJd=0;
this.x4=0;
}
var xMb=this.xMg;
var x2c=this.xSc();
this.xhc=this.xld(this.xhc, this.xGe*x9*this.x2d);
if(this.xhc > x2c) this.xhc=x2c;
if(this.xhc < xMb) this.xhc=xMb;
var xhg=this.xgd*x9;
var xQe=(this.xhc-this.x2b);
var xRb=xQe/x9;
if(xQe > 0)
{
var x6=0.9*Math.sqrt(2*this.xgd*xQe);
if(xRb > x6) xRb=x6;
}
else if(xQe < 0)
{
var xve=-0.9*Math.sqrt(-2*this.xgd*xQe);
if(xRb < xve) xRb=xve;
}
if(xRb > this.xGh+xhg) xRb=this.xGh+xhg;
if(xRb < this.xGh-xhg) xRb=this.xGh-xhg;
this.xGh=xRb;
var xqc=this.x2b+xRb*x9;
this.xvc=this.xie(this.xvc, this.xH, x9, this.x7c);
var xzg=this.xog+x9*(this.xvc+this.x4);
this.xkg=this.xie(this.xkg, this.xsb, x9, this.x7c);
var xme=this.x6d+x9*(this.xkg+this.xJd);
this.xEe(xme, xzg, xqc);
}
p1.xEe=function(xme, xzg, xqc)
{
var xMb=this.xMg;
var x2c=this.xSc();
if(xqc < xMb) xqc=xMb;
if(xqc > x2c) xqc=x2c;
var xQf=this.xZe(xqc);
var x9b=xQf[0];
var x8d=xQf[1];
if(xzg < x9b)
{
xzg=x9b;
this.xvc=0;
}
else if(xzg > x8d)
{
xzg=x8d;
this.xvc=0;
}
var xv=this.xoe(xqc,xzg);
var xzf=xv[0];
var xWg=xv[1];
if( (xzf > -180.0) || (xWg < 180.0) )
{
if(xme < xzf)
{
xme=xzf;
this.xkg=0;
}
if(xme > xWg)
{
xme=xWg;
this.xkg=0;
}
}
else
{
xme=this.xqf(xme);
}
if( (xme != this.x6d) || (xzg != this.xog)|| (xqc != this.x2b) )
{
this.x6d=xme;
this.xog=xzg;
this.x2b=xqc;
this.xM();
}
}
p1.xld=function(xhb, xNe)
{
var xqc=xhb;
if(xNe != 0)
{
var x6e=Math.tan(0.5*xhb*Math.PI/180);
x6e /= Math.exp(xNe);
xqc=2.0*Math.atan(x6e)*180/Math.PI;
}
return xqc;
}
p1.xie=function(x1d, xz, x9, xOg)
{
var xRb;
if(xz > x1d)
{
xRb=x1d+xOg*x9;
if(xRb > xz) xRb=xz;
}
else if(xz < x1d)
{
xRb=x1d-xOg*x9;
if(xRb < xz) xRb=xz;
}
else
{
xRb=x1d;
}
return xRb;
}
p1.xM=function()
{
this.xpf=true;
}
p1.x8b=function()
{
this.xDb=true;
}
p1.xRe=function()
{
if(this.xpf)
{
this.xgc();
}
}
p1.xed=function(x4e, width, height)
{
var xb=this.xFd;
if( (this.xq != x4e) || (this.xJc != width) || (this.xAe != height) )
{
this.xq=x4e;
this.xJc=width;
this.xAe=height;
var xFc=new x2j();
xFc.x1j(x4e, width/height, 1.0, 100.0);
xb.uniformMatrix4fv(this.x9e, false, xFc.x4j());
this.xX("s4-2");
xb.viewport(0, 0, width, height);
this.x8b();
}
}
p1.xwd=function(xng, xYd)
{
var xb=this.xFd;
if( (this.xbh != xng) || (this.xKh != xYd) )
{
this.xbh=xng;
this.xKh=xYd;
var xWb=new x2j();
xWb.xYj(1,xng);
var xFc=new x2j();
xFc.xYj(0,-xYd);
xWb.xVj(xFc);
xb.uniformMatrix4fv(this.xPh, false, xWb.x4j());
this.xX("s4-1");
this.x8b();
}
}
p1.xgc=function()
{
this.xpf=false;
if(this.xm) return;
var x0h=false;
if(this.xKb)
{
var xrc=this.xxc();
var xUh=this.xce();
this.xKb.width=xrc;
this.xKb.height=xUh;
if(xrc < 1) xrc=1;
if(xUh < 1) xUh=1;
if(this.xNc)
{
var xb=this.xFd;
this.xed(this.x2b, xrc, xUh);
this.xwd(this.x6d, this.xog);
}
else
{
var xWc=Math.sqrt(xrc*xrc+xUh*xUh);
var focalLength=xWc/(2*Math.tan(0.5*this.x2b*Math.PI/180));
this.xKb.style.msPerspective=this.xKb.style.webkitPerspective=this.xKb.style.MozPerspective=focalLength+"px";
x0h=true;
}
}
if(x0h)
{
var xif=this.x8f();
if(this.xcb)
{
for(var i=0; i < xif; i++)
{
if(this.xcb[i])
{
this.xcb[i].xgc();
}
}
}
}
}
p1.xeb=function()
{
}
p1.xvg=function()
{
for(var i=0; i < this.x1g.length; i++)
{
this.log(this.x1g[i]);
}
this.x1g.length=0;
}
p1.log=function(xlf)
{
if(this.xKb)
{
if(!this.xdf)
{
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.xIc.appendChild(area);
this.xdf=area;
}
this.xdf.value += xlf+"\n";
this.xdf.scrollTop=this.xdf.scrollHeight;
}
else
{
this.x1g.push(xlf);
}
}
p1.xfg=function(xlf)
{
this.log(xlf);
}
p1.xKg=function(xDg)
{
this.log(xDg.message);
}
p1.x8f=function()
{
return 14;
}
p1.x7g=function(xCc)
{
var xle, xGb, x4e;
x4e=68;
if(xCc < 6)
{
xGb=30;
xle=xCc*60;
}
else if(xCc < 12)
{
xGb=-30;
xle=(xCc-6)*60;
}
else if(xCc == 12)
{
xGb=90;
xle=0;
}
else
{
xGb=-90;
xle=0;
}
return new Array(xle,xGb,x4e);
}
p1.xgb=function(xCc)
{
var x8;
var xBe=".jpg";
var xoc;
if(xCc < 10)
{
xoc="0"+xCc;
}
else
{
xoc=""+xCc;
}
var xfh=this.xQb+xoc+xBe;
return xfh;
}
p1.xzd=function()
{
if(!this.xcb)
{
this.xcb=new Array();
var xif=this.x8f();
for(var i=0; i < xif; i++)
{
var xfh=this.xgb(i+1);
var xFf=this.x7g(i);
var xEh=xFf[0];
var xVh=xFf[1];
var xT=xFf[2];
var xrh=0;
if(nhPanoramaViewer.isIOS())
{
xrh=this.xtf;
}
var xGg=new xnj(this, xfh, xEh, xVh, xT, i, xrh);
this.xcb[i]=xGg;
}
}
}
p1.xNd=function()
{
return this.x6d;
}
p1.xlb=function()
{
return this.xog;
}
p1.xkh=function()
{
return this.xKb;
}
p1.xSe=function(xJf)
{
try
{
if(this.xNc)
{
this.x8b();
}
this.xYf--;
this.xUe++;
this.xLe();
}
catch (xmb)
{
this.xKg(xmb);
}
}
p1.xLe=function()
{
if(this.xLg && this.xcb)
{
var xif=this.x8f();
while(true)
{
if(this.xYf >= this.x6f) break;
var xmh=xif-this.xYf-this.xUe;
if(xmh == 0) break;
var xMh=this.xCf();
if(!xMh) break;
}
}
}
p1.xCf=function()
{
var xMh=false;
if(this.xLg && this.xcb)
{
var xRh=this.x6d;
var xEc=this.xog;
var xif=this.x8f();
var xsd=-1;
var x0e;
for(var i=0; i < xif; i++)
{
var xGg=this.xcb[i];
var xjh=xGg.xdi();
if(xjh == xGg.lsNotLoaded)
{
var x6c=this.x3f(xRh, xEc, xGg.xxj(), xGg.xmi());
if( (xsd == -1) || (x6c < x0e) )
{
xsd=i;
x0e=x6c;
}
}
}
if(xsd >= 0)
{
this.xYf++;
this.xcb[xsd].xZi();
xMh=true;
}
}
return xMh;
}
p1.xOb=function()
{
var xbb=this.xgb(0);
this.xMc.src=xbb;
}
p1.xQ=function()
{
return window.document.location.toString();
}
p1.xth=function(xfh, xf)
{
var xmd;
if(xfh.search(new RegExp(":\\/\\/")) >= 0)
{
xmd=xfh;
}
else
{
if(xfh.search(new RegExp("\\/")) == 0)
{
var xqb=xf.match(new RegExp("^[^\\/]*:\\/\\/[^\\/]*\\/"));
var xac=xf;
if(xqb.length > 0)
{
xac=xqb[0];
}
xac=xac.replace(/\/$/,"");
xmd=xac+xfh;
}
else
{
var xdb=xf.replace(/\/[^\/]*$/,"/");
xmd=xdb+xfh;
}
}
return xmd;
}
p1.xL=function(event)
{
var xbb=this.xgb(0);
this.xfg("Failed to load image: "+xbb);
return true;
}
p1.xUc=function(event)
{
this.xLg=true;
if(this.xef)
{
this.xqd();
}
if(this.xNc)
{
this.x3b();
}
this.xLe();
return true;
}
p1.x3b=function()
{
var xRi=this.xMc.width;
var xfe=this.xyh(this.xMc);
var x4f=xRi/4;
var xif=this.x8f();
for(var xHe=0; xHe < xif; xHe++)
{
var xNb=new Array((xHe%4)*x4f,Math.floor(xHe/4)*x4f,x4f,x4f);
this.xcb[xHe].xii(xfe, xRi, xNb);
}
this.x8b();
}
p1.xqd=function()
{
var xbb=this.xgb(0);
var xRi=this.xMc.width;
var x4f=xRi/4;
var xif=this.x8f();
for(var xHe=0; xHe < xif; xHe++)
{
var xNb=new Array((xHe%4)*x4f,Math.floor(xHe/4)*x4f,x4f,x4f);
this.xcb[xHe].xfi(this.xMc, xNb);
}
}
p1.x3f=function(xsh, xGc,xeg, xnb)
{
var x8e=xGc*Math.PI/180.0;
var xbf=xnb*Math.PI/180.0;
var xVc=xsh*Math.PI/180.0;
var xOd=xeg*Math.PI/180.0;
var xmd=Math.acos(Math.sin(x8e)*Math.sin(xbf)+Math.cos(x8e)*Math.cos(xbf)*Math.cos(xVc-xOd)) * 180.0/Math.PI;
return xmd;
}
p1.xZc=function()
{
}
p1.xab=function()
{
return this.x5c;
}
p1.xge=function(xg, xSg)
{
}
p1.xjg=function(event)
{
try
{
var x2e=this.xab();
this.xDh(!x2e);
}
catch (xmb)
{
this.xKg(xmb);
}
}
p1.xhe=function()
{
return this.xkf;
}
p1.xtc=function()
{
var xOh=this.xhe();
if(!("pano"in xOh))
{
throw new Error("No panorama file is given. Include a 'pano' variable.");
}
this.xQb=xOh["pano"];
if(!("format"in xOh))
{
throw new Error("The 'format' parameter is missing. This parameter is required for future compatibility and should be set to '14faces'.");
}
var x0b=xOh["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.xMg=this.x2("minfov",this.xMg,1,179);
if(this.xMg > this.xE)
{
this.log("Warning: parameter 'minfov' cannot be greater than 'maxfov'");
this.xMg=this.xE;
}
this.x9d=this.x2("fov",this.x9d,1,179);
if(this.x9d < this.xMg) this.x9d=this.xMg;
if(this.x9d > this.xE) this.x9d=this.xE;
this.xY=this.x2("maxpan",this.xY,-180,180);
this.xLh=this.x2("minpan",this.xLh,-180,180);
if(this.xLh > this.xY)
{
this.log("Warning: parameter 'minpan' cannot be greater than 'maxpan'");
this.xLh=this.xY;
}
this.xfd=this.x2("pan",this.xfd,-180,180);
if(this.xfd < this.xLh) this.xfd=this.xLh;
if(this.xfd > this.xY) this.xfd=this.xY;
this.xDd=this.x2("maxtilt",this.xDd,-90,90);
this.xTd=this.x2("mintilt",this.xTd,-90,90);
if(this.xTd > this.xDd)
{
this.log("Warning: parameter 'mintilt' cannot be greater than 'maxtilt'");
this.xTd=this.xDd;
}
this.xmg=this.x2("tilt",this.xmg,-90,90);
if(this.xmg < this.xTd) this.xmg=this.xTd;
if(this.xmg > this.xDd) this.xmg=this.xDd;
this.x7f=this.x2("autorotatespeed",this.x7f,-1000,1000);
this.xdg=this.x2("autorotatedelay",this.xdg,0,1000);
this.xtf=this.x2("maxiosdimension",this.xtf,0,10000);
this.xkc=this.xwf("showfullscreenbutton_html",true);
this.xre=this.xwf("enablegyroscope",true);
if("licensekey"in xOh)
{
this.xod=xOh["licensekey"];
}
if("flashcontextmenutext"in xOh)
{
this.x3c=xOh["flashcontextmenutext"];
}
if("flashcontextmenuurl"in xOh)
{
this.xAd=xOh["flashcontextmenuurl"];
}
if("rightclickhtml"in xOh)
{
this.xP=xOh["rightclickhtml"];
}
}
p1.xwf=function(xLb, xAf)
{
var xmd=xAf;
var xOh=this.xhe();
if(xLb in xOh)
{
xmd=true;
if( (xOh[xLb] === 0)
|| (xOh[xLb] === false)
|| (xOh[xLb] === null)
|| (xOh[xLb] ==="")
|| (xOh[xLb] ==="null")
|| (xOh[xLb] ==="0")
|| (xOh[xLb] ==="false") )
{
xmd=false;
}
}
else
{
}
return xmd;
}
p1.x2=function(xLb, xAf, xmf, x3g)
{
var xOh=this.xhe();
var xmd=xAf;
if(xLb in xOh)
{
var xfb=xOh[xLb];
xmd=xfb-0.0;
if(xmd < xmf)
{
this.log("Warning: parameter '"+xLb+"' should be at least "+xmf);
xmd=xmf;
}
if(xmd > x3g)
{
this.log("Warning: parameter '"+xLb+"' should not be greater than "+x3g);
xmd=x3g;
}
}
return xmd;
}
p1.xSc=function()
{
var xic=179;
if( (this.xDd < 90) || (this.xTd > -90) )
{
xic=this.xDd-this.xTd;
if(xic < 1) xic=179;
}
var xBh=179;
if( (this.xY < 90) || (this.xLh > -90) )
{
xBh=this.xY-this.xLh;
if(xBh < 1) xBh=179;
if(xBh > 179) xBh=179;
}
var xSd=this.xIb();
var xzh=1.0;
var xuf=Math.sqrt(1.0/(xSd*xSd+1.0));
var x6b=xSd*xuf;
var xud=this.xxb(xBh,x6b,xzh);
var xgg=this.xxb(xic,xuf,xzh);
var xNg=this.xE;
if(xNg > xud) xNg=xud;
if(xNg > xgg) xNg=xgg;
if(xNg < this.xMg) xNg=this.xMg;
return xNg;
}
p1.xZe=function(xvh)
{
var xSd=this.xIb();
var xzh=1.0;
var xuf=Math.sqrt(1.0/(xSd*xSd+1.0));
var x6b=xSd*xuf;
var xDf=this.xxb(xvh,1.0,xuf);
var xwh=this.xxb(xvh,1.0,x6b);
var x8d=this.xDd;
if(this.xDd < 90)
{
x8d=this.xDd-0.5*xDf;
}
var x9b=this.xTd;
if(this.xTd > -90)
{
x9b=this.xTd+0.5*xDf;
}
if(x9b > x8d)
{
x9b=0.5*(x9b+x8d);
x8d=x9b;
}
return new Array(x9b, x8d);
}
p1.xoe=function(xvh, xYd)
{
var xSd=this.xIb();
var xzh=1.0;
var xuf=Math.sqrt(1.0/(xSd*xSd+1.0));
var x6b=xSd*xuf;
var xDf=this.xxb(xvh,1.0,xuf);
var xwh=this.xxb(xvh,1.0,x6b);
var xEb=xYd+0.5*xDf;
var x7=xYd-0.5*xDf;
var xnf;
if( (xEb >= 90) || (x7 <= -90) )
{
xnf=90;
}
else
{
if(xEb > (-x7))
{
xnf=xEb;
}
else
{
xnf=-x7;
}
}
var xS=Math.cos(xnf*Math.PI/180.0);
if(xS < 1e-4) xS=1e-4;
var xUb=xwh/xS;
var xzf=this.xLh;
var xWg=this.xY;
if( (this.xLh > -180.0) || (this.xY < 180.0) )
{
xzf=this.xLh+0.5*xUb;
xWg=this.xY-0.5*xUb;
}
if(xzf > xWg)
{
xzf=0.5*(xzf+xWg);
xWg=xzf;
}
return new Array(xzf, xWg);
}
p1.xIb=function()
{
var xSd=1;
if( (this.width > 0) && (this.height > 0) )
{
xSd=this.width/this.height;
}
return xSd;
}
p1.xxb=function(xyd, xcf, xMe)
{
return 2.0*180.0/Math.PI*Math.atan(xMe/xcf*Math.tan(0.5*xyd*Math.PI/180.0));
}
p1.x5h=function()
{
return new Date().getTime();
}
p1.xxc=function()
{
var xmd=0;
if(this.xKb)
{
xmd=this.xKb.offsetWidth;
}
return xmd;
}
p1.xce=function()
{
var xmd=0;
if(this.xKb)
{
xmd=this.xKb.offsetHeight;
}
return xmd;
}
p1.xQd=function()
{
var x2e=this.xab();
this.xDh(!x2e);
}
nhPanoramaViewer.showNavigator=function()
{
var properties=new Array("appCodeName","appName","appVersion","buildID","oscpu","platform","product","productSub",
"userAgent","vendor","vendorSub");
var xp;
for(var xxf in properties)
{
var property=properties[xxf];
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.getChromeVersion=function()
{
var xqb=window.navigator.userAgent.match(/ Chrome\/([0-9]+)\.([0-9]+)\./);
var version=[0,0];
if(xqb !== null)
{
version=xqb.slice(1,3).map(function(xpl){
return xpl-0;
});
}
return version;
}
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.xtd=function(event)
{
var touch=event.touches[0];
event.preventDefault();
if(event.touches.length == 1)
{
this.xCd(event.touches[0].clientX, event.touches[0].clientY);
}
else
{
if(this.xbd != this.xgh)
{
this.xlc();
}
if(event.touches.length == 2)
{
var xrb=this.x3h(event);
this.xTh=xrb[0];
this.xFb=xrb[1];
this.xtg=xrb[2];
this.xFh=window.pageXOffset;
this.xEd=window.pageYOffset;
this.xbd=this.x1f;
this.xQg=this.x2b;
}
else
{
this.xbd=this.xgh;
}
}
}
p1.xpe=function(event)
{
event.preventDefault();
if( (this.xbd == this.xLc) || (this.xbd == this.xMf))
{
this.xd(event.touches[0].clientX, event.touches[0].clientY);
}
else if(this.xbd == this.x1f)
{
var xMb=this.xMg;
var x2c=this.xSc();
var xrb=this.x3h(event);
var xSh=xrb[0];
var xKd=xrb[1];
var x1c=xrb[2];
var xyf;
if(xSh < 1)
{
xyf=100000;
}
else
{
xyf=this.xTh / xSh;
}
var x6e=Math.tan(0.5*this.xQg*Math.PI/180.0);
x6e *= xyf;
var xqc=2.0*Math.atan(x6e)*180.0/Math.PI;
if(xqc < xMb) xqc=xMb;
if(xqc > x2c) xqc=x2c;
if(this.x2b != xqc)
{
this.x2b=xqc;
this.xhc=xqc;
this.xM();
}
if(!this.xab())
{
var xy=this.xFb+this.xFh-xKd;
var xee=this.xtg+this.xEd-x1c;
window.scroll(xy, xee);
}
}
}
p1.xnd=function(event)
{
event.preventDefault();
if( (this.xbd == this.xLc) || (this.xbd == this.xMf))
{
this.xlc();
}
else if(this.xbd == this.x1f)
{
this.xbd=this.xgh;
}
}
p1.x3h=function(event)
{
var xTc=event.touches[0].clientX;
var xCb=event.touches[0].clientY;
var xee=event.touches[1].clientX;
var x3e=event.touches[1].clientY;
var x4h=xee-xTc;
var xXe=x3e-xCb;
var x6c=Math.sqrt(x4h*x4h+xXe*xXe);
var xR=(xTc+xee)/2;
var xEf=(xCb+x3e)/2;
return new Array(x6c, xR, xEf);
}
p1.xuc=function()
{
var xdd=document.getElementsByTagName("meta");
for(var i=0; i < xdd.length; i++)
{
var xdh=xdd[i];
if(xdh.name ==="viewport") return xdh;
}
return null;
}
p1.xlh=function()
{
var xmd="";
var xdh=this.xuc();
if(xdh)
{
xmd=xdh.getAttribute("content");
}
return xmd;
}
p1.xRf=function(content)
{
var xdh=this.xuc();
if(!xdh)
{
xdh=document.createElement("meta");
xdh.setAttribute("name","viewport");
document.head.appendChild(xdh);
}
xdh.setAttribute("content",content);
}
p1.xIh=function(x2e)
{
if(this.x5c != x2e)
{
var xpc=this;
if(nhPanoramaViewer.isIOS())
{
xpc.xm=true;
xpc.x5g.style.visibility="visible";
setTimeout(function(){
xpc.xm=false;
xpc.xHb(x2e);
xpc.x5g.style.visibility="hidden";
},100);
}
else
{
xpc.xHb(x2e);
}
}
}
p1.xHb=function(x2e)
{
if(this.x5c != x2e)
{
if(x2e)
{
this.xs=document.body;
this.xah=document.documentElement.style.cssText;
var xpc=this;
var xWh=document.createElement("body");
xWh.appendChild(xpc.xIc);
xWh.style.margin="0px";
xWh.style.padding="0px";
xWh.style.width="100%";
xWh.style.height="100%";
document.body=xWh;
document.documentElement.style.cssText="width:100%;height:100%";
window.scroll(100000,0);
xpc.xIc.style.visibility="hidden";
setTimeout(function(){
xpc.xIc.style.visibility="visible";
},1);
xpc.xgc();
}
else
{
document.body=this.xs;
document.documentElement.style.cssText=this.xah;
this.xYg.appendChild(this.xIc);
this.xgc();
}
this.x5c=x2e;
this.xMd();
}
}
p1.xdc=function(xlf)
{
var xmd="";
for(var i=0; i < xlf.length; i++)
{
var xRj=xlf.charCodeAt(i);
if( (xRj >= 48) && (xRj < 128) )
{
xRj=((xRj-48))^0x46+48;
}
xmd += String.fromCharCode(xRj);
}
return xmd;
}
nhPanoramaViewer.isSupported=function()
{
if(!document.addEventListener) return false;
if(nhPanoramaViewer.has3dCss()) return true;
if(nhPanoramaViewer.hasWebGL()) return true;
return false;
}
nhPanoramaViewer.has3dCss=function()
{
var xBg=document.createElement("div");
if(!xBg) return false;
if(typeof xBg.style.webkitPerspective =="string") {}
else if(typeof xBg.style.MozPerspective =="string") {}
else return false;
if(nhPanoramaViewer.isChrome())
{
var chromeversion=nhPanoramaViewer.getChromeVersion();
if(chromeversion[0]-0 < 22) return false;
}
else
{
if(nhPanoramaViewer.isAndroid()) return false;
}
return true;
}
nhPanoramaViewer.hasWebGL=function()
{
var xb=null;
var xof=document.createElement("canvas");
try
{
xb = xof.getContext("webgl");
}
catch(x3d) {}
if(!xb)
{
try
{
xb = xof.getContext("experimental-webgl");
}
catch(x3d) {}
}
return (xb != null);
}
p1.xAh=function(xff)
{
var xb;
try
{
xb = xff.getContext("webgl");
}
catch(x3d) {}
if(!xb)
{
try
{
xb = xff.getContext("experimental-webgl");
}
catch(x3d) {}
}
if(!xb)
{
throw new Error("Could not initialize WebGL");
}
this.xFd=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 xwe="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 xTe="uniform sampler2D sampler2d; varying mediump vec2 v_texCoord;void main(void){gl_FragColor = texture2D(sampler2d, v_texCoord);}";
this.xJ=this.xlg(xwe,xTe);
this.xTb=new x2j();
this.x1e=new x2j();
this.xPh=xb.getUniformLocation(this.xJ,"modelViewMatrix");
this.xX("s1-2");
this.x9e=xb.getUniformLocation(this.xJ,"perspectiveMatrix");
this.xX("s1-3");
this.xZh = xb.getAttribLocation(this.xJ,"vertexPosition");
this.xX("s1-4");
xb.enableVertexAttribArray(this.xZh);
this.xX("s1-5");
this.xSf = xb.getAttribLocation(this.xJ,"vTexCoord");
this.xX("s1-6");
xb.enableVertexAttribArray(this.xSf);
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(xPd)
{
var xDg=this.xFd.getError();
if(xDg != this.xFd.NO_ERROR)
{
throw new Error("webGL error: "+xPd+": "+xDg);
}
}
p1.xhf=function(x8c, xaf)
{
var xb=this.xFd;
var xpd=xb.createShader(x8c);
this.xX("s2-1");
xb.shaderSource(xpd, xaf);
this.xX("s2-2");
xb.compileShader(xpd);
this.xX("s2-3");
if(!xb.getShaderParameter(xpd, xb.COMPILE_STATUS))
{
var xwg=xb.getShaderInfoLog(xpd);
xb.deleteShader(xpd);
throw new Error("Couldn't compile shader:\n"+xwg);
}
return xpd;
}
p1.xlg=function(xHd, xTe)
{
var xb=this.xFd;
var xZd=null;
var x7h=null;
var x9g=null;
try
{
x7h=this.xhf(xb.VERTEX_SHADER, xHd);
x9g=this.xhf(xb.FRAGMENT_SHADER, xTe);
var xZd = xb.createProgram();
this.xX("s3-1");
xb.attachShader(xZd, x7h);
this.xX("s3-2");
xb.attachShader(xZd, x9g);
this.xX("s3-3");
xb.linkProgram(xZd);
this.xX("s3-4");
if(!xb.getProgramParameter(xZd, xb.LINK_STATUS))
{
var xwg=xb.getProgramInfoLog(xZd);
throw new Error("Couldn't link program:\n"+xwg);
}
xb.useProgram(xZd);
this.xX("s3-5");
}
catch(x3d)
{
try
{
if(x7h) xb.deleteShader(x7h);
if(x9g) xb.deleteShader(x9g);
if(xZd) xb.deleteProgram(xZd);
}catch(xQm) {}
throw x3d;
}
return xZd;
}
p1.xrg=function()
{
if(this.xDb)
{
this.xDb=false;
var xb=this.xFd;
xb.clear(xb.COLOR_BUFFER_BIT | xb.DEPTH_BUFFER_BIT);
var xif=this.x8f();
if(this.xcb)
{
for(var i=0; i < xif; i++)
{
var xGg=this.xcb[i];
if(xGg)
{
var xXf=xGg.xzi();
if(xXf)
{
xb.bindTexture(xb.TEXTURE_2D, xXf[0]);
xb.bindBuffer(xb.ARRAY_BUFFER, xXf[1]);
xb.vertexAttribPointer(this.xZh, 3.0, xb.FLOAT, false, 0, 0);
xb.bindBuffer(xb.ARRAY_BUFFER, xXf[2]);
xb.vertexAttribPointer(this.xSf, 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.x6g=function(xIe)
{
var xb=this.xFd;
var xde = xb.createBuffer();
this.xX("s5-1");
xb.bindBuffer(xb.ARRAY_BUFFER, xde);
this.xX("s5-2");
xb.bufferData(xb.ARRAY_BUFFER, new Float32Array(xIe), xb.STATIC_DRAW);
this.xX("s5-3");
return xde;
}
p1.xyh=function(xne)
{
var xb=this.xFd;
var xfe=xb.createTexture();
this.xX("s7-1");
xb.bindTexture(xb.TEXTURE_2D, xfe);
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, xne);
this.xX("s7-4");
return xfe;
}
nhPanoramaViewer.requestAnimationFrameFunc=null;
nhPanoramaViewer.requestAnimationFrame=function(callback, xgf)
{
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,xgf) {
thefunc.call(window, callback, xgf);
};
break;
}
}
if(!nhPanoramaViewer.requestAnimationFrameFunc)
{
nhPanoramaViewer.requestAnimationFrameFunc=function(callback,xgf) {
window.setTimeout(callback,16.67);
};
}
}
nhPanoramaViewer.requestAnimationFrameFunc(callback,xgf);
}
p1.xae=function(x3d)
{
if(x3d.rotationRate && x3d.accelerationIncludingGravity)
{
var xjf=x3d.rotationRate;
var xTg=x3d.accelerationIncludingGravity;
if( (!isNaN(xTg.x)) && (!isNaN(xTg.y)) && (!isNaN(xTg.z))
&& (!isNaN(xjf.alpha)) && (!isNaN(xjf.beta)) && (!isNaN(xjf.gamma))
&& (!isNaN(x3d.interval)) )
{
var xwb=this.x5h() / 1000.0;
if(this.xtb == 0)
{
this.xtb=xwb+1.0;
}
if(xwb >= this.xtb)
{
var xh=[xTg.x, xTg.y, xTg.z];
if(this.xPb != null)
{
var xbg=this.xNh;
xbg=Math.pow(xbg,x3d.interval);
var xVg=1.0-xbg;
xh[0]=xVg*xh[0]+xbg*this.xPb[0];
xh[1]=xVg*xh[1]+xbg*this.xPb[1];
xh[2]=xVg*xh[2]+xbg*this.xPb[2];
}
this.xPb=xh;
var xVd=Math.sqrt(xh[0]*xh[0]+xh[1]*xh[1]+xh[2]*xh[2]);
if(xVd > 0)
{
var x0d=1.0/xVd;
xh[0] *= x0d;
xh[1] *= x0d;
xh[2] *= x0d;
}
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.xbd == this.xgh)
{
if(this.xWf == this.xob)
{
var xye=xh[0]-this.xOe[0];
var xLd=xh[1]-this.xOe[1];
var xZg=xh[2]-this.xOe[2];
var xBc=xye*xye+xLd*xLd+xZg*xZg;
if(xBc > 0.1)
{
this.xVe(xGb);
}
}
else if(this.xWf == this.xLf)
{
if(xGb > -60)
{
this.xVe(xGb);
}
}
}
if(this.xWf == this.xt)
{
if( (Math.abs(xjf.alpha) > 20)
|| (Math.abs(xjf.beta) > 20)
|| (Math.abs(xjf.gamma) > 20) )
{
this.xo();
}
}
var xje=xjf.alpha * x3d.interval;
var xuh=xjf.beta * x3d.interval;
var xu=xjf.gamma * x3d.interval;
var xc=new x2j();
var xGf=new x2j();
xGf.xYj(2,xu);
xc.xVj(xGf);
xGf.xYj(1,xuh);
xc.xVj(xGf);
xGf.xYj(0,xje);
xc.xVj(xGf);
var xyb=new x2j();
xGf.xYj(2,-xBb);
xyb.xVj(xGf);
xGf.xYj(0,xGb);
xyb.xVj(xGf);
var xDe=new x2j(xyb);
xDe.xOj();
var xxg=new x2j();
xxg.xVj(xDe);
xxg.xVj(xc);
xxg.xVj(xyb);
var xyg=xxg.xPj([1,0,0]);
var xXc=Math.atan2(xyg[2],xyg[0]);
xXc *= 180.0/Math.PI;
var xme=this.x6d;
if(this.xJd == 0)
{
xme += xXc;
}
var xzg;
if( (this.xbd == this.xgh)
&& (this.xWf == this.xt)
)
{
var xUg=x3d.interval*180;
if(this.xsg > 0)
{
this.xsg -= xUg;
if(this.xsg < 0) this.xsg=0;
}
else if(this.xsg < 0)
{
this.xsg += xUg;
if(this.xsg > 0) this.xsg=0;
}
xzg=xGb+this.xsg;
if(xzg < -90) xzg=-90;
if(xzg > 90) xzg=90;
}
else
{
xzg=this.xog;
}
if( (!isNaN(xme)) && (!isNaN(xzg)))
{
this.xEe(xme,xzg,this.x2b);
}
}
}
}
}
p1.xr=function(x3d)
{
this.log("Error: WebGL context lost");
}
p1.xFe=function(x3d)
{
this.log("WebGL context restored");
}
p1.xjd=function()
{
return (this.xWf == this.xt);
}
p1.xj=function()
{
if(this.xWf != this.xLf)
{
this.xOe=this.xAb;
this.xWf=this.xob;
}
}
p1.xVe=function(xse)
{
if(xse < -60)
{
this.xWf=this.xLf;
}
else
{
this.xWf=this.xt;
this.xsg=this.xog-xse;
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.xFg < 0)
{
this.xFg=0;
if(this.xod !="")
{
var xvd=this.xUf(this.xod);
if(xvd.valid)
{
var xhd=this.xjc();
if(xhd =="")
{
this.log("License key ('licensekey' field) ignored since the panorama is viewed on the local computer.");
}
else
{
var xZf=false;
if(xhd == xvd.host)
{
xZf=true;
}
else
{
var xYe="."+xvd.host;
var xZb=xhd.lastIndexOf(xYe);
if( (xZb >= 0) && (xZb == (xhd.length-xYe.length)) )
{
xZf=true;
}
}
if(xZf)
{
this.xFg=1;
}
else
{
this.log("Invalid license: the license is valid for '"+xvd.host+"' but the panorama is stored on '"+xhd+"'. "+xZ);
}
}
}
else
{
this.log("Invalid license key. "+xZ);
}
}
}
return (this.xFg > 0);
}
p1.xHc=function(xRg)
{
var valid=false;
var xZb=xRg.lastIndexOf(":");
if(xZb >= 0)
{
var xp=xRg.substr(0,xZb);
var xIf=xRg.substr(xZb+1,xRg.length-xZb-1);
var xXb=new xCk(this.xPf);
var xrf=new xCk(this.xDc);
var xcg=new xcp();
xcg.xyn(xXb, xrf);
valid=xcg.x3o(xp, xIf);
}
return valid;
}
p1.xUf=function(xRg)
{
var xmd=new Object();
try
{
xmd.valid=this.xHc(xRg);
}
catch(x3d)
{
xmd.valid=false;
}
if(xmd.valid)
{
var components=xRg.split(":");
if(components.length < 3)
{
xmd.valid=false;
}
else
{
xmd.host=components[0];
xmd.version=components[1];
}
}
return xmd;
}
p1.xx8944hjkxx7jk=function(x7e, xxh)
{
x7e=x7e.toLowerCase();
var xp=x7e.toLowerCase()+":1";
var xrf=new xCk(this.xDc);
var xI=new xCk(xxh);
var xXb=new xCk(this.xPf);
var xcg=new xcp();
xcg.x7m(xI, xrf);
xcg.xyn(xXb, xrf);
var xIf=xcg.xRo(xp,true);
var x0c=xp+":"+xIf;
var xW=this.xUf(x0c);
if(!xW.valid)
{
xW=this.xUf(x0c);
throw new Error("Check failed");
}
return x0c;
}
p1.xjc=function()
{
var xKf=this.xgb(0);
var xf=this.xQ();
xKf=this.xth(xKf,xf);
var host="";
if(xKf.indexOf("://") >= 0)
{
host=xKf.replace(new RegExp("^.*:\\/\\/"),"");
host=host.replace(new RegExp("\\/.*$"),"");
host=host.replace(new RegExp(":.*$"),"");
}
host=host.toLowerCase();
return host;
}
var p2=xnj.prototype;
p2.lsNotLoaded=0;
p2.x1i=1;
p2.xyj=2;
p2.xdj=3;
p2.xLg=false;
p2.xbi=0;
function xnj(xIi, xij, xle, xGb, x4e, xCc, xrh)
{
this.xBj=this.lsNotLoaded;
this.xaj=xIi;
this.xkj=xij;
this.xDj=xle;
this.xEi=xGb;
this.xzj=x4e;
this.xAj=xCc;
this.xUi=xrh;
if(this.xaj.xef)
{
var xKe=document.createElement("div");
xKe.style.position="absolute";
xKe.style.msBackfaceVisibility=xKe.style.webkitBackfaceVisibility=xKe.style.MozBackfaceVisibility="hidden";
xKe.style.MozTransformStyle="preserve-3d";
xKe.style.top="0px";
xKe.style.left="0px";
var xWi=xIi.xkh();
xWi.appendChild(xKe);
this.xKb=xKe;
}
if(this.xaj.xNc)
{
this.xQi();
}
var xB=document.createElement("img");
xB.style.position="absolute";
xB.style.top="0px";
xB.style.left="0px";
xB.style.visibility="hidden";
this.xei=xB;
var xpc=this;
if(document.addEventListener)
{
xB.addEventListener("load", function(x3d){return xpc.xli(x3d? x3d : window.event)}, false);
xB.addEventListener("error", function(x3d){return xpc.xki(x3d? x3d : window.event)}, false);
}
else if(document.attachEvent)
{
xB.attachEvent("onload", function(x3d){return xpc.xli(x3d? x3d : window.event)});
xB.attachEvent("onerror", function(x3d){return xpc.xki(x3d? x3d : window.event)});
}
if(this.xaj.xef)
{
this.xKb.appendChild(this.xei);
var xMi=document.createElement("canvas");
xMi.style.position="absolute";
xMi.style.top="0px";
xMi.style.left="0px";
xMi.style.visibility="hidden";
xKe.appendChild(xMi);
this.xuj=xMi;
}
this.x4i();
}
p2.xQi=function()
{
var x6c=10;
var width=x6c*Math.tan(0.5*this.xzj*Math.PI/180);
var xwj=new x2j();
xwj.xYj(0,this.xEi);
var xFc=new x2j();
xFc.xYj(1,-this.xDj);
xwj.xVj(xFc);
var x9h=[];
for(var x9i=0; x9i < 4; x9i++)
{
var xsj=[];
xsj[0]=(x9i & 1)? -width : width;
xsj[1]=(x9i & 2)? -width : width;
xsj[2]=-x6c;
xsj=xwj.xPj(xsj);
x9h=x9h.concat(xsj);
}
this.xFi=this.xaj.x6g(x9h);
}
p2.xZi=function()
{
this.xji();
}
p2.xji=function()
{
this.xBj=this.x1i;
if(this.xbi > 0)
{
var xpc=this;
window.setTimeout(function(){xpc.xei.src=xpc.xkj}, this.xbi*1000);
}
else
{
this.xei.src=this.xkj;
}
}
p2.xki=function(event)
{
this.xaj.xfg("Failed to load image: "+this.xkj);
this.xBj=this.xdj;
this.xaj.xSe(this);
return true;
}
p2.xli=function(event)
{
this.xBj=this.xyj;
if(this.xei.width != this.xei.height)
{
this.xaj.xfg("Image "+this.xkj+" should be square");
}
var x8i=this.xei.width;
if(this.xUi && (this.xei.width > this.xUi))
{
this.xei.width=this.xUi;
this.xei.height=this.xUi;
var xpc=this;
}
this.xlj=new Array(this.xei.width, this.xei.height);
if(this.xaj.xef)
{
this.xgc();
this.xuj.style.visibility="hidden";
this.xei.style.visibility="visible";
this.xKb.style.width=this.xlj[0]+"px";
this.xKb.style.height=this.xlj[1]+"px";
}
else
{
this.x3i=this.xaj.xyh(this.xei);
this.xbj(0.0, 0.0, 1.0, 1.0);
}
if(nhPanoramaViewer.isIOS())
{
var xpc=this;
setTimeout(function(){
xpc.xaj.xSe(this);
},100);
}
else
{
this.xaj.xSe(this);
}
return true;
}
p2.x4i=function()
{
}
p2.xyi=function(event)
{
try
{
xAi(this.xtj,false);
this.xtj=null;
this.xaj.xSe(this);
}
catch (xmb)
{
this.xaj.xfg(xmb.toString());
}
}
p2.xgc=function()
{
if((this.xBj == this.xyj) || this.xLg)
{
this.xrj();
}
}
p2.xrj=function()
{
if(this.xaj.xef)
{
var xYi=this.xaj.xNd();
var xcj=this.xaj.xlb();
var xej=this.xaj.xxc();
var xLi=this.xaj.xce();
var xRi=this.xlj[0];
var xti=this.xlj[1];
var xfj=1000.0*(this.xAj+1);
var ownerstyle=this.xaj.xkh().style;
var xhj=1;
if(typeof ownerstyle.webkitPerspective =="string")
{
xhj=ownerstyle.webkitPerspective;
}
else if(typeof ownerstyle.MozPerspective =="string")
{
xhj=ownerstyle.MozPerspective;
}
else
{
xhj=ownerstyle.msPerspective;
}
xhj=xhj.replace(/\s*px\s*$/,"");
xhj=xhj-0;
var xui=0.5*xfj/Math.tan(0.5*this.xzj*Math.PI/180);
var xmj="translate3d("+(-(xRi-xej)/2)+"px,"+(-(xti-xLi)/2)+"px,"+xhj+"px)"
+" rotateX("+xcj+"deg)"
+" rotateY("+(xYi-this.xDj)+"deg)"
+" rotateX("+(-this.xEi)+"deg)"
+" translate3d(0px,0px,"+(-xui)+"px)"
+" scale3d("+(xfj/xRi)+","+(xfj/xti)+",1)";
this.xKb.style.msTransform=this.xKb.style.webkitTransform=this.xKb.style.MozTransform=xmj;
}
}
p2.xdi=function()
{
return this.xBj;
}
p2.xSi=function()
{
return this.xLg;
}
p2.xxj=function()
{
return this.xDj;
}
p2.xmi=function()
{
return this.xEi;
}
p2.xfi=function(xMi, xNb)
{
this.xLg=true;
if(this.xBj != this.x1i) this.xBj=this.lsNotLoaded;
var x4f=xNb[2];
var xai=xNb[3];
var previewimage=this.xuj;
previewimage.width=x4f;
previewimage.height=xai;
var xgi = previewimage.getContext('2d');
xgi.drawImage(xMi, xNb[0], xNb[1], x4f, xai, 0, 0, x4f, xai);
previewimage.style.visibility="visible";
this.xKb.style.width=previewimage.width+"px";
this.xKb.style.height=previewimage.height+"px";
this.xlj=new Array(previewimage.width,previewimage.height);
this.xgc();
}
p2.xii=function(xqj, xRi, xNb)
{
this.x3i=xqj;
var xNi=xNb[0]/xRi;
var xhi=(xNb[0]+xNb[2])/xRi;
var x7i=1.0-(xNb[1]+xNb[3])/xRi;
var x5i=1.0-xNb[1]/xRi;
this.xbj(xNi, x7i, xhi, x5i);
this.xLg=true;
if(this.xBj != this.x1i) this.xBj=this.lsNotLoaded;
}
p2.xbj=function(xNi, x7i, xhi, x5i)
{
this.xCj=this.xaj.x6g([xhi, x5i, xNi, x5i, xhi, x7i, xNi, x7i]);
}
p2.xzi=function()
{
if(this.x3i)
{
return [this.x3i, this.xFi, this.xCj];
}
else
{
return null;
}
}
var p3=x2j.prototype;
p3.xKj=[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
function x2j(src)
{
if(src)
{
this.xKj=src.xKj.slice(0);
}
}
p3.xVj=function(x0j)
{
var x3j=[];
var xJj=0;
var xNj=0;
var xFj;
var xTj;
var x5j;
while(true)
{
xFj=0;
xTj=xJj;
x5j=xNj;
while(true)
{
xFj += this.xKj[xTj++]*x0j.xKj[x5j];
x5j += 4;
if(x5j >= 16) break;
}
x3j.push(xFj);
xNj++;
if(xNj == 4)
{
xJj += 4;
if(xJj == 16) break;
xNj=0;
}
}
this.xKj=x3j;
return this;
}
p3.x1j=function(xvh, xSd, xHj, xQj)
{
var xHh=0.5 * xvh * Math.PI / 180.0;
var x7i=xHj * Math.tan(xHh) / Math.sqrt(1+xSd*xSd);
var xhi=x7i*xSd;
var xWj=1.0/(xQj-xHj);
this.xKj = [
xHj/xhi, 0, 0, 0,
0, xHj/x7i, 0, 0,
0, 0, -(xHj+xQj)*xWj, -1,
0, 0, -2*xQj*xHj*xWj, 0
];
return this;
}
p3.xYj=function(xIj,xLj)
{
var xSj=Math.PI * xLj / 180.0;
var xRj=Math.cos(xSj);
var s=Math.sin(xSj);
if(xIj == 0)
{
this.xKj = [
1, 0, 0, 0,
0, xRj, s, 0,
0, -s, xRj, 0,
0, 0, 0, 1
];
}
else if(xIj == 1)
{
this.xKj = [
xRj, 0, -s, 0,
0, 1, 0, 0,
s, 0, xRj, 0,
0, 0, 0, 1
];
}
else
{
this.xKj = [
xRj, s, 0, 0,
-s, xRj, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
];
}
return this;
}
p3.x4j=function()
{
return new Float32Array(this.xKj);
}
p3.xPj=function(x6j)
{
var x3j=this.xKj;
var x=x3j[0]*x6j[0]+x3j[4]*x6j[1]+x3j[8]*x6j[2]+x3j[12];
var y=x3j[1]*x6j[0]+x3j[5]*x6j[1]+x3j[9]*x6j[2]+x3j[13];
var z=x3j[2]*x6j[0]+x3j[6]*x6j[1]+x3j[10]*x6j[2]+x3j[14];
var xrc=x3j[3]*x6j[0]+x3j[7]*x6j[1]+x3j[11]*x6j[2]+x3j[15];
if(xrc != 1.0)
{
var xZj=1.0/xrc;
x *= xZj;
y *= xZj;
z *= xZj;
}
return [x,y,z];
}
p3.xOj=function()
{
var x3j=this.xKj;
this.xKj=[
x3j[0], x3j[4], x3j[8], x3j[12],
x3j[1], x3j[5], x3j[9], x3j[13],
x3j[2], x3j[6], x3j[10], x3j[14],
x3j[3], x3j[7], x3j[11], x3j[15]
];
return this;
}
var p4=xCk.prototype;
p4.xTl="";
p4.xam=false;
p4.xrm=14;
function xCk(value)
{
this.xwk=Math.floor(Math.pow(10,this.xrm-1)+0.1);
var x8l=typeof value;
if( (x8l =="undefined") || (value === null) )
{
}
else if(x8l =="number")
{
this.xpk(value);
}
else if(x8l =="string")
{
this.xAk(value);
}
else if(x8l =="object")
{
if(value instanceof xCk)
{
this.xMl(value);
}
else
{
var xhk="(unknown)";
if(value && value.constructor && value.constructor.toString)
{
xhk=value.constructor.toString();
}
throw new Error("Invalid type: "+xhk);
}
}
else
{
throw new Error("Invalid type: "+x8l);
}
}
p4.xMl=function(xpl)
{
this.xTl=xpl.xTl;
this.xam=xpl.xam;
}
p4.toString=function()
{
if(this.xam)
{
return"-"+this.xTl;
}
else
{
return this.xTl;
}
}
p4.xnk=function()
{
return (this.xTl =="");
}
p4.xDm=function(value, xZl)
{
this.xTl=this.xOk(value);
if(this.xnk()) xZl=false;
this.xam=xZl;
}
p4.xAk=function(value)
{
var xZl=false;
if(value.charAt(0) =="-")
{
xZl=true;
value=value.substr(1);
}
if(! value.match(/^[0-9]*$/))
{
throw new Error("Invalid value");
}
value=this.xOk(value);
if(value =="")
{
xZl=false;
}
this.xTl=value;
this.xam=xZl;
}
p4.x4l=function(xYl, xVm, length)
{
var xXl=xYl.length-xVm;
if(xXl <= 0)
{
return 0;
}
else
{
var xAl=xXl-length;
if(xAl < 0) xAl=0;
var substr=xYl.substring(xAl,xXl);
substr=substr.replace(/^0+/,"");
if(substr.length == 0) return 0;
return parseInt(substr);
}
}
p4.xcl=function(i, length)
{
var xmd=""+i;
xmd=this.xbk(length-xmd.length)+xmd;
return xmd;
}
p4.xCl=function(x8k, xGl)
{
x8k=this.xOk(x8k);
xGl=this.xOk(xGl);
if(x8k.length > xGl.length) return 1;
if(x8k.length < xGl.length) return -1;
var xsl=x8k.length;
var xIl, xll;
for(var i=0; i < xsl; i++)
{
xIl=x8k.charCodeAt(i);
xll=xGl.charCodeAt(i);
if(xIl > xll) return 1;
if(xIl < xll) return -1;
}
return 0;
}
p4.xwm=function(s)
{
var xmk=s.length;
var xPk=0;
var xzl;
while(xmk > 0)
{
xzl=xmk-1;
if(s.charAt(xzl) !="0") break;
xPk++;
xmk--;
}
if(xPk > 0)
{
s=s.substr(0,xmk);
}
return [s,xPk];
}
p4.xOk=function(s)
{
var xqm=0;
while(xqm < s.length)
{
if(s.charAt(xqm) !="0") break;
xqm++;
}
if(xqm > 0)
{
return s.substr(xqm);
}
else
{
return s;
}
}
p4.xNm=function(xBl,xsl)
{
if(xBl.length < xsl)
{
xBl=this.xbk(xsl-xBl.length)+xBl;
}
return xBl;
}
p4.xbk=function(x0l)
{
var s="000000000000000000000000000000000000000000000000000000000";
var xmd="";
while(xmd.length < x0l)
{
xmd += s.substr(0,x0l-xmd.length);
}
return xmd;
}
p4.xFl=function(x8k)
{
if(x8k < 0.0)
{
throw new Error("Negative");
}
if(x8k < 1.0)
{
return"";
}
var xKk=""+x8k;
if(/^[0-9]+$/.test(xKk))
{
return xKk;
}
else
{
var exp=Math.floor(Math.log(x8k)/Math.log(10))+1;
x8k *= Math.pow(10,-exp);
if(x8k >= 1.0)
{
exp += 1;
x8k *= 0.1;
}
else if(x8k < 0.1)
{
exp -= 1;
x8k *= 10;
}
var xlm=""+x8k;
if(xlm.substr(0,2) !="0.")
{
throw new Error("Internal error");
}
xlm=xlm.substr(2);
if(xlm.length < exp)
{
xlm += this.xbk(exp-xlm.length);
}
else
{
xlm=xlm.substr(0,exp);
}
return xlm;
}
}
p4.xEl=function(s)
{
s=this.xOk(s);
if(s =="")
{
return 0.0;
}
else
{
var xdk=17;
if(s.length > xdk)
{
return parseFloat(s.substr(0,xdk))*Math.pow(10,s.length-xdk);
}
else
{
return parseFloat(s);
}
}
}
p4.xBm=function()
{
var x8k=this.xTl;
var xmd="";
var xkk=this.xrm-1;
var xvm=this.xwk;
var xEk=Math.floor(1+(x8k.length-1)/xkk);
var xVm=(xEk-1)*xkk;
var xTk;
var xmm=0;
for(var x0k=0; x0k < xEk; x0k++)
{
xTk=this.x4l(x8k,xVm,xkk);
xTk += xmm;
xmm=(xTk & 1)? xvm : 0;
xTk=Math.floor(0.5*xTk);
xmd += this.xcl(xTk, xkk);
xVm -= xkk;
}
var xzk=new xCk();
if(xmm != 0)
{
xzk.xTl="1";
xzk.xam=this.xam;
}
this.xTl=this.xOk(xmd);
return xzk;
}
p4.xml=function(x9l, xnl)
{
var xxl=17;
var xWk=1e17;
var xSk=0;
var x8k=new xCk(x9l);
var xGl=new xCk(xnl);
if(x8k.xTl.length > xxl)
{
xSk += x8k.xTl.length-xxl;
x8k.xTl=x8k.xTl.substr(0,xxl);
}
if(xGl.xTl.length > xxl)
{
xSk -= xGl.xTl.length-xxl;
xGl.xTl=xGl.xTl.substr(0,xxl);
}
var xkl=x8k.x3l();
var xVl=xGl.x3l();
var xvk=xkl/xVl;
xvk *= xWk;
xSk -= xxl;
var xdm=new xCk(xvk);
if(xSk > 0)
{
xdm.xTl += this.xbk(xSk);
}
else
{
var xsl=xdm.xTl.length;
if(xsl <= -xSk)
{
xdm.xpk(0);
}
else
{
xdm.xTl=xdm.xTl.substr(0,xsl+xSk);
}
}
return xdm;
}
p4.xfm=function(xcm)
{
if(xcm.xnk())
{
throw new Error("Divide by zero");
}
if( (xcm.xTl =="2") && (xcm.xam == false) )
{
return this.xBm();
}
var xdm=new xCk();
var xzk=new xCk(this);
var xak;
while(true)
{
if(xzk.xnk())
{
break;
}
xak=this.xml(xzk,xcm);
if(xak.xnk())
{
if(this.xam != xzk.xam)
{
if(xzk.xam == xcm.xam)
{
xak.xpk(1);
}
else
{
xak.xpk(-1);
}
}
else
{
break;
}
}
xdm=xdm.xPl(xak);
xzk=xzk.x1l(xak.x2l(xcm));
}
this.xMl(xdm);
return xzk;
}
p4.xrk=function(x8k, xGl)
{
x8k=this.xOk(x8k);
xGl=this.xOk(xGl);
var xTm=this.xCl(x8k,xGl);
if(xTm == 0) return ["",false];
var xZl=false;
if(xTm < 0)
{
var x8l=xGl;
xGl=x8k;
x8k=x8l;
xZl=true;
}
var xmd="";
var xXf=this.xwm(xGl);
var xUl=xXf[1];
if(xUl > 0)
{
xGl=xXf[0];
var xFk=x8k.length-xUl;
xXf=this.xIk(x8k,xFk);
xmd=xXf[1]+xmd;
x8k=xXf[0];
}
var xkk=this.xrm-1;
var xKl=this.xwk;
var xjl=x8k.length;
var xok=xGl.length;
var xVm=0;
var xmm=0;
var xal, xUk, xbm;
while(xVm < xjl)
{
if( (xVm >= xok) && (xmm == 0) )
{
xmd=x8k.substr(0,xjl-xVm)+xmd;
break;
}
xal=this.x4l(x8k,xVm,xkk);
xUk=this.x4l(xGl,xVm,xkk);
xbm=xal-xUk+xmm;
if(xbm >= 0)
{
xmm=0;
}
else
{
xmm=-1;
xbm += xKl;
}
xmd=this.xcl(xbm, xkk)+xmd;
xVm += xkk;
}
return [xmd,xZl];
}
p4.xRm=function(s, xkk)
{
var xmd=[];
var xql=s.length;
var xul;
var xUm;
while(true)
{
if(xql <= 0) break;
xul=xql-xkk;
if(xul < 0) xul=0;
xUm=s.substring(xul,xql);
xUm=xUm.replace(/^0+/,"");
xmd.push(parseInt(xUm));
xql -= xkk;
}
return xmd;
}
p4.xxm=function(x8k, xGl)
{
x8k=this.xOk(x8k);
xGl=this.xOk(xGl);
var xJl=0;
var xXf=this.xwm(x8k);
x8k=xXf[0];
xJl += xXf[1];
xXf=this.xwm(xGl);
xGl=xXf[0];
xJl += xXf[1];
var xmd="";
var xkk=Math.floor((this.xrm-3)/2);
if(xkk < 1) xkk=1;
var xlk=Math.floor(1+(x8k.length-1)/xkk);
var xzm=Math.floor(1+(xGl.length-1)/xkk);
var xRk=xlk+xzm-1;
var xWl, xum, xMm, xdl, xtm, xfl, xel;
var xmm=0;
var xJk;
var xyl=this.xRm(x8k,xkk);
var xIm=this.xRm(xGl,xkk);
for(xJk=0; xJk < xRk; xJk++)
{
xum=xJk-xzm+1;
if(xum < 0) xum=0;
xMm=xJk+1;
if(xMm > xlk) xMm=xlk;
xtm=0;
xdl=xJk-xum;
for(xWl=xum; xWl < xMm; xWl++)
{
var x6l=xyl[xWl];
var xik=xIm[xdl];
xtm += x6l*xik;
xdl--;
}
xtm += xmm;
xfl=this.xcl(xtm, xkk);
if(xfl.length > xkk)
{
xel=xfl.length-xkk;
xmm=parseInt(xfl.substr(0, xel));
xfl=xfl.substr(xel);
}
else
{
xmm=0;
}
xmd=xfl+xmd;
}
if(xmm != 0)
{
xmd=(""+xmm)+xmd;
}
if(xJl != 0)
{
xmd += this.xbk(xJl);
}
return xmd;
}
p4.xIk=function(s, xFk)
{
var xKm, xRl;
if(xFk < 0)
{
xKm="";
xRl=this.xbk(-xFk)+s;
}
else if(xFk > s.length)
{
xKm=s+this.xbk(xFk-s.length);
xRl="";
}
else
{
xKm=s.substr(0,xFk);
xRl=s.substr(xFk);
}
return [xKm,xRl];
}
p4.xDl=function(x8k, xGl)
{
x8k=this.xOk(x8k);
xGl=this.xOk(xGl);
if(x8k.length < xGl.length)
{
var xwl=x8k;
x8k=xGl;
xGl=xwl;
}
var xmd="";
var xXf=this.xwm(x8k);
var xUl=xXf[1];
var xFk;
if(xUl > 0)
{
x8k=xXf[0];
xFk=xGl.length-xUl;
xXf=this.xIk(xGl,xFk);
xmd=xXf[1]+xmd;
xGl=xXf[0];
}
xXf=this.xwm(xGl);
xUl=xXf[1];
if(xUl > 0)
{
xGl=xXf[0];
xFk=x8k.length-xUl;
xXf=this.xIk(x8k,xFk);
xmd=xXf[1]+xmd;
x8k=xXf[0];
}
var xkk=this.xrm;
var xjl=x8k.length;
var xok=xGl.length;
var xVm=0;
var xmm=0;
var xal, xUk, xfl, xel;
while(xVm < xjl)
{
if( (xVm >= xok) && (xmm == 0) )
{
xmd=x8k.substr(0,xjl-xVm)+xmd;
break;
}
xal=this.x4l(x8k,xVm,xkk);
xUk=this.x4l(xGl,xVm,xkk);
xfl=this.xcl(xal+xUk+xmm, xkk);
if(xfl.length > xkk)
{
xel=xfl.length-xkk;
xmm=parseInt(xfl.substr(0, xel));
xfl=xfl.substr(xel);
}
else
{
xmm=0;
}
xmd=xfl+xmd;
xVm += xkk;
}
if(xmm != 0)
{
xmd=(""+xmm)+xmd;
}
return xmd;
}
p4.xbl=function(x8k, xtl, xGl, xck)
{
var xym, xZl;
if(xtl == xck)
{
xym=this.xDl(x8k,xGl);
xZl=xtl;
}
else
{
var xmd=this.xrk(x8k,xGl);
xym=xmd[0];
xZl=xtl;
if(xmd[1])
{
xZl=!xZl;
}
}
return [xym,xZl];
}
p4.xPl=function(xGl)
{
var xym=this.xbl(this.xTl, this.xam, xGl.xTl, xGl.xam);
var xmd=new xCk();
xmd.xDm(xym[0],xym[1]);
return xmd;
}
p4.x1l=function(xGl)
{
var xym=this.xbl(this.xTl, this.xam, xGl.xTl, !xGl.xam);
var xmd=new xCk();
xmd.xDm(xym[0],xym[1]);
return xmd;
}
p4.xgm=function(xGl)
{
if(this.xam && (!xGl.xam)) return -1;
if(xGl.xam && (!this.xam)) return 1;
var xmd=this.xCl(this.xTl, xGl.xTl);
if(this.xam) xmd=-xmd;
return xmd;
}
p4.x2l=function(xGl)
{
var xZl=this.xam;
if(xGl.xam) xZl=!xZl;
var xol=this.xxm(this.xTl, xGl.xTl);
var xmd=new xCk();
xmd.xDm(xol,xZl);
return xmd;
}
p4.xXk=function(xGl)
{
var xdm=new xCk(this);
var xzk=xdm.xfm(xGl);
return [xdm,xzk];
}
p4.x3k=function(xGl)
{
var xmd=this.xXk(xGl);
return xmd[0];
}
p4.xQl=function(xGl)
{
var xmd=this.xXk(xGl);
return xmd[1];
}
p4.x9j=function(xGl)
{
return ((this.xTl == xGl.xTl) && (this.xam == xGl.xam));
}
p4.xpk=function(xQm)
{
this.xam=(xQm < 0.0);
if(this.xam)
{
xQm=-xQm;
}
this.xTl=this.xFl(xQm);
}
p4.x3l=function()
{
var xmd=this.xEl(this.xTl);
if( (!this.xnk()) && (this.xam) )
{
xmd=-xmd;
}
return xmd;
}
p4.x1k=function()
{
if(this.xam)
{
throw new Error("Not supported");
}
var x0l=new xCk(this);
var xXf;
var xmd=[];
var xcm=new xCk("4294967296");
while(true)
{
xXf=x0l.xXk(xcm);
x0l=xXf[0];
var x5k=x0l.xnk();
var xOl=xXf[1].x3l();
for(var i=0; i < 4; i++)
{
if(x5k && (xOl == 0)) break;
xmd.push(xOl & 0xff);
xOl >>= 8;
}
if(x5k) break;
}
xmd.reverse();
return xmd;
}
p4.xyk=function(xHk)
{
var xGm=3-((xHk.length+3)&3);
var xXf=[];
while(xGm-- > 0)
{
xXf.push(0);
}
xXf=xXf.concat(xHk);
var xmd=new xCk();
var xWk=new xCk("4294967296");
for(var xvl=0; xvl < xXf.length; xvl += 4)
{
xmd=xmd.x2l(xWk);
var xOl=(xXf[xvl]<<24) | (xXf[xvl+1]<<16) | (xXf[xvl+2]<<8) | (xXf[xvl+3]);
if(xOl < 0)
{
xOl += 0x100000000;
}
var xPl=new xCk(xOl);
xmd=xmd.xPl(xPl);
}
this.xMl(xmd);
}
p4.xqk=function(xNl, xPm)
{
if(this.xam || xNl.xam || xPm.xam)
{
throw new Error("Negative");
}
var xSm=new xCk(this);
var xhm=new xCk("2");
var xCm=new xCk(xNl);
var xek;
var xmd=new xCk("1");
while(true)
{
xek=xCm.xfm(xhm);
if(!xek.xnk())
{
xmd=xmd.x2l(xSm);
xmd=xmd.xQl(xPm);
}
if(xCm.xnk())
{
break;
}
xSm=xSm.x2l(xSm);
xSm=xSm.xQl(xPm);
}
return xmd;
}
p4.xAm=function()
{
return this.xam;
}
var p5=xkn.prototype;
p5.x1m=null;
p5.xrn=null;
p5.xjn=null;
function xkn()
{
}
p5.xcn=function(x8m, xYm)
{
var xvn=new xCk("1");
var xrf=x8m.x2l(xYm);
var xon=x8m.x1l(xvn).x2l(xYm.x1l(xvn));
var xXb=new xCk(17);
var x9m=this.xWm(xXb,xon);
var xzn=x9m[2];
if(!xzn.x9j(xvn))
{
if(!xon.xQl(xzn).xnk())
{
throw new Error("internal error");
}
throw new Error("not coprime");
}
var xI=x9m[0];
if(xI.xAm())
{
xI=xI.xPl(xon);
}
if(xI.xAm())
{
throw new Error("negative");
}
if(xI.xgm(xon) >= 0)
{
throw new Error("too large");
}
var xW=xI.x2l(xXb).xQl(xon);
if(!xW.x9j(xvn))
{
throw new Error("failed2");
}
return [xXb,xI,xrf];
}
p5.xyn=function(xVm, xrf)
{
this.xrn=new xCk(xVm);
this.x1m=new xCk(xrf);
}
p5.x7m=function(xVm, xrf)
{
this.xjn=new xCk(xVm);
this.x1m=new xCk(xrf);
}
p5.x3m=function()
{
return this.xrn;
}
p5.xxn=function()
{
return this.xjn;
}
p5.xin=function()
{
return this.x1m;
}
p5.xXm=function()
{
if( (!this.x1m) || (!this.xjn) )
{
throw new Error("Need private key");
}
}
p5.xAn=function()
{
if( (!this.x1m) || (!this.xrn) )
{
throw new Error("Need public key");
}
}
p5.xBn=function(message)
{
this.xXm();
if(message.xgm(this.x1m) >= 0)
{
throw new Error("Message too large");
}
return message.xqk(this.xjn,this.x1m);
}
p5.xhn=function(message)
{
this.xAn();
if(message.xgm(this.x1m) >= 0)
{
throw new Error("Message too large");
}
return message.xqk(this.xrn,this.x1m);
}
p5.xWm=function(xbn, xmn)
{
var xFj=new xCk(xbn);
var xgl=new xCk(xmn);
var x=new xCk();
var y=new xCk("1");
var xun=new xCk("1");
var x5m=new xCk();
while(!xgl.xnk())
{
var x6m=xFj.xXk(xgl);
var xdm=x6m[0];
xFj.xMl(xgl);
xgl=x6m[1];
var xln=xun.x1l(xdm.x2l(x));
var xgn=x5m.x1l(xdm.x2l(y));
xun=x;
x5m=y;
x=xln;
y=xgn;
}
var xW=xun.x2l(xbn).xPl(x5m.x2l(xmn));
if(!xW.x9j(xFj))
{
throw new Error("Failed3");
}
if(!xbn.xQl(xFj).xnk())
{
throw new Error("Failed4");
}
if(!xmn.xQl(xFj).xnk())
{
throw new Error("Failed5");
}
return [xun, x5m, xFj];
}
var p6=x9n.prototype;
function x9n()
{
}
p6.xSn=function(x5n)
{
this.x0n();
var xUn=x5n.length;
var xvl=0;
var x7n=xUn;
while(true)
{
if(x7n >= 64)
{
this.xoo(x5n.slice(xvl,xvl+64));
x7n -= 64;
xvl += 64;
}
else
{
this.xKn(x5n.slice(xvl,xvl+x7n),xUn);
break;
}
}
return this.xYn(this.xOn);
}
p6.xEn=function(s)
{
var x6n=this.xao(s);
this.xSn(x6n);
}
p6.x4n=function()
{
return this.xYn(this.xOn);
}
p6.xno=function()
{
var x6n=this.xYn(this.xOn);
return this.xho(x6n);
}
p6.xho=function(xFj)
{
var xmd="";
for(var i=0; i < xFj.length; i++)
{
var xgl=xFj[i];
for(var xJk=0; xJk < 2; xJk++)
{
var xfo=(xgl >> 4)&0x0f;
if(xfo < 10)
{
xmd += String.fromCharCode(48+xfo);
}
else
{
xmd += String.fromCharCode(87+xfo);
}
xgl <<= 4;
}
}
return xmd;
}
//////////// private: ///////////////
p6.x0n=function()
{
this.xOn=[0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0];
}
p6.xmo=function(xGn)
{
if(xGn.length != 16)
{
throw new Error("Should be 16");
}
var xrc=[];
var i;
for(i=0; i < 16; i++)
{
xrc[i]=xGn[i];
}
for(i=16; i < 80; i++)
{
xrc[i] = this.xio(xrc[i-3] ^ xrc[i-8] ^ xrc[i-14] ^ xrc[i-16], 1);
}
var xLn=this.xOn.slice(0);
var xQm, xFn, xQn;
for(i=0; i < 80; i++)
{
if(i < 20)
{
xQm = (xLn[1] & xLn[2]) | ((xLn[1]^0xffffffff) & xLn[3]);
xFn = 0x5A827999;
}
else if(i < 40)
{
xQm = xLn[1] ^ xLn[2] ^ xLn[3];
xFn = 0x6ED9EBA1;
}
else if(i < 60)
{
xQm = (xLn[1] & xLn[2]) | (xLn[1] & xLn[3]) | (xLn[2] & xLn[3]);
xFn = 0x8F1BBCDC;
}
else
{
xQm = xLn[1] ^ xLn[2] ^ xLn[3];
xFn = 0xCA62C1D6;
}
xQn = (this.xio(xLn[0], 5)+xQm+xLn[4]+xFn+xrc[i]) & 0xffffffff;
xLn[4] = xLn[3];
xLn[3] = xLn[2];
xLn[2] = this.xio(xLn[1], 30);
xLn[1] = xLn[0];
xLn[0] = xQn;
}
for(i=0; i < 5; i++)
{
xQn=this.xOn[i]+xLn[i];
xQn &= 0xffffffff;
this.xOn[i]=xQn;
}
}
p6.xoo=function(x5n)
{
if(x5n.length != 64)
{
throw new Error("Should be 64");
}
var xjo=this.xco(x5n);
this.xmo(xjo);
}
p6.xKn=function(x5n, xbo)
{
var xJn=xbo & 63;
var xXn=x5n.slice(0,xJn);
xXn.push(128);
if(xXn.length < 56)
{
while(xXn.length < 56)
{
xXn.push(0);
}
}
else
{
while(xXn.length < 120)
{
xXn.push(0);
}
}
xbo *= 8;
var xeo=this.xYn([Math.floor(xbo/0x100000000), xbo&0xffffffff]);
xXn=xXn.concat(xeo);
if(xXn.length == 64)
{
this.xoo(xXn);
}
else
{
this.xoo(xXn.slice(0,64));
this.xoo(xXn.slice(64,128));
}
}
p6.xio=function(xgl, xdo)
{
xgl &= 0xffffffff;
var xmd=this.xPn(xgl, xdo);
var xW=this.xPn(xmd, -xdo);
if(xgl != xW)
{
throw new Error("Failed");
}
return xmd;
}
p6.xPn=function(xgl, xdo)
{
xdo &= 31;
if(xdo == 0) return xgl;
var xmd=(xgl << xdo)&0xffffffff;
var x2n=32-xdo;
var xlo=0x7fffffff >> (x2n-1);
var x8n=(xgl >> x2n)&xlo;
xmd |= x8n;
return xmd;
}
p6.xco=function(x5n)
{
if(x5n.length & 3)
{
throw new Error("Should be multiple of 4");
}
var xjo=[];
var xpl=0;
var i=0;
while(i < x5n.length)
{
xpl <<= 8;
xpl |= (x5n[i] & 0xff);
i++;
if( (i & 3) == 0)
{
xjo.push(xpl);
xpl=0;
}
}
return xjo;
}
p6.xYn=function(xGn)
{
var x6n=[];
var xrc, i, xHn;
for(i=0; i < xGn.length; i++)
{
xrc=xGn[i];
x6n.push((xrc >> 24)&0xff);
x6n.push((xrc >> 16)&0xff);
x6n.push((xrc >> 8)&0xff);
x6n.push((xrc)&0xff);
}
return x6n;
}
p6.xao=function(s)
{
var xmd=[];
for(var i=0; i < s.length; i++)
{
xmd=xmd.concat(this.xgo(s.charCodeAt(i)));
}
return xmd;
}
p6.xgo=function(xRj)
{
var xmd;
if(xRj <= 0x7f)
{
xmd=[xRj];
}
else if(xRj <= 0x07ff)
{
xmd=[0xc0|((xRj>>6)&0x1f), 0x80|(xRj&0x3f)];
}
else if(xRj <= 0xffff)
{
xmd=[0xc0|((xRj>>12)&0x0f), 0x80|((xRj>>6)&0x3f), 0x80|(xRj&0x3f)];
}
else if(xRj <= 0x1fffff)
{
xmd=[0xc0|((xRj>>18)&0x07), 0x80|((xRj>>12)&0x3f), 0x80|((xRj>>6)&0x3f), 0x80|(xRj&0x3f)];
}
else if(xRj <= 0x3ffffff)
{
xmd=[0xc0|((xRj>>24)&0x03), 0x80|((xRj>>18)&0x3f), 0x80|((xRj>>12)&0x3f), 0x80|((xRj>>6)&0x3f), 0x80|(xRj&0x3f)];
}
else
{
xmd=[0xc0|((xRj>>30)&0x01), 0x80|((xRj>>24)&0x3f), 0x80|((xRj>>18)&0x3f), 0x80|((xRj>>12)&0x3f), 0x80|((xRj>>6)&0x3f), 0x80|(xRj&0x3f)];
}
return xmd;
}
var p7=xLo.prototype;
function xLo()
{
this.xso="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
}
p7.xHo=function(x6n)
{
var xmd="";
var xUn=x6n.length;
var xCc=0;
var xql;
while(xCc < xUn)
{
xql=xCc+3;
if(xql > xUn) xql=xUn;
xmd += this.xwo(x6n.slice(xCc,xql));
xCc=xql;
}
return xmd;
}
p7.xIo=function(xBl)
{
var xmd=[];
if( (xBl.length % 4) != 0)
{
this.xto();
}
var xCc=0;
var xJo;
while(xCc < xBl.length)
{
xJo=this.xMo(xBl.substr(xCc,4));
xmd=xmd.concat(xJo);
xCc += 4;
}
return xmd;
}
p7.xwo=function(x6n)
{
var xmd="";
var xfo=x6n[0] >> 2;
xmd += this.xso.substr(xfo,1);
var xgl;
if(x6n.length < 2)
{
xgl=0;
}
else
{
xgl=x6n[1];
}
xfo=((x6n[0] & 0x03) << 4) | (xgl >> 4);
xmd += this.xso.substr(xfo,1);
if(x6n.length < 2)
{
xmd +="==";
}
else
{
if(x6n.length < 3)
{
xgl=0;
}
else
{
xgl=x6n[2];
}
xfo=((x6n[1] & 0x0f) << 2) | (xgl >> 6);
xmd += this.xso.substr(xfo,1);
if(x6n.length < 3)
{
xmd +="=";
}
else
{
xfo=xgl & 0x3f;
xmd += this.xso.substr(xfo,1);
}
}
return xmd;
}
p7.xMo=function(xBl)
{
if(xBl.length != 4)
{
this.xto();
}
var xmd=[];
var xGo=this.xNo(xBl.charCodeAt(0));
var xKo=this.xNo(xBl.charCodeAt(1));
xmd[0]=(xGo << 2) | (xKo >> 4);
var i=xBl.charCodeAt(2);
if(i != 61)
{
xGo=xKo;
xKo=this.xNo(i);
xmd[1]=((xGo & 0x0f) << 4) | (xKo >> 2);
i=xBl.charCodeAt(3);
if(i != 61)
{
xGo=xKo;
xKo=this.xNo(i);
xmd[2]=((xGo & 0x03) << 6) | xKo;
}
}
return xmd;
}
p7.xNo=function(xFo)
{
if( (xFo >= 65) && (xFo <= 90))
{
return xFo-65;
}
else if( (xFo >= 97) && (xFo <= 122))
{
return xFo-71;
}
else if( (xFo >= 48) && (xFo <= 57))
{
return xFo+4;
}
else if(xFo == 43)
{
return 62;
}
else if(xFo == 47)
{
return 63;
}
this.xto();
return 0;
}
p7.xto=function()
{
throw new Error("Faulty Base64 data");
}
var p8=xcp.prototype;
function xcp()
{
this.xep=new xkn();
this.xPo=new x9n();
this.xTo=new xLo();
}
p8.xRo=function(message, x3o)
{
this.xep.xXm();
if(x3o)
{
this.xep.xAn();
}
this.xPo.xEn(message);
var x3n=this.xPo.x4n();
var xrf=this.xep.xin();
var x0o=xrf.x1k();
var xZo=x0o.length-1;
if(x3n.length > xZo)
{
throw new Error("Key too short");
}
var x9o="";
while(x3n.length < xZo)
{
var xZb=Math.floor(Math.random()*255);
x3n[x3n.length]=xZb;
x9o += xZb+",";
}
var x2o=new xCk();
x2o.xyk(x3n);
var x4m=this.xep.xBn(x2o);
if(x3o)
{
var x1o=this.xep.xhn(x4m);
if(! x1o.x9j(x2o))
{
throw new Error("Internal error");
}
}
var xYo=x4m.x1k();
var x4o=this.xTo.xHo(xYo);
return x4o;
}
p8.x3o=function(message, xIf)
{
this.xep.xAn();
var xVo=this.xTo.xIo(xIf);
var xap=new xCk();
xap.xyk(xVo);
var x1o=this.xep.xhn(xap);
var x8o=x1o.x1k();
this.xPo.xEn(message);
var x3n=this.xPo.x4n();
if(x8o.length < x3n.length) return false;
for(var i=0; i < x3n.length; i++)
{
if(x8o[i] != x3n[i]) return false;
}
return true;
}
p8.xyn=function(xVm, xrf)
{
this.xep.xyn(xVm, xrf);
}
p8.x7m=function(xVm, xrf)
{
this.xep.x7m(xVm, xrf);
}