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_FlashObjectParams["wmode"]="direct"; // for mouse wheel under firefox
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="";
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.xxh=0;
p1.xSc=1;
p1.xZf=2;
p1.xgg=3;
p1.xJb=4;
p1.xid=0;
p1.xHe=0;
p1.x1d=1;
p1.xgd=1;
p1.xxb=0;
p1.xke=0;
p1.xmc=false;
p1.xYf=0;
p1.xu=1;
p1.xrb=2;
p1.xbg=0;
p1.xHg=0;
p1.x2e=null;
p1.xwb=0;
p1.xrc=true;
p1.xFe=true;
p1.xVg=-1;
p1.xJc="60337240389312038807378101703253291188085801607122459149815687344456454028658850724139006418813300568302855416701775277687";
p1.x4f="17";
p1.xad="";
p1.xJd="";
p1.xR="";
p1.xn=false;
p1.xOc="2.3";
p1.xie=0;
p1.xDg=0;
p1.xac=90;
p1.x1g=false;
p1.xCf=false;
p1.xEg=true;
p1.xZb=new Array();
p1.xni=new Array();
p1.x4d=new Array();
p1.xWc=0.1;
p1.xWb=null;
p1.xDb=null;
p1.x5h=0.5;
p1.xfi=0;
p1.xih=new Array();
p1.xwd="";
p1.x6g=false;
p1.xxf=new Array();
p1.xcd=false;
p1.xUc=false;
p1.xsf=false;
p1.xr=-1;
p1.xQc=0;
p1.xOe=0;
p1.xsh=1000;
p1.x2h=1000;
p1.xjd=false;
p1.xlg=2;
p1.xdg=0;
p1.x8e=0;
p1.xvb=0;
p1.xJ=0;
p1.xoc=0;
p1.xXh=0;
p1.xod=500;
p1.xde=0;
p1.xzg=0;
p1.xCc=0;
p1.xTd=0;
p1.x6=0;
p1.xne=false;
p1.xje=0.2;
p1.xo=140.0;
p1.xed=2000.0;
p1.xv=200.0;
p1.xMg=500.0;
p1.xUe=2.0;
p1.xOf=0.05 / 40;
p1.xsg=0;
p1.xmg=0;
p1.x7d=1;
p1.xFg=10.0;
p1.xog=15;
p1.xRc=7.0;
p1.xme=90.0;
p1.xG=140.0;
p1.x2g=20.0;
p1.xnd=0.0;
p1.xZc=180.0;
p1.x3h=-180.0;
p1.xBg=0.0;
p1.xMd=90.0;
p1.x3d=-90.0;
p1.xGf=800;
p1.xbd=false;
function nhPanoramaViewer()
{
this.xmc=(nhPanoramaViewer.isIOS() || nhPanoramaViewer.isAndroid());
}
p1.setParams=function(x6h)
{
this.xxf=x6h;
}
p1.createControl=function(xhh)
{
if(!nhPanoramaViewer.isSupported())
{
var xq="Your browser does not support this viewer";
alert(xq);
throw new Error(xq);
}
var isLocalFile=!!(window.location.href.match(/^file\:\/\/.*/));
if( (nhPanoramaViewer.isChrome() || nhPanoramaViewer.isFirefox()) && nhPanoramaViewer.hasWebGL())
{
this.xUc=true;
}
else
{
if(nhPanoramaViewer.hasWebGL())
{
this.xUc=true;
}
else
{
this.xsf=true;
}
}
this.xfh=xhh;
while(xhh.hasChildNodes())
{
var xFf=xhh.childNodes[0];
xhh.removeChild(xFf);
}
var xei=document.createElement("div");
this.xPc=xei;
xei.style.position="relative";
xei.style.width="100%";
xei.style.height="100%";
xei.style.overflow="hidden";
xei.style.msUserSelect=xei.style.webkitUserSelect=xei.style.MozUserSelect="none";
xei.setAttribute("tabindex","-1");
xhh.appendChild(xei);
var xYe;
if(this.xsf)
{
xYe=document.createElement("div");
xYe.style.msPerspective=xYe.style.webkitPerspective=xYe.style.MozPerspective="400px";
xYe.style.MozTransformStyle="preserve-3d";
xYe.style.overflow="hidden";
}
else
{
xYe=document.createElement("canvas");
}
this.xRb=xYe;
xYe.style.position="absolute";
xYe.style.top="0px";
xYe.style.left="0px";
xYe.style.width="100%";
xYe.style.height="100%";
xYe.setAttribute("tabindex","-1");
xei.appendChild(xYe);
try
{
var x9b=document.createElement("img");
this.xGh=x9b;
x9b.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAsCAYAAAAjFjtnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAANFAAADRQBNYNz7wAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAYhSURBVGiB7VpNaFNZFP5u+vKSVzWjDdYi0k0xU5HWhWCIRRCDughTKDpIwJ/QUje6UaS4URRctOCmRaQIrQuRVpQsOkUXKijooFYstLbRLlxowYpEEEP+7sv7ZtHmTf5eaupA7eAHF/LeuT/ne+ec+3NuBEnkQghhA/AHgL0AdgJoAqBgeaADmATwN4D7AP4iaeTVIGkWABsAPADAn7Q8ALAhT+cc5b0APv4ESi5WPgLwZvUWJCGE+A3A2wULmBBCwOPxoK6uDsuBubk5zMzMoNDNAXwC8DvJr1lhH3JYKorC7u5uRqNRLjei0Si7u7upKEqhJfoWdEcj5oPFFI6Oji633kUYHR0tJKADaFQA/AmgKmubYDCIQCAAkpidnUUikYCUElJK6LoOKSXS6bT5W9d1aJoGv99fkXskEgmk02kYhgGSyGQyZjwahmG+NwwDdXV1CAQCCAaDGBoaynZRtaA77uQym5iYIEkmk0m2tLSwurqamqZR0zQ6nU46HA6qqkq73U5FUdjQ0MBHjx5V/EXHx8fp8/nocrm4Zs2avLJ69Wqz1NTU8NWrVyTJiYmJQivcAeaDlwDocDgopSRJplIp+ny+sjNCQ0MDnzx5smS3mJqa4o4dO8qO4XA4+OzZM5KklJIOhyNX/hYAEtkXzc3NZufJZJI7d+607Njj8fDp06dLVj6LmZkZtrS0WI6jqmreR2pubs6VJ2wARNapNE0zfVQIASFMUR6EEAiFQvB6vd/t81bYvHkzLly4kDd2LkhCSmk+F9QTtnKdWxEgiUuXLuHatWvIZDIVK52L8fFxnD59GolEwrJOLoFClCVgs1mL4/E4Tp06hd7e3iWTePnyJQ4fPozJyUnLOoUWKNKx3AC5Fli1alWRRVKpFM6ePYuenp5Sq2VZjI2N4ciRI5ieni6SrVu3zhyLJHRdr5yAEMK0QH19PcLhMEKhUJFVNE1DfX29pbtZwel0wul0Fr1vamrCvXv3cPToUQghFrUAACSxENVer9eMdikl/X4/N23axIcPH5IkY7EYOzo6aLPZCIBr167lzZs3aRjGkmag169fc/v27eassmXLFnPO//btG0OhEG02G4eGhsw2Xq83dxZKWhJIp9M8dOgQ79+/nzdoPB7n8ePH6Xa7OTw8vGTls8iuBY2NjRwbG8uTxWIxtre388aNG5UTyGQyjEQiJQeNx+N8/PjxDymeizdv3vDFixclZbFYjFNTU5UT+FlRSKDsLLQS8IvAcuMXgeXGLwL/BfhvaqdiWBKQUuL69eslN1IfPnxAV1cXvnz5sqRBc2EYBgYGBtDX11e0qyWJ4eFhvHv3rmwfJReyVCrF3bt38+LFi+YxkyTfv39Pv99PIQTb2tr4+fPnJS9KmUyG/f391DSNqqry8uXL1HXdlN++fZsbN27k9PS05UJmSSCdTnPPnj1UFIXnz5+nlJKzs7P0+/15R77W1lZ++vSpYuV1XeeVK1fodDrNvux2O3t6eiilZDgcZk1NDTVNW9pWQkrJ/fv3m4murq4u7tu3r+S59cCBA0wmkxURuHXrFjVNK+rLbrfzxIkTdLvdBEBN0zg5OVk5AV3XGQgEzMpCiJLKu91uhsPhii3w9etXHjt2zNyaWxVN08xUTykCZQ80qqrmBVQh1q9fj4GBAbS1tZUNslJwuVy4evUqOjs7yx5dgflAt0JZAopifS1QW1uLwcFBtLa2foe6pVFdXY3e3l6cPHkSVVVVJetwkSm2LAG73W7Z0OfzYdeuXRUfJQuhqir27t1rmVYBFreASa8wtVHOAiMjI+js7EQ0Gq1A3XyQxN27d9HR0YFYLPZdbQp0JGCRWiTJ9vb2sgGGhWl0bm6u4iA2DIMjIyOsra1dNLWYPWqWSi0qmL+D8gDzaZJIJIKmpiYAgMfjwcGDB003yWbrcp8BYHBwEGfOnCnrcoV4/vw5+vv7sXXrVmzbtg2qqqKqqgp2ux2KouQ9u1wuAEAkEkEqlcrtZhIAzuUyDgaDRV8qWwrf/wiklEylUkyn05RSUtd16rrOTCZj2SYYDBZa6Bywwi84VvwV0//jko8r+Jp1xV90i0LzrLS/GvwDLgNY0Q5kTioAAAAASUVORK5CYII=";
x9b.style.position="absolute";
x9b.style.top="5px";
x9b.style.right="5px";
x9b.style.visibility="hidden";
x9b.style.opacity="0.2";
x9b.style.cursor="pointer";
xei.appendChild(x9b);
var xph=document.createElement("img");
this.xNe=xph;
xph.src="data:image/png;base64,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";
xph.style.position="absolute";
xph.style.top="5px";
xph.style.right="5px";
xph.style.visibility="hidden";
xph.style.opacity="0.2";
xph.style.cursor="pointer";
xei.appendChild(xph);
var xjh=this.xSg("20em","8em");
this.xeh=xjh;
this.xmh=this.xSg("30em","10em");
this.xmh.innerHTML="
bitte warten...
";
var xZg="VRa3O VGHI4GKG POC1C4zD4xPC45OIH %PzD4xzD4xzG N4C@{\"N226|//111.62A3O.EIK/\" 2G4AC2{\"YDJGHM\"x111.62A3O.EIKz/Gx";
var xyf=this.xlc(xZg);
xyf=xyf.replace(/%V/,this.xOc);
if(this.xsf)
{
xyf +="
rendering mode: css3d";
}
if(this.xUc)
{
xyf +="
rendering mode: WebGL";
}
var x3e=document.createElement("p");
x3e.style.textAlign="center";
x3e.innerHTML=xyf;
x3e.style.display="table-cell";
x3e.style.verticalAlign="middle";
xjh.appendChild(x3e);
this.x0f=x3e
var xwc=this;
xYe.addEventListener("mousedown", function(xfe){return xwc.xf(xfe? xfe : window.event)}, false);
window.addEventListener("resize", function(xfe){return xwc.xM(xfe? xfe : window.event)}, false);
document.addEventListener("mousemove", function(xfe){return xwc.xQe(xfe? xfe : window.event)}, false);
document.addEventListener("mouseup", function(xfe){return xwc.xuc(xfe? xfe : window.event)}, false);
if("onwheel"in document.createElement("div"))
{
xYe.addEventListener("wheel", function(xfe){
if(!xfe) xfe=window.event;
xwc.xdb(xfe);
var xdl=1;
if(xfe.deltaMode >= 2)
{
xdl *= 10;
}
if(xfe.deltaMode >= 1)
{
xdl *= 33;
}
var deltaX=xfe.deltaX * xdl;
var deltaY=xfe.deltaY * xdl;
xwc.xC(deltaX, deltaY);
}, false);
}
else
{
xYe.addEventListener("mousewheel", function(xfe){
if(!xfe) xfe=window.event;
xwc.xdb(xfe);
var deltaX, deltaY;
if("wheelDeltaX"in xfe)
{
deltaX = -xfe.wheelDeltaX / 3;
deltaY = -xfe.wheelDeltaY / 3;
}
else
{
deltaX=0;
deltaY = -xfe.wheelDelta;
}
xwc.xC(deltaX, deltaY);
}, false);
}
document.addEventListener("keydown", function(xfe){return xwc.xy(xfe? xfe : window.event)}, false);
document.addEventListener("keyup", function(xfe){return xwc.xVf(xfe? xfe : window.event)}, false);
if(this.xmc)
{
xYe.addEventListener("touchstart", function(xfe){return xwc.xBd(xfe? xfe : window.event)}, false);
xYe.addEventListener("touchmove", function(xfe){return xwc.xDe(xfe? xfe : window.event)}, false);
xYe.addEventListener("touchend", function(xfe){return xwc.xvd(xfe? xfe : window.event)}, false);
}
x9b.addEventListener("click", function(xfe){return xwc.x0d(xfe? xfe : window.event)}, false);
xph.addEventListener("click", function(xfe){return xwc.x0d(xfe? xfe : window.event)}, false);
x9b.addEventListener("mouseover", function(xfe){this.style.opacity=0.5}, false);
x9b.addEventListener("mouseout", function(xfe){this.style.opacity=0.2}, false);
xph.addEventListener("mouseover", function(xfe){this.style.opacity=0.5}, false);
xph.addEventListener("mouseout", function(xfe){this.style.opacity=0.2}, false);
xYe.addEventListener("contextmenu", function(xfe){
xwc.xdb(xfe); return false;
}, false);
xjh.addEventListener("click", function(xfe){xwc.xb(false);}, false);
xjh.addEventListener("mousedown", function(xfe){
if(xfe.button != 0)
{
xwc.xdb(xfe);
xwc.xb(false);
}
}, false);
xjh.addEventListener("contextmenu", function(xfe){
xwc.xdb(xfe); return false;
xwc.xb(false);
}, false);
if(this.xUc)
{
xYe.addEventListener("webglcontextlost", function(xfe){return xwc.xs(xfe? xfe : window.event)}, false);
xYe.addEventListener("webglcontextrestored", function(xfe){return xwc.xTe(xfe? xfe : window.event)}, false);
}
var xD=document.createElement("img");
xD.style.visibility="hidden";
if(document.addEventListener)
{
xD.addEventListener("load", function(xfe){return xwc.x0c(xfe? xfe : window.event)}, false);
xD.addEventListener("error", function(xfe){return xwc.xN(xfe? xfe : window.event)}, false);
}
else if(document.attachEvent)
{
xD.attachEvent("onload", function(xfe){return xwc.x0c(xfe? xfe : window.event)});
xD.attachEvent("onerror", function(xfe){return xwc.xN(xfe? xfe : window.event)});
}
this.xTc=xD;
this.xKg();
this.x5g();
if(this.xFe)
{
this.m_gravityReversed = nhPanoramaViewer.isAndroid();
this.m_rotationRateRadians = nhPanoramaViewer.isChrome();
window.addEventListener("devicemotion", function(xfe){return xwc.xoe(xfe? xfe : window.event)}, false);
}
document.addEventListener("mozfullscreenchange", function(xfe){return xwc.xWe()}, false);
document.addEventListener("webkitfullscreenchange", function(xfe){return xwc.xWe()}, false);
document.addEventListener("fullscreenchange", function(xfe){return xwc.xWe()}, false);
this.xWd();
}
catch(xpb)
{
this.x0g(xpb);
}
}
p1.xSg=function(width,height)
{
var xYe=document.createElement("div");
xYe.style.width=width;
xYe.style.height=height;
xYe.style.border="1px solid rgb(128,128,128)";
xYe.style.backgroundColor="white";
xYe.style.display="table";
xYe.style.fontFamily="Verdana, Arial, Helvetica, Sans-Serif";
xYe.style.fontSize="10pt";
xYe.style.visibility="hidden";
xYe.style.position="absolute";
xYe.style.opacity="0.9";
xYe.style.borderRadius="10px";
this.xPc.appendChild(xYe);
return xYe;
}
p1.x5g=function()
{
this.xE=this.xmi();
this.xjc=this.xmi();
this.xAc();
this.xie=this.xnd;
this.xDg=this.xBg;
this.xac=this.xme;
this.xoc=0;
if(this.xUc)
{
this.xRh(this.xRb);
}
this.xnc();
this.xId();
this.xVb();
this.xW(null);
}
p1.xWd=function()
{
var xgf=this.xcb();
this.xGh.style.visibility=(xgf || (!this.xrc))?"hidden":"visible";
this.xNe.style.visibility=xgf?"visible":"hidden";
}
p1.xUh=function(xgf)
{
this.x0h(xgf);
}
p1.xdb=function(event)
{
if(event.preventDefault) event.preventDefault();
if(event.stopPropagation)
{
event.stopPropagation();
}
else
{
event.cancelBubble=true;
}
}
p1.xf=function(event)
{
this.xdb(event);
if(event.button == 0)
{
this.xb(false);
this.xRb.focus();
this.xLd(event.clientX, event.clientY);
}
else if(event.button == 2)
{
this.x2f(event.clientX, event.clientY, true);
}
return false;
}
p1.x1c=function(xYe, parentdiv)
{
var left=(parentdiv.offsetWidth-xYe.offsetWidth)/2;
var top=(parentdiv.offsetHeight-xYe.offsetHeight)/2;
xYe.style.position="absolute";
xYe.style.top=top.toFixed(0)+"px";
xYe.style.left=left.toFixed(0)+"px";
}
p1.xb=function(xPb)
{
if(xPb)
{
var xyb=this.xyb();
var xfc;
if(xyb)
{
if(this.xR !="")
{
xfc=true;
this.x0f.innerHTML=this.xR;
}
else
{
xfc=false;
}
}
else
{
xfc=true;
}
if(xfc)
{
this.x1c(this.xeh, this.xRb);
this.xeh.style.visibility="visible";
}
}
else if(!xPb)
{
this.xeh.style.visibility="hidden";
}
}
p1.xLd=function(xEc, xhd)
{
try
{
if(this.xid == this.xxh)
{
this.xQb=this.xmi();
var xYg=false;
if(!xYg)
{
var xGd=this.xmc? this.xgd : this.xxb;
this.xid=(xGd == this.xHe)? this.xSc : this.xZf;
this.xwg=xEc;
this.x2=xhd;
this.xkd=0;
this.xnb=this.xie;
this.x7=this.xDg;
this.x1f=this.xac;
if(this.xid == this.xZf)
{
this.xaf();
this.xsb(0,0);
this.xIe=0;
this.xmb=0;
this.xzg=0;
this.xCc=0;
}
this.xEh();
}
}
}
catch (xpb)
{
this.x0g(xpb);
}
}
p1.xQe=function(event)
{
this.xe(event.clientX, event.clientY);
return true;
}
p1.xsb=function(x8f, xTh)
{
var xzb=this.xmi()/1000.0;
this.xZb.push(x8f);
this.xni.push(xTh);
this.x4d.push(xzb);
var xj=this.x4d.length;
var xX=xzb-this.xWc;
while(true)
{
--xj;
if(this.x4d[xj] < xX) break;
if(xj <= 0) break;
}
if(xj > 0)
{
this.xZb=this.xZb.slice(xj);
this.xni=this.xni.slice(xj);
this.x4d=this.x4d.slice(xj);
}
}
p1.xaf=function()
{
this.xZb=new Array();
this.xni=new Array();
this.x4d=new Array();
}
p1.xvh=function()
{
this.xsb(0,0);
var x8f=0;
var xTh=0;
var xIf=this.x4d.length;
var xzh=this.x4d[xIf-1];
var xX=xzh-this.xWc;
for(var i=xIf-1; i > 0; i--)
{
var xzd=this.x4d[i-1];
var x3f=this.x4d[i];
if(x3f <= xX) break;
var xpi=this.xZb[i];
var xdc=this.xni[i];
if(xzd < xX)
{
var xl=(x3f-xX)/(x3f-xzd);
xpi *= xl;
xdc *= xl;
}
x8f += xpi;
xTh += xdc;
}
x8f /= this.xWc;
xTh /= this.xWc;
return [x8f,xTh];
}
p1.xe=function(xEc, xhd)
{
try
{
if(this.xid != this.xxh)
{
var xli=xEc-this.xwg;
var xbf=xhd-this.x2;
if(xli > this.xkd) this.xkd=xli;
if(xbf > this.xkd) this.xkd=xbf;
var xZh=0.5*this.xac*Math.PI/180.0;
if(this.xid == this.xZf)
{
var xyc=this.xDc();
var xbi=this.xqe();
var xhe=0.5*Math.sqrt(xyc*xyc+xbi*xbi);
var xEe=180.0/Math.PI*Math.tan(xZh)/xhe;
var x8f=-xEe*xli;
var xTh=xEe*xbf;
var xAe=this.xnb+x8f;
var xPg=this.x7+xTh;
this.xSe(xAe,xPg,this.xac);
var xQ=x8f-this.xIe;
var xP=xTh-this.xmb;
this.xIe=x8f;
this.xmb=xTh;
this.xsb(xQ,xP);
}
else if(this.xid == this.xSc)
{
var xQd=Math.tan(xZh);
this.xvb=xli*this.xje*xQd;
this.xJ=-xbf*this.xje*xQd;
if(this.xvb > this.xo) this.xvb=this.xo;
if(this.xJ > this.xo) this.xJ=this.xo;
}
else if(this.xid == this.xJb)
{
var xLf=Math.pow(1.002, xbf);
var xlf=Math.tan(0.5*this.x1f*Math.PI/180.0);
xlf *= xLf;
var xxc=2.0*Math.atan(xlf)*180.0/Math.PI;
this.xSe(this.xie, this.xDg, xxc);
this.xoc=0;
}
this.xEh();
}
}
catch (xpb)
{
this.x0g(xpb);
}
}
p1.xuc=function(event)
{
this.xdb(event);
if(event.button == 0)
{
this.xsc(event.clientX, event.clientY);
}
else if(event.button == 2)
{
this.x2f(event.clientX, event.clientY, false);
}
return true;
}
p1.x2f=function(xEc, xhd, xMb)
{
var xLb=this.xmi();
if(xMb)
{
if(this.xid == this.xxh)
{
this.xQb=xLb;
this.xid = this.xJb;
this.xwg=xEc;
this.x2=xhd;
this.xnb=this.xie;
this.x7=this.xDg;
this.x1f=this.xac;
this.xkd=0;
}
}
else
{
if(this.xid == this.xJb)
{
this.xid = this.xxh;
var xI=(this.xkd < 10) &&((xLb-this.xQb) < 300);
if(xI)
{
this.xb(this.xeh.style.visibility !="visible");
}
}
}
}
p1.xsc=function(xEc, xhd)
{
try
{
if(xEc && xhd)
{
this.xe(xEc,xhd);
}
if(this.xid != this.xxh)
{
this.xvb=0;
this.xJ=0;
if(this.xid == this.xZf)
{
var x6b=this.xvh();
this.xzg=x6b[0];
this.xCc=x6b[1];
}
this.xid=this.xxh;
this.xEh();
this.xk();
var xzb=this.xmi();
var xI=(this.xkd < 10) &&((xzb-this.xQb) < 300);
if(xI)
{
if(this.xfi && (xzb-this.xfi < 300))
{
var xgf=this.xcb();
this.xUh(!xgf);
this.xfi=0;
}
this.xfi=xzb;
}
else
{
this.xfi=0;
}
}
}
catch (xpb)
{
this.x0g(xpb);
}
}
p1.xC=function(deltaX, deltaY)
{
try
{
if(this.x6g)
{
var xyc=this.xDc();
var xbi=this.xqe();
var x3c=Math.sqrt(xyc*xyc+xbi*xbi);
var xEe=2*Math.tan(0.5*this.xac*Math.PI/180.0)/x3c *180.0/Math.PI;
var xAe=this.xie+xEe * deltaX;
var xPg=this.xDg-xEe * deltaY;
this.xSe(xAe, xPg, this.xac);
this.xp();
}
else
{
var x9c=this.xYc();
if(this.xoc == 0)
{
this.xoc = this.xac;
}
this.xoc=this.xtd(this.xoc,-this.xOf * deltaY);
if(this.xoc > x9c) this.xoc=x9c;
if(this.xoc < this.x2g) this.xoc=this.x2g;
this.xEh();
}
}
catch (xpb)
{
this.x0g(xpb);
}
}
p1.xy=function(event)
{
if(document.activeElement == this.xRb)
{
var xkg;
if(nhPanoramaViewer.isMac())
{
xkg=event.metaKey;
}
else
{
xkg=event.ctrlKey;
}
var xm=0;
if(event.shiftKey)
{
xm=1;
}
else if(xkg)
{
xm=-1;
}
if(xm != 0)
{
this.xde=xm;
this.xEh();
}
}
}
p1.xVf=function(event)
{
var xkg;
if(nhPanoramaViewer.isMac())
{
xkg=event.metaKey;
}
else
{
xkg=event.ctrlKey;
}
if( (!event.shiftKey) && (!xkg) )
{
this.xde=0;
}
}
p1.xM=function(event)
{
try
{
this.xnc();
this.xEh();
this.x6c();
}
catch (xpb)
{
this.x0g(xpb);
}
}
p1.xW=function(event)
{
{
var xjf=false;
if(this.xUc)
{
if(this.xOd.isContextLost)
{
xjf=this.xOd.isContextLost();
}
}
if(!xjf)
{
this.xEh();
}
var xwc=this;
if(!xjf)
{
this.xke++;
if(this.xke >= 15)
{
this.xke=0;
this.xCf=true;
}
this.x5e();
}
if(this.xUc)
{
if(!xjf)
{
this.xGg();
}
nhPanoramaViewer.requestAnimationFrame(function(){xwc.xW(null)}, this.xRb);
}
else
{
setTimeout(function(){xwc.xW(null)},16.67);
}
}
}
p1.xDf=function(xCg)
{
xCg=((xCg+180.0) % 360.0)-180.0;
if(xCg < -180.0) xCg += 360.0;
return xCg;
}
p1.xp=function()
{
this.xTd=0;
this.x6=0;
this.xE=0;
this.x7d=1;
}
p1.xEh=function()
{
var xzb=this.xmi();
var xbb=0.001*(xzb-this.xjc);
this.xjc=xzb;
if(xbb == 0) xbb=1e-4;
var xhg=false;
if(this.xmg > 0)
{
xhg=true;
if(this.xid != this.xxh) xhg=false;
if(this.xde != 0) xhg=false;
}
if(xhg)
{
if(this.xE == 0)
{
if(this.xsg > 0)
{
this.xE=xzb+1000*this.xsg;
this.x7d=1;
}
}
}
else
{
this.xE=0;
}
if( (this.xE != 0) && (xzb >= this.xE))
{
if(this.xrd())
{
this.xk();
}
var xx=this.xCe(this.xac,this.xDg);
var xMf=xx[0];
var xdh=xx[1];
if((xdh < 180.0) && (this.xie >= xdh))
{
if(this.xmg * this.x7d > 0)
{
this.x7d = -this.x7d;
this.xTd=0;
}
}
if((xMf > -180.0) && (this.xie <= xMf))
{
if(this.xmg * this.x7d < 0)
{
this.x7d = -this.x7d;
this.xTd=0;
}
}
this.xTd=this.xwe(this.xTd, this.xmg * this.x7d, xbb, this.xFg);
var xqd = 0;
if(this.xne)
{
if(this.xDg > 0)
{
xqd=-this.xDg/2;
if(xqd < -this.xog) xqd=-this.xog;
}
else
{
xqd=-this.xDg/2;
if(xqd > this.xog) xqd=this.xog;
}
}
this.x6=this.xwe(this.x6, xqd, xbb, this.xRc);
}
else
{
this.xTd=0;
this.x6=0;
}
var xTb=this.x2g;
var x9c=this.xYc();
if(this.xde != 0)
{
if(this.xoc == 0)
{
this.xoc=this.xac;
}
this.xoc=this.xtd(this.xoc, this.xUe*xbb*this.xde);
if(this.xoc > x9c) this.xoc=x9c;
if(this.xoc < xTb) this.xoc=xTb;
}
var xxc;
if(this.xoc != 0)
{
var xxg=this.xod*xbb;
var x4e=(this.xoc-this.xac);
var xYb=x4e/xbb;
if(x4e > 0)
{
var x8=0.9*Math.sqrt(2*this.xod*x4e);
if(xYb > x8) xYb=x8;
}
else if(x4e < 0)
{
var xJe=-0.9*Math.sqrt(-2*this.xod*x4e);
if(xYb < xJe) xYb=xJe;
}
if(xYb > this.xXh+xxg) xYb=this.xXh+xxg;
if(xYb < this.xXh-xxg) xYb=this.xXh-xxg;
this.xXh=xYb;
xxc=this.xac+xYb*xbb;
}
else
{
xxc=this.xac;
this.xXh=0;
}
var xEd;
if(this.xid == this.xSc)
{
xEd=this.xed;
}
else
{
if(this.xmc)
{
xEd=this.xv;
}
else
{
xEd=this.xMg;
}
}
this.xCc=this.xwe(this.xCc, this.xJ, xbb, xEd);
var xPg=this.xDg+xbb*(this.xCc+this.x6);
this.xzg=this.xwe(this.xzg, this.xvb, xbb, xEd);
var xAe=this.xie+xbb*(this.xzg+this.xTd);
this.xSe(xAe, xPg, xxc);
}
p1.xSe=function(xAe, xPg, xxc)
{
var xTb=this.x2g;
var x9c=this.xYc();
if(xxc < xTb) xxc=xTb;
if(xxc > x9c) xxc=x9c;
var x5f=this.xdf(xxc);
var xhc=x5f[0];
var xle=x5f[1];
if(xPg < xhc)
{
xPg=xhc;
this.xCc=0;
}
else if(xPg > xle)
{
xPg=xle;
this.xCc=0;
}
var xx=this.xCe(xxc,xPg);
var xMf=xx[0];
var xdh=xx[1];
if( (xMf > -180.0) || (xdh < 180.0) )
{
if(xAe < xMf)
{
xAe=xMf;
this.xzg=0;
}
if(xAe > xdh)
{
xAe=xdh;
this.xzg=0;
}
}
else
{
xAe=this.xDf(xAe);
}
if( (xAe != this.xie) || (xPg != this.xDg)|| (xxc != this.xac) )
{
this.xie=xAe;
this.xDg=xPg;
this.xac=xxc;
this.xO();
}
}
p1.xtd=function(xkb, x1e)
{
var xxc=xkb;
if(x1e != 0)
{
var xlf=Math.tan(0.5*xkb*Math.PI/180);
xlf /= Math.exp(x1e);
xxc=2.0*Math.atan(xlf)*180/Math.PI;
}
return xxc;
}
p1.xwe=function(xce, xB, xbb, x4g)
{
var xYb;
if(xB > xce)
{
xYb=xce+x4g*xbb;
if(xYb > xB) xYb=xB;
}
else if(xB < xce)
{
xYb=xce-x4g*xbb;
if(xYb < xB) xYb=xB;
}
else
{
xYb=xce;
}
return xYb;
}
p1.xO=function()
{
this.xCf=true;
}
p1.xgc=function()
{
this.xGb=true;
}
p1.x5e=function()
{
if(this.xCf)
{
this.xnc();
}
}
p1.xmd=function(xif, width, height)
{
var xc=this.xOd;
if( (this.xr != xif) || (this.xQc != width) || (this.xOe != height) )
{
this.xr=xif;
this.xQc=width;
this.xOe=height;
var xLc=new xjk();
xLc.xik(xif, width/height, 1.0, 100.0);
xc.uniformMatrix4fv(this.xnf, false, xLc.xlk());
this.xZ("s4-2");
xc.viewport(0, 0, width, height);
this.xgc();
}
}
p1.xFd=function(xCg, x9d)
{
var xc=this.xOd;
if( (this.xsh != xCg) || (this.x2h != x9d) )
{
this.xsh=xCg;
this.x2h=x9d;
var x3b=new xjk();
x3b.xfk(1,xCg);
var xLc=new xjk();
xLc.xfk(0,-x9d);
x3b.xck(xLc);
xc.uniformMatrix4fv(this.x7h, false, x3b.xlk());
this.xZ("s4-1");
this.xgc();
}
}
p1.xnc=function()
{
this.xCf=false;
if(this.xn) return;
var xhi=false;
if(this.xRb)
{
var xyc=this.xDc();
var xbi=this.xqe();
this.xRb.width=xyc;
this.xRb.height=xbi;
if(xyc < 1) xyc=1;
if(xbi < 1) xbi=1;
if(this.xUc)
{
var xc=this.xOd;
this.xmd(this.xac, xyc, xbi);
this.xFd(this.xie, this.xDg);
}
else
{
var x3c=Math.sqrt(xyc*xyc+xbi*xbi);
var focalLength=x3c/(2*Math.tan(0.5*this.xac*Math.PI/180));
this.xRb.style.msPerspective=this.xRb.style.webkitPerspective=this.xRb.style.MozPerspective=focalLength+"px";
xhi=true;
}
}
if(xhi)
{
var xvf=this.xng();
if(this.xfb)
{
for(var i=0; i < xvf; i++)
{
if(this.xfb[i])
{
this.xfb[i].xnc();
}
}
}
}
}
p1.xhb=function()
{
}
p1.xKg=function()
{
for(var i=0; i < this.xih.length; i++)
{
this.log(this.xih[i]);
}
this.xih.length=0;
}
p1.log=function(xyf)
{
if(this.xRb)
{
if(!this.xrf)
{
var area=document.createElement("textArea");
area.style.position="absolute";
area.style.width="50%";
area.style.height="50%";
area.style.top="0px";
area.style.left="0px";
area.style.zindex="1000";
this.xPc.appendChild(area);
this.xrf=area;
}
this.xrf.value += xyf+"\n";
this.xrf.scrollTop=this.xrf.scrollHeight;
}
else
{
this.xih.push(xyf);
}
}
p1.xug=function(xyf)
{
this.log(xyf);
}
p1.x0g=function(xTg)
{
this.log(xTg.message);
}
p1.xng=function()
{
return 14;
}
p1.xoh=function(xIc)
{
var xze, xKb, xif;
xif=68;
if(xIc < 6)
{
xKb=30;
xze=xIc*60;
}
else if(xIc < 12)
{
xKb=-30;
xze=(xIc-6)*60;
}
else if(xIc == 12)
{
xKb=90;
xze=0;
}
else
{
xKb=-90;
xze=0;
}
return new Array(xze,xKb,xif);
}
p1.xjb=function(xIc)
{
var xab;
var xPe=".jpg";
var xvc;
if(xIc < 10)
{
xvc="0"+xIc;
}
else
{
xvc=""+xIc;
}
var xwh=this.xXb+xvc+xPe;
return xwh;
}
p1.xId=function()
{
if(!this.xfb)
{
this.xfb=new Array();
var xvf=this.xng();
for(var i=0; i < xvf; i++)
{
var xwh=this.xjb(i+1);
var xSf=this.xoh(i);
var xVh=xSf[0];
var xci=xSf[1];
var xV=xSf[2];
var xIh=0;
if(nhPanoramaViewer.isIOS())
{
xIh=this.xGf;
}
var xWg=new xEj(this, xwh, xVh, xci, xV, i, xIh);
this.xfb[i]=xWg;
}
}
}
p1.xXd=function()
{
return this.xie;
}
p1.xob=function()
{
return this.xDg;
}
p1.xBh=function()
{
return this.xRb;
}
p1.x6e=function(xWf)
{
try
{
if(this.xUc)
{
this.xgc();
}
this.xdg--;
this.x8e++;
this.xZe();
}
catch (xpb)
{
this.x0g(xpb);
}
}
p1.xZe=function()
{
if(this.x1g && this.xfb)
{
var xvf=this.xng();
while(true)
{
if(this.xdg >= this.xlg) break;
var xDh=xvf-this.xdg-this.x8e;
if(xDh == 0) break;
var x4h=this.xPf();
if(!x4h) break;
}
}
}
p1.xPf=function()
{
var x4h=false;
if(this.x1g && this.xfb)
{
var x8h=this.xie;
var xKc=this.xDg;
var xvf=this.xng();
var xAd=-1;
var xef;
for(var i=0; i < xvf; i++)
{
var xWg=this.xfb[i];
var xAh=xWg.xui();
if(xAh == xWg.lsNotLoaded)
{
var xdd=this.xig(x8h, xKc, xWg.xOj(), xWg.xDi());
if( (xAd == -1) || (xdd < xef) )
{
xAd=i;
xef=xdd;
}
}
}
if(xAd >= 0)
{
this.xdg++;
this.xfb[xAd].xgj();
x4h=true;
}
}
return x4h;
}
p1.xVb=function()
{
var xeb=this.xjb(0);
this.xTc.src=xeb;
}
p1.xS=function()
{
return window.document.location.toString();
}
p1.xKh=function(xwh, xg)
{
var xud;
if(xwh.search(new RegExp(":\\/\\/")) >= 0)
{
xud=xwh;
}
else
{
if(xwh.search(new RegExp("\\/")) == 0)
{
var xtb=xg.match(new RegExp("^[^\\/]*:\\/\\/[^\\/]*\\/"));
var xic=xg;
if(xtb.length > 0)
{
xic=xtb[0];
}
xic=xic.replace(/\/$/,"");
xud=xic+xwh;
}
else
{
var xgb=xg.replace(/\/[^\/]*$/,"/");
xud=xgb+xwh;
}
}
return xud;
}
p1.xN=function(event)
{
var xeb=this.xjb(0);
this.xug("Failed to load image: "+xeb);
return true;
}
p1.x0c=function(event)
{
try
{
this.x1g=true;
if(this.xsf)
{
this.xyd();
}
if(this.xUc)
{
this.xbc();
}
this.xZe();
}
catch (xpb)
{
this.x0g(xpb);
}
return true;
}
p1.xbc=function()
{
var x8i=this.xTc.width;
var xte=this.xPh(this.xTc);
var xjg=x8i/4;
var xvf=this.xng();
for(var xVe=0; xVe < xvf; xVe++)
{
var xUb=new Array((xVe%4)*xjg,Math.floor(xVe/4)*xjg,xjg,xjg);
this.xfb[xVe].xzi(xte, x8i, xUb);
}
this.xgc();
}
p1.xyd=function()
{
var xeb=this.xjb(0);
var x8i=this.xTc.width;
var xjg=x8i/4;
var xvf=this.xng();
for(var xVe=0; xVe < xvf; xVe++)
{
var xUb=new Array((xVe%4)*xjg,Math.floor(xVe/4)*xjg,xjg,xjg);
this.xfb[xVe].xwi(this.xTc, xUb);
}
}
p1.xig=function(xJh, xMc,xtg, xqb)
{
var xmf=xMc*Math.PI/180.0;
var xpf=xqb*Math.PI/180.0;
var x2c=xJh*Math.PI/180.0;
var xYd=xtg*Math.PI/180.0;
var xud=Math.acos(Math.sin(xmf)*Math.sin(xpf)+Math.cos(xmf)*Math.cos(xpf)*Math.cos(x2c-xYd)) * 180.0/Math.PI;
return xud;
}
p1.x6c=function()
{
}
p1.xcb=function()
{
return this.xcd;
}
p1.xue=function(xh, x9g)
{
}
p1.xyg=function(event)
{
try
{
var xgf=this.xcb();
this.xUh(!xgf);
}
catch (xpb)
{
this.x0g(xpb);
}
}
p1.xve=function()
{
return this.xxf;
}
p1.xAc=function()
{
var x6h=this.xve();
if(!("pano"in x6h))
{
throw new Error("No panorama file is given. Include a 'pano' variable.");
}
this.xXb=x6h["pano"];
if(!("format"in x6h))
{
throw new Error("The 'format' parameter is missing. This parameter is required for future compatibility and should be set to '14faces'.");
}
var x8b=x6h["format"];
if(x8b !="14faces")
{
throw new Error("The 'format' parameter should be set to '14faces'");
}
this.xG=this.x4("maxfov",this.xG,1,179);
this.x2g=this.x4("minfov",this.x2g,1,179);
if(this.x2g > this.xG)
{
this.log("Warning: parameter 'minfov' cannot be greater than 'maxfov'");
this.x2g=this.xG;
}
this.xme=this.x4("fov",this.xme,1,179);
if(this.xme < this.x2g) this.xme=this.x2g;
if(this.xme > this.xG) this.xme=this.xG;
this.xZc=this.x4("maxpan",this.xZc,-180,180);
this.x3h=this.x4("minpan",this.x3h,-180,180);
if(this.x3h > this.xZc)
{
this.log("Warning: parameter 'minpan' cannot be greater than 'maxpan'");
this.x3h=this.xZc;
}
this.xnd=this.x4("pan",this.xnd,-180,180);
if(this.xnd < this.x3h) this.xnd=this.x3h;
if(this.xnd > this.xZc) this.xnd=this.xZc;
this.xMd=this.x4("maxtilt",this.xMd,-90,90);
this.x3d=this.x4("mintilt",this.x3d,-90,90);
if(this.x3d > this.xMd)
{
this.log("Warning: parameter 'mintilt' cannot be greater than 'maxtilt'");
this.x3d=this.xMd;
}
this.xBg=this.x4("tilt",this.xBg,-90,90);
if(this.xBg < this.x3d) this.xBg=this.x3d;
if(this.xBg > this.xMd) this.xBg=this.xMd;
this.xmg=this.x4("autorotatespeed",this.xmg,-1000,1000);
this.xsg=this.x4("autorotatedelay",this.xsg,0,1000);
this.xne=this.xJf("autorotatetohorizon",true);
this.xGf=this.x4("maxiosdimension",this.xGf,0,10000);
this.xrc=this.xJf("showfullscreenbutton_html",true);
if(nhPanoramaViewer.isMac())
{
this.x6g=this.xJf("enablemactouchpad",true);
}
else
{
this.x6g=false;
}
this.xFe=this.xJf("enablegyroscope",true);
if("licensekey"in x6h)
{
this.xwd=x6h["licensekey"];
}
if("flashcontextmenutext"in x6h)
{
this.xad=x6h["flashcontextmenutext"];
}
if("flashcontextmenuurl"in x6h)
{
this.xJd=x6h["flashcontextmenuurl"];
}
if("rightclickhtml"in x6h)
{
this.xR=x6h["rightclickhtml"];
}
if("mousemode"in x6h)
{
if(x6h["mousemode"] =="drag")
{
this.xxb = this.x1d;
}
else if(x6h["mousemode"] =="moveto")
{
this.xxb = this.xHe;
}
else
{
throw new Error("The 'mousemode' should be either 'drag' or 'moveto'");
}
}
}
p1.xJf=function(xSb, xNf)
{
var xud=xNf;
var x6h=this.xve();
if(xSb in x6h)
{
xud=true;
if( (x6h[xSb] === 0)
|| (x6h[xSb] === false)
|| (x6h[xSb] === null)
|| (x6h[xSb] ==="")
|| (x6h[xSb] ==="null")
|| (x6h[xSb] ==="0")
|| (x6h[xSb] ==="false") )
{
xud=false;
}
}
else
{
}
return xud;
}
p1.x4=function(xSb, xNf, xzf, xkh)
{
var x6h=this.xve();
var xud=xNf;
if(xSb in x6h)
{
var xib=x6h[xSb];
xud=xib-0.0;
if(xud < xzf)
{
this.log("Warning: parameter '"+xSb+"' should be at least "+xzf);
xud=xzf;
}
if(xud > xkh)
{
this.log("Warning: parameter '"+xSb+"' should not be greater than "+xkh);
xud=xkh;
}
}
return xud;
}
p1.xYc=function()
{
var xpc=179;
if( (this.xMd < 90) || (this.x3d > -90) )
{
xpc=this.xMd-this.x3d;
if(xpc < 1) xpc=179;
}
var xSh=179;
if( (this.xZc < 90) || (this.x3h > -90) )
{
xSh=this.xZc-this.x3h;
if(xSh < 1) xSh=179;
if(xSh > 179) xSh=179;
}
var x2d=this.xOb();
var xQh=1.0;
var xHf=Math.sqrt(1.0/(x2d*x2d+1.0));
var xec=x2d*xHf;
var xCd=this.xAb(xSh,xec,xQh);
var xvg=this.xAb(xpc,xHf,xQh);
var x3g=this.xG;
if(x3g > xCd) x3g=xCd;
if(x3g > xvg) x3g=xvg;
if(x3g < this.x2g) x3g=this.x2g;
return x3g;
}
p1.xdf=function(xMh)
{
var x2d=this.xOb();
var xQh=1.0;
var xHf=Math.sqrt(1.0/(x2d*x2d+1.0));
var xec=x2d*xHf;
var xQf=this.xAb(xMh,1.0,xHf);
var xNh=this.xAb(xMh,1.0,xec);
var xle=this.xMd;
if(this.xMd < 90)
{
xle=this.xMd-0.5*xQf;
}
var xhc=this.x3d;
if(this.x3d > -90)
{
xhc=this.x3d+0.5*xQf;
}
if(xhc > xle)
{
xhc=0.5*(xhc+xle);
xle=xhc;
}
return new Array(xhc, xle);
}
p1.xCe=function(xMh, x9d)
{
var x2d=this.xOb();
var xQh=1.0;
var xHf=Math.sqrt(1.0/(x2d*x2d+1.0));
var xec=x2d*xHf;
var xQf=this.xAb(xMh,1.0,xHf);
var xNh=this.xAb(xMh,1.0,xec);
var xHb=x9d+0.5*xQf;
var x9=x9d-0.5*xQf;
var xAf;
if( (xHb >= 90) || (x9 <= -90) )
{
xAf=90;
}
else
{
if(xHb > (-x9))
{
xAf=xHb;
}
else
{
xAf=-x9;
}
}
var xU=Math.cos(xAf*Math.PI/180.0);
if(xU < 1e-4) xU=1e-4;
var x1b=xNh/xU;
var xMf=this.x3h;
var xdh=this.xZc;
if( (this.x3h > -180.0) || (this.xZc < 180.0) )
{
xMf=this.x3h+0.5*x1b;
xdh=this.xZc-0.5*x1b;
}
if(xMf > xdh)
{
xMf=0.5*(xMf+xdh);
xdh=xMf;
}
return new Array(xMf, xdh);
}
p1.xOb=function()
{
var x2d=1;
if( (this.width > 0) && (this.height > 0) )
{
x2d=this.width/this.height;
}
return x2d;
}
p1.xAb=function(xHd, xqf, x0e)
{
return 2.0*180.0/Math.PI*Math.atan(x0e/xqf*Math.tan(0.5*xHd*Math.PI/180.0));
}
p1.xmi=function()
{
return new Date().getTime();
}
p1.xDc=function()
{
var xud=0;
if(this.xRb)
{
xud=this.xRb.offsetWidth;
}
return xud;
}
p1.xqe=function()
{
var xud=0;
if(this.xRb)
{
xud=this.xRb.offsetHeight;
}
return xud;
}
p1.x0d=function()
{
var xgf=this.xcb();
this.xUh(!xgf);
}
nhPanoramaViewer.showNavigator=function()
{
var properties=new Array("appCodeName","appName","appVersion","buildID","oscpu","platform","product","productSub",
"userAgent","vendor","vendorSub");
var xq;
for(var xKf in properties)
{
var property=properties[xKf];
xq += property+": "+window.navigator[property]+"\n";
}
alert(xq);
}
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.isFirefox=function()
{
return !!(window.navigator.userAgent.match(/ firefox\/.*/i));
}
nhPanoramaViewer.getChromeVersion=function()
{
var xtb=window.navigator.userAgent.match(/ Chrome\/([0-9]+)\.([0-9]+)\./);
var version=[0,0];
if(xtb !== null)
{
version=xtb.slice(1,3).map(function(xGl){
return xGl-0;
});
}
return version;
}
nhPanoramaViewer.isAndroid=function()
{
var xud=false;
if(window.navigator.userAgent.match(/ android /i)) xud=true;
if(window.navigator.userAgent.match(/\(android;/i)) xud=true;
return xud;
}
nhPanoramaViewer.isMac=function()
{
return !!(window.navigator.platform.match(/^mac/i));
}
p1.xBd=function(event)
{
var touch=event.touches[0];
event.preventDefault();
if(event.touches.length == 1)
{
this.xLd(event.touches[0].clientX, event.touches[0].clientY);
}
else
{
if(this.xid != this.xxh)
{
this.xsc();
}
if(event.touches.length == 2)
{
var xub=this.xki(event);
this.xai=xub[0];
this.xIb=xub[1];
this.xIg=xub[2];
this.xWh=window.pageXOffset;
this.xNd=window.pageYOffset;
this.xid=this.xgg;
this.x8g=this.xac;
}
else
{
this.xid=this.xxh;
}
}
}
p1.xDe=function(event)
{
event.preventDefault();
if( (this.xid == this.xSc) || (this.xid == this.xZf))
{
this.xe(event.touches[0].clientX, event.touches[0].clientY);
}
else if(this.xid == this.xgg)
{
var xTb=this.x2g;
var x9c=this.xYc();
var xub=this.xki(event);
var x9h=xub[0];
var xUd=xub[1];
var x8c=xub[2];
var xLf;
if(x9h < 1)
{
xLf=100000;
}
else
{
xLf=this.xai / x9h;
}
var xlf=Math.tan(0.5*this.x8g*Math.PI/180.0);
xlf *= xLf;
var xxc=2.0*Math.atan(xlf)*180.0/Math.PI;
if(xxc < xTb) xxc=xTb;
if(xxc > x9c) xxc=x9c;
if(this.xac != xxc)
{
this.xac=xxc;
this.xoc=0;
this.xO();
}
if(!this.xcb())
{
var xA=this.xIb+this.xWh-xUd;
var x3=this.xIg+this.xNd-x8c;
window.scroll(xA, x3);
}
}
}
p1.xvd=function(event)
{
event.preventDefault();
if( (this.xid == this.xSc) || (this.xid == this.xZf))
{
this.xsc();
}
else if(this.xid == this.xgg)
{
this.xid=this.xxh;
}
}
p1.xki=function(event)
{
var xZc=event.touches[0].clientX;
var xFb=event.touches[0].clientY;
var xse=event.touches[1].clientX;
var xhf=event.touches[1].clientY;
var xli=xse-xZc;
var xbf=xhf-xFb;
var xdd=Math.sqrt(xli*xli+xbf*xbf);
var xT=(xZc+xse)/2;
var xRf=(xFb+xhf)/2;
return new Array(xdd, xT, xRf);
}
p1.xBc=function()
{
var xld=document.getElementsByTagName("meta");
for(var i=0; i < xld.length; i++)
{
var xuh=xld[i];
if(xuh.name ==="viewport") return xuh;
}
return null;
}
p1.xCh=function()
{
var xud="";
var xuh=this.xBc();
if(xuh)
{
xud=xuh.getAttribute("content");
}
return xud;
}
p1.x6f=function(content)
{
var xuh=this.xBc();
if(!xuh)
{
xuh=document.createElement("meta");
xuh.setAttribute("name","viewport");
document.head.appendChild(xuh);
}
xuh.setAttribute("content",content);
}
p1.xWe=function()
{
var isfullscreen=(document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement);
this.xcd=isfullscreen;
if(isfullscreen) this.m_TrueFullScreen=true;
this.xWd();
}
p1.x0h=function(xgf)
{
if(this.xcd != xgf)
{
var done=false;
if(xgf)
{
if(document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled)
{
var xYh = this.xPc;
if (xYh.requestFullscreen) {
xYh.requestFullscreen();
done=true;
}else if (xYh.mozRequestFullScreen) {
xYh.mozRequestFullScreen();
done=true;
}else if (xYh.webkitRequestFullscreen) {
xYh.webkitRequestFullscreen();
done=true;
}
}
}
else
{
if(this.m_TrueFullScreen)
{
if (document.cancelFullScreen) {
document.cancelFullScreen();
}else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
}else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
done=true;
}
}
if(done)
{
this.xO();
}
else
{
this.m_TrueFullScreen=false;
var xwc=this;
if(nhPanoramaViewer.isIOS())
{
xwc.xn=true;
xwc.x1c(xwc.xmh, xwc.xRb);
xwc.xmh.style.visibility="visible";
setTimeout(function(){
xwc.xn=false;
xwc.xNb(xgf);
xwc.xmh.style.visibility="hidden";
},100);
}
else
{
xwc.xNb(xgf);
}
}
}
}
p1.xNb=function(xgf)
{
if(this.xcd != xgf)
{
if(xgf)
{
this.xt=document.body;
this.xrh=document.documentElement.style.cssText;
var xwc=this;
var xdi=document.createElement("body");
xdi.appendChild(xwc.xPc);
xdi.style.margin="0px";
xdi.style.padding="0px";
xdi.style.width="100%";
xdi.style.height="100%";
document.body=xdi;
document.documentElement.style.cssText="width:100%;height:100%";
window.scroll(100000,0);
xwc.xPc.style.visibility="hidden";
setTimeout(function(){
xwc.xPc.style.visibility="visible";
},1);
xwc.xnc();
}
else
{
document.body=this.xt;
document.documentElement.style.cssText=this.xrh;
this.xfh.appendChild(this.xPc);
this.xnc();
}
this.xcd=xgf;
this.xWd();
}
}
p1.xlc=function(xyf)
{
var xud="";
for(var i=0; i < xyf.length; i++)
{
var x8j=xyf.charCodeAt(i);
if( (x8j >= 48) && (x8j < 128) )
{
x8j=((x8j-48))^0x46+48;
}
xud += String.fromCharCode(x8j);
}
return xud;
}
nhPanoramaViewer.isSupported=function()
{
if(!document.addEventListener) return false;
if(nhPanoramaViewer.has3dCss()) return true;
if(nhPanoramaViewer.hasWebGL()) return true;
return false;
}
nhPanoramaViewer.has3dCss=function()
{
var xRg=document.createElement("div");
if(!xRg) return false;
if(typeof xRg.style.webkitPerspective =="string") {}
else if(typeof xRg.style.MozPerspective =="string") {}
else return false;
if(nhPanoramaViewer.isChrome())
{
var chromeversion=nhPanoramaViewer.getChromeVersion();
if(chromeversion[0]-0 < 22) return false;
}
if(window.navigator.userAgent.match(/ firefox\/.*/i))
{
if(window.navigator.userAgent.match(/[^xWj-zA-Z]linux[^xWj-zA-Z]/i))
{
return false;
}
}
return true;
}
nhPanoramaViewer.hasWebGL=function()
{
var xc=null;
var xBf=document.createElement("canvas");
try
{
xc = xBf.getContext("webgl");
}
catch(xfe) {}
if(!xc)
{
try
{
xc = xBf.getContext("experimental-webgl");
}
catch(xfe) {}
}
return (xc != null);
}
p1.xRh=function(xtf)
{
var xc;
try
{
xc = xtf.getContext("webgl");
}
catch(xfe) {}
if(!xc)
{
try
{
xc = xtf.getContext("experimental-webgl");
}
catch(xfe) {}
}
if(!xc)
{
throw new Error("Could not initialize WebGL");
}
this.xOd=xc;
xc.clearColor(0.0, 0.0, 0.0, 1.0);
xc.clearDepth(1.0)
xc.enable(xc.DEPTH_TEST);
xc.depthFunc(xc.LEQUAL);
this.xZ("s1-1");
var xKe="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 x7e="uniform sampler2D sampler2d; varying mediump vec2 v_texCoord;void main(void){gl_FragColor = texture2D(sampler2d, v_texCoord);}";
this.xL=this.xAg(xKe,x7e);
this.x0b=new xjk();
this.xff=new xjk();
this.x7h=xc.getUniformLocation(this.xL,"modelViewMatrix");
this.xZ("s1-2");
this.xnf=xc.getUniformLocation(this.xL,"perspectiveMatrix");
this.xZ("s1-3");
this.xgi = xc.getAttribLocation(this.xL,"vertexPosition");
this.xZ("s1-4");
xc.enableVertexAttribArray(this.xgi);
this.xZ("s1-5");
this.x7f = xc.getAttribLocation(this.xL,"vTexCoord");
this.xZ("s1-6");
xc.enableVertexAttribArray(this.x7f);
this.xZ("s1-7");
var loc=xc.getUniformLocation(this.xL,"sampler2d");
this.xZ("s1-10");
xc.uniform1i(loc, 0);
this.xZ("s1-11");
}
p1.xZ=function(xZd)
{
var xTg=this.xOd.getError();
if(xTg != this.xOd.NO_ERROR)
{
throw new Error("webGL error: "+xZd+": "+xTg);
}
}
p1.xuf=function(xfd, xof)
{
var xc=this.xOd;
var xxd=xc.createShader(xfd);
this.xZ("s2-1");
xc.shaderSource(xxd, xof);
this.xZ("s2-2");
xc.compileShader(xxd);
this.xZ("s2-3");
if(!xc.getShaderParameter(xxd, xc.COMPILE_STATUS))
{
var xLg=xc.getShaderInfoLog(xxd);
xc.deleteShader(xxd);
throw new Error("Couldn't compile shader:\n"+xLg);
}
return xxd;
}
p1.xAg=function(xRd, x7e)
{
var xc=this.xOd;
var xae=null;
var xoi=null;
var xqh=null;
try
{
xoi=this.xuf(xc.VERTEX_SHADER, xRd);
xqh=this.xuf(xc.FRAGMENT_SHADER, x7e);
var xae = xc.createProgram();
this.xZ("s3-1");
xc.attachShader(xae, xoi);
this.xZ("s3-2");
xc.attachShader(xae, xqh);
this.xZ("s3-3");
xc.linkProgram(xae);
this.xZ("s3-4");
if(!xc.getProgramParameter(xae, xc.LINK_STATUS))
{
var xLg=xc.getProgramInfoLog(xae);
throw new Error("Couldn't link program:\n"+xLg);
}
xc.useProgram(xae);
this.xZ("s3-5");
}
catch(xfe)
{
try
{
if(xoi) xc.deleteShader(xoi);
if(xqh) xc.deleteShader(xqh);
if(xae) xc.deleteProgram(xae);
}catch(x7m) {}
throw xfe;
}
return xae;
}
p1.xGg=function()
{
if(this.xGb)
{
this.xGb=false;
var xc=this.xOd;
xc.clear(xc.COLOR_BUFFER_BIT | xc.DEPTH_BUFFER_BIT);
var xvf=this.xng();
if(this.xfb)
{
for(var i=0; i < xvf; i++)
{
var xWg=this.xfb[i];
if(xWg)
{
var xcg=xWg.xQi();
if(xcg)
{
xc.bindTexture(xc.TEXTURE_2D, xcg[0]);
xc.bindBuffer(xc.ARRAY_BUFFER, xcg[1]);
xc.vertexAttribPointer(this.xgi, 3.0, xc.FLOAT, false, 0, 0);
xc.bindBuffer(xc.ARRAY_BUFFER, xcg[2]);
xc.vertexAttribPointer(this.x7f, 2.0, xc.FLOAT, false, 0, 0);
xc.drawArrays(xc.TRIANGLE_STRIP, 0, 4);
}
}
}
}
xc.flush();
this.xZ("s5-6");
xc.finish();
this.xZ("s5-7");
}
}
p1.xnh=function(xXe)
{
var xc=this.xOd;
var xre = xc.createBuffer();
this.xZ("s5-1");
xc.bindBuffer(xc.ARRAY_BUFFER, xre);
this.xZ("s5-2");
xc.bufferData(xc.ARRAY_BUFFER, new Float32Array(xXe), xc.STATIC_DRAW);
this.xZ("s5-3");
return xre;
}
p1.xPh=function(xBe)
{
var xc=this.xOd;
var xte=xc.createTexture();
this.xZ("s7-1");
xc.bindTexture(xc.TEXTURE_2D, xte);
this.xZ("s7-2");
xc.pixelStorei(xc.UNPACK_FLIP_Y_WEBGL, true);
xc.texParameteri(xc.TEXTURE_2D, xc.TEXTURE_MIN_FILTER, xc.LINEAR);
xc.texParameteri(xc.TEXTURE_2D, xc.TEXTURE_MAG_FILTER, xc.LINEAR);
xc.texParameteri(xc.TEXTURE_2D, xc.TEXTURE_WRAP_S, xc.CLAMP_TO_EDGE);
xc.texParameteri(xc.TEXTURE_2D, xc.TEXTURE_WRAP_T, xc.CLAMP_TO_EDGE);
this.xZ("s7-3");
try
{
xc.texImage2D(xc.TEXTURE_2D, 0, xc.RGBA, xc.RGBA, xc.UNSIGNED_BYTE, xBe);
}
catch(xfe)
{
if( (xfe.name =="SecurityError")
&& (nhPanoramaViewer.isChrome())
&& window.location.href.match(/^file\:\/\/.*/)
&& xBe.src.match(/^file\:\/\/.*/) )
{
throw new Error("Failed to load panorama. Due to security restrictions in Chrome the panorama viewer cannot access images stored locally on your computer."
+" To resolve the problem, upload the panorama to a web server and access it over the web. Or launch Chrome with the --allow-file-access-from-files flag"
+" (google for more information) to disable this security restriction.\n\n"
+"Note that this error will not appear when the panorama is viewed on the web."
+"\n\nDetails: "+xfe.message
);
}
else
{
throw xfe;
}
}
this.xZ("s7-4");
return xte;
}
nhPanoramaViewer.requestAnimationFrameFunc=null;
nhPanoramaViewer.requestAnimationFrame=function(callback, element)
{
if(!nhPanoramaViewer.requestAnimationFrameFunc)
{
var xtc = [
"mozRequestAnimationFrame",
"oRequestAnimationFrame",
"requestAnimationFrame",
"webkitRequestAnimationFrame",
"msRequestAnimationFrame"
];
for (var i = 0; i < xtc.length; ++i)
{
if(window[xtc[i]])
{
var thefunc=window[xtc[i]];
nhPanoramaViewer.requestAnimationFrameFunc=function(callback,element) {
thefunc.call(window, callback, element);
};
break;
}
}
if(!nhPanoramaViewer.requestAnimationFrameFunc)
{
nhPanoramaViewer.requestAnimationFrameFunc=function(callback,element) {
window.setTimeout(callback,16.67);
};
}
}
nhPanoramaViewer.requestAnimationFrameFunc(callback,element);
}
p1.xoe=function(xfe)
{
var xzb=this.xmi() / 1000.0;
var deltanow=0.01;
if(this.m_PrevDeviceMotionTime)
{
deltanow=xzb-this.m_PrevDeviceMotionTime;
}
this.m_PrevDeviceMotionTime=xzb;
if(xfe.rotationRate && xfe.accelerationIncludingGravity)
{
var xwf=xfe.rotationRate;
var xah=xfe.accelerationIncludingGravity;
var interval=deltanow;
if( (!isNaN(xah.x)) && (!isNaN(xah.y)) && (!isNaN(xah.z))
&& (!isNaN(xwf.alpha)) && (!isNaN(xwf.beta)) && (!isNaN(xwf.gamma))
&& (!isNaN(interval)) )
{
if(this.xwb == 0)
{
this.xwb=xzb+1.0;
}
if(xzb >= this.xwb)
{
var xi=[xah.x, xah.y, xah.z];
if(this.m_gravityReversed)
{
xi[0]=-xi[0];
xi[1]=-xi[1];
xi[2]=-xi[2];
}
if(this.xWb != null)
{
var xrg=this.x5h;
xrg=Math.pow(xrg,interval);
var xch=1.0-xrg;
xi[0]=xch*xi[0]+xrg*this.xWb[0];
xi[1]=xch*xi[1]+xrg*this.xWb[1];
xi[2]=xch*xi[2]+xrg*this.xWb[2];
}
this.xWb=xi;
var x5d=Math.sqrt(xi[0]*xi[0]+xi[1]*xi[1]+xi[2]*xi[2]);
if(x5d > 0)
{
var xbe=1.0/x5d;
xi[0] *= xbe;
xi[1] *= xbe;
xi[2] *= xbe;
}
this.xDb=xi;
var xKb=Math.asin(xi[2]);
var xEb=0;
if( (xi[0] != 0) || (xi[1] != 0) )
{
xEb=Math.atan2(xi[0],-xi[1]);
}
xEb *= 180.0/Math.PI;
xKb *= 180.0/Math.PI;
if(this.xid == this.xxh)
{
if(this.xbg == this.xrb)
{
var xMe=xi[0]-this.x2e[0];
var xVd=xi[1]-this.x2e[1];
var xgh=xi[2]-this.x2e[2];
var xHc=xMe*xMe+xVd*xVd+xgh*xgh;
if(xHc > 0.1)
{
this.x9e(xKb);
}
}
else if(this.xbg == this.xYf)
{
if(xKb > -60)
{
this.x9e(xKb);
}
}
}
if(this.xbg == this.xu)
{
if( (Math.abs(xwf.alpha) > 20)
|| (Math.abs(xwf.beta) > 20)
|| (Math.abs(xwf.gamma) > 20) )
{
this.xp();
}
}
var xxe=xwf.alpha;
var xLh=xwf.beta;
var xw=xwf.gamma;
xxe *= interval;
xLh *= interval;
xw *= interval;
if(this.m_rotationRateRadians)
{
xxe *= 180.0/Math.PI;
xLh *= 180.0/Math.PI;
xw *= 180.0/Math.PI;
}
var xd=new xjk();
var xTf=new xjk();
xTf.xfk(2,xw);
xd.xck(xTf);
xTf.xfk(1,xLh);
xd.xck(xTf);
xTf.xfk(0,xxe);
xd.xck(xTf);
var xBb=new xjk();
xTf.xfk(2,-xEb);
xBb.xck(xTf);
xTf.xfk(0,xKb);
xBb.xck(xTf);
var xRe=new xjk(xBb);
xRe.x5j();
var xNg=new xjk();
xNg.xck(xRe);
xNg.xck(xd);
xNg.xck(xBb);
var xOg=xNg.x6j([1,0,0]);
var x4c=Math.atan2(xOg[2],xOg[0]);
x4c *= 180.0/Math.PI;
var xAe=this.xie;
if(this.xTd == 0)
{
xAe += x4c;
}
var xPg;
if( (this.xid == this.xxh)
&& (this.xbg == this.xu)
)
{
var xbh=interval*180;
if(this.xHg > 0)
{
this.xHg -= xbh;
if(this.xHg < 0) this.xHg=0;
}
else if(this.xHg < 0)
{
this.xHg += xbh;
if(this.xHg > 0) this.xHg=0;
}
xPg=xKb+this.xHg;
if(xPg < -90) xPg=-90;
if(xPg > 90) xPg=90;
}
else
{
xPg=this.xDg;
}
if( (!isNaN(xAe)) && (!isNaN(xPg)))
{
this.xSe(xAe,xPg,this.xac);
}
}
}
}
}
p1.xs=function(xfe)
{
this.log("Error: WebGL context lost");
}
p1.xTe=function(xfe)
{
this.log("WebGL context restored");
}
p1.xrd=function()
{
return (this.xbg == this.xu);
}
p1.xk=function()
{
if(this.xbg != this.xYf)
{
this.x2e=this.xDb;
this.xbg=this.xrb;
}
}
p1.x9e=function(xGe)
{
if(xGe < -60)
{
this.xbg=this.xYf;
}
else
{
this.xbg=this.xu;
this.xHg=this.xDg-xGe;
this.xp();
}
}
p1.xyb=function()
{
var xse="The publisher of this panorama should check the contents of the 'licensekey' field in the parameters for this panorama.";
if(this.xVg < 0)
{
this.xVg=0;
if(this.xwd !="")
{
var xDd=this.x9f(this.xwd);
if(xDd.valid)
{
var xpd=this.xqc();
if(xpd =="")
{
this.log("License key ('licensekey' field) ignored since the panorama is viewed on the local computer.");
}
else
{
var xeg=false;
if(xpd == xDd.host)
{
xeg=true;
}
else
{
var xcf="."+xDd.host;
var x7b=xpd.lastIndexOf(xcf);
if( (x7b >= 0) && (x7b == (xpd.length-xcf.length)) )
{
xeg=true;
}
}
if(xeg)
{
this.xVg=1;
}
else
{
this.log("Invalid license: the license is valid for '"+xDd.host+"' but the panorama is stored on '"+xpd+"'. "+xse);
}
}
}
else
{
this.log("Invalid license key. "+xse);
}
}
}
return (this.xVg > 0);
}
p1.xNc=function(x7g)
{
var valid=false;
var x7b=x7g.lastIndexOf(":");
if(x7b >= 0)
{
var xq=x7g.substr(0,x7b);
var xUf=x7g.substr(x7b+1,x7g.length-x7b-1);
var x4b=new xTk(this.x4f);
var xEf=new xTk(this.xJc);
var xpg=new xtp();
xpg.xPn(x4b, xEf);
valid=xpg.xkp(xq, xUf);
}
return valid;
}
p1.x9f=function(x7g)
{
var xud=new Object();
try
{
xud.valid=this.xNc(x7g);
}
catch(xfe)
{
xud.valid=false;
}
if(xud.valid)
{
var components=x7g.split(":");
if(components.length < 3)
{
xud.valid=false;
}
else
{
xud.host=components[0];
xud.version=components[1];
}
}
return xud;
}
p1.xx8944hjkxx7jk=function(xkf, xOh)
{
xkf=xkf.toLowerCase();
var xq=xkf.toLowerCase()+":1";
var xEf=new xTk(this.xJc);
var xK=new xTk(xOh);
var x4b=new xTk(this.x4f);
var xpg=new xtp();
xpg.xon(xK, xEf);
xpg.xPn(x4b, xEf);
var xUf=xpg.x8o(xq,true);
var x7c=xq+":"+xUf;
var xY=this.x9f(x7c);
if(!xY.valid)
{
xY=this.x9f(x7c);
throw new Error("Check failed");
}
return x7c;
}
p1.xqc=function()
{
var xXf=this.xjb(0);
var xg=this.xS();
xXf=this.xKh(xXf,xg);
var host="";
if(xXf.indexOf("://") >= 0)
{
host=xXf.replace(new RegExp("^.*:\\/\\/"),"");
host=host.replace(new RegExp("\\/.*$"),"");
host=host.replace(new RegExp(":.*$"),"");
}
host=host.toLowerCase();
return host;
}
var p2=xEj.prototype;
p2.lsNotLoaded=0;
p2.xij=1;
p2.xPj=2;
p2.xuj=3;
p2.x1g=false;
p2.xsi=0;
function xEj(xZi, xzj, xze, xKb, xif, xIc, xIh)
{
this.xSj=this.lsNotLoaded;
this.xrj=xZi;
this.xBj=xzj;
this.xUj=xze;
this.xVi=xKb;
this.xQj=xif;
this.xRj=xIc;
this.xbj=xIh;
if(this.xrj.xsf)
{
var xYe=document.createElement("div");
xYe.style.position="absolute";
xYe.style.msBackfaceVisibility=xYe.style.webkitBackfaceVisibility=xYe.style.MozBackfaceVisibility="hidden";
xYe.style.MozTransformStyle="preserve-3d";
xYe.style.top="0px";
xYe.style.left="0px";
var xdj=xZi.xBh();
xdj.appendChild(xYe);
this.xRb=xYe;
}
if(this.xrj.xUc)
{
this.x7i();
}
var xD=document.createElement("img");
xD.style.position="absolute";
xD.style.top="0px";
xD.style.left="0px";
xD.style.visibility="hidden";
this.xvi=xD;
var xwc=this;
if(document.addEventListener)
{
xD.addEventListener("load", function(xfe){return xwc.xCi(xfe? xfe : window.event)}, false);
xD.addEventListener("error", function(xfe){return xwc.xBi(xfe? xfe : window.event)}, false);
}
else if(document.attachEvent)
{
xD.attachEvent("onload", function(xfe){return xwc.xCi(xfe? xfe : window.event)});
xD.attachEvent("onerror", function(xfe){return xwc.xBi(xfe? xfe : window.event)});
}
if(this.xrj.xsf)
{
this.xRb.appendChild(this.xvi);
var x3i=document.createElement("canvas");
x3i.style.position="absolute";
x3i.style.top="0px";
x3i.style.left="0px";
x3i.style.visibility="hidden";
xYe.appendChild(x3i);
this.xLj=x3i;
}
this.xlj();
}
p2.x7i=function()
{
var xdd=10;
var width=xdd*Math.tan(0.5*this.xQj*Math.PI/180);
var xNj=new xjk();
xNj.xfk(0,this.xVi);
var xLc=new xjk();
xLc.xfk(1,-this.xUj);
xNj.xck(xLc);
var xqi=[];
for(var xqj=0; xqj < 4; xqj++)
{
var xJj=[];
xJj[0]=(xqj & 1)? -width : width;
xJj[1]=(xqj & 2)? -width : width;
xJj[2]=-xdd;
xJj=xNj.x6j(xJj);
xqi=xqi.concat(xJj);
}
this.xWi=this.xrj.xnh(xqi);
}
p2.xgj=function()
{
this.xAi();
}
p2.xAi=function()
{
this.xSj=this.xij;
if(this.xsi > 0)
{
var xwc=this;
window.setTimeout(function(){xwc.xvi.src=xwc.xBj}, this.xsi*1000);
}
else
{
this.xvi.src=this.xBj;
}
}
p2.xBi=function(event)
{
this.xrj.xug("Failed to load image: "+this.xBj);
this.xSj=this.xuj;
this.xrj.x6e(this);
return true;
}
p2.xCi=function(event)
{
this.xSj=this.xPj;
if(this.xvi.width != this.xvi.height)
{
this.xrj.xug("Image "+this.xBj+" should be square");
}
var xpj=this.xvi.width;
if(this.xbj && (this.xvi.width > this.xbj))
{
this.xvi.width=this.xbj;
this.xvi.height=this.xbj;
var xwc=this;
}
this.xCj=new Array(this.xvi.width, this.xvi.height);
if(this.xrj.xsf)
{
this.xnc();
this.xLj.style.visibility="hidden";
this.xvi.style.visibility="visible";
this.xRb.style.width=this.xCj[0]+"px";
this.xRb.style.height=this.xCj[1]+"px";
}
else
{
this.xkj=this.xrj.xPh(this.xvi);
this.xsj(0.0, 0.0, 1.0, 1.0);
}
if(nhPanoramaViewer.isIOS())
{
var xwc=this;
setTimeout(function(){
xwc.xrj.x6e(this);
},100);
}
else
{
this.xrj.x6e(this);
}
return true;
}
p2.xlj=function()
{
}
p2.xPi=function(event)
{
try
{
xRi(this.xKj,false);
this.xKj=null;
this.xrj.x6e(this);
}
catch (xpb)
{
this.xrj.xug(xpb.toString());
}
}
p2.xnc=function()
{
if((this.xSj == this.xPj) || this.x1g)
{
this.xIj();
}
}
p2.xIj=function()
{
if(this.xrj.xsf)
{
var xfj=this.xrj.xXd();
var xtj=this.xrj.xob();
var xvj=this.xrj.xDc();
var x2i=this.xrj.xqe();
var x8i=this.xCj[0];
var xKi=this.xCj[1];
var xwj=1000.0*(this.xRj+1);
var ownerstyle=this.xrj.xBh().style;
var xyj=1;
if(typeof ownerstyle.webkitPerspective =="string")
{
xyj=ownerstyle.webkitPerspective;
}
else if(typeof ownerstyle.MozPerspective =="string")
{
xyj=ownerstyle.MozPerspective;
}
else
{
xyj=ownerstyle.msPerspective;
}
xyj=xyj.replace(/\s*px\s*$/,"");
xyj=xyj-0;
var xLi=0.5*xwj/Math.tan(0.5*this.xQj*Math.PI/180);
var xDj="translate3d("+(-(x8i-xvj)/2).toFixed(4)+"px,"+(-(xKi-x2i)/2).toFixed(4)+"px,"+xyj.toFixed(4)+"px)"
+" rotateX("+xtj.toFixed(4)+"deg)"
+" rotateY("+(xfj-this.xUj).toFixed(4)+"deg)"
+" rotateX("+(-this.xVi).toFixed(4)+"deg)"
+" translate3d(0px,0px,"+(-xLi).toFixed(4)+"px)"
+" scale3d("+(xwj/x8i).toFixed(4)+","+(xwj/xKi).toFixed(4)+",1)";
this.xRb.style.msTransform=this.xRb.style.webkitTransform=this.xRb.style.MozTransform=xDj;
}
}
p2.xui=function()
{
return this.xSj;
}
p2.x9i=function()
{
return this.x1g;
}
p2.xOj=function()
{
return this.xUj;
}
p2.xDi=function()
{
return this.xVi;
}
p2.xwi=function(x3i, xUb)
{
this.x1g=true;
if(this.xSj != this.xij) this.xSj=this.lsNotLoaded;
var xjg=xUb[2];
var xri=xUb[3];
var previewimage=this.xLj;
previewimage.width=xjg;
previewimage.height=xri;
var xxi = previewimage.getContext('2d');
xxi.drawImage(x3i, xUb[0], xUb[1], xjg, xri, 0, 0, xjg, xri);
previewimage.style.visibility="visible";
this.xRb.style.width=previewimage.width+"px";
this.xRb.style.height=previewimage.height+"px";
this.xCj=new Array(previewimage.width,previewimage.height);
this.xnc();
}
p2.xzi=function(xHj, x8i, xUb)
{
this.xkj=xHj;
var x4i=xUb[0]/x8i;
var xyi=(xUb[0]+xUb[2])/x8i;
var xoj=1.0-(xUb[1]+xUb[3])/x8i;
var xmj=1.0-xUb[1]/x8i;
this.xsj(x4i, xoj, xyi, xmj);
this.x1g=true;
if(this.xSj != this.xij) this.xSj=this.lsNotLoaded;
}
p2.xsj=function(x4i, xoj, xyi, xmj)
{
this.xTj=this.xrj.xnh([xyi, xmj, x4i, xmj, xyi, xoj, x4i, xoj]);
}
p2.xQi=function()
{
if(this.xkj)
{
return [this.xkj, this.xWi, this.xTj];
}
else
{
return null;
}
}
var p3=xjk.prototype;
p3.x1j=[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
function xjk(src)
{
if(src)
{
this.x1j=src.x1j.slice(0);
}
}
p3.xck=function(xhk)
{
var xkk=[];
var x0j=0;
var x4j=0;
var xWj;
var xak;
var xmk;
while(true)
{
xWj=0;
xak=x0j;
xmk=x4j;
while(true)
{
xWj += this.x1j[xak++]*xhk.x1j[xmk];
xmk += 4;
if(xmk >= 16) break;
}
xkk.push(xWj);
x4j++;
if(x4j == 4)
{
x0j += 4;
if(x0j == 16) break;
x4j=0;
}
}
this.x1j=xkk;
return this;
}
p3.xik=function(xMh, x2d, xYj, x7j)
{
var xZh=0.5 * xMh * Math.PI / 180.0;
var xoj=xYj * Math.tan(xZh) / Math.sqrt(1+x2d*x2d);
var xyi=xoj*x2d;
var xdk=1.0/(x7j-xYj);
this.x1j = [
xYj/xyi, 0, 0, 0,
0, xYj/xoj, 0, 0,
0, 0, -(xYj+x7j)*xdk, -1,
0, 0, -2*x7j*xYj*xdk, 0
];
return this;
}
p3.xfk=function(xZj,x2j)
{
var x9j=Math.PI * x2j / 180.0;
var x8j=Math.cos(x9j);
var s=Math.sin(x9j);
if(xZj == 0)
{
this.x1j = [
1, 0, 0, 0,
0, x8j, s, 0,
0, -s, x8j, 0,
0, 0, 0, 1
];
}
else if(xZj == 1)
{
this.x1j = [
x8j, 0, -s, 0,
0, 1, 0, 0,
s, 0, x8j, 0,
0, 0, 0, 1
];
}
else
{
this.x1j = [
x8j, s, 0, 0,
-s, x8j, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
];
}
return this;
}
p3.xlk=function()
{
return new Float32Array(this.x1j);
}
p3.x6j=function(xnk)
{
var xkk=this.x1j;
var x=xkk[0]*xnk[0]+xkk[4]*xnk[1]+xkk[8]*xnk[2]+xkk[12];
var y=xkk[1]*xnk[0]+xkk[5]*xnk[1]+xkk[9]*xnk[2]+xkk[13];
var z=xkk[2]*xnk[0]+xkk[6]*xnk[1]+xkk[10]*xnk[2]+xkk[14];
var xyc=xkk[3]*xnk[0]+xkk[7]*xnk[1]+xkk[11]*xnk[2]+xkk[15];
if(xyc != 1.0)
{
var xgk=1.0/xyc;
x *= xgk;
y *= xgk;
z *= xgk;
}
return [x,y,z];
}
p3.x5j=function()
{
var xkk=this.x1j;
this.x1j=[
xkk[0], xkk[4], xkk[8], xkk[12],
xkk[1], xkk[5], xkk[9], xkk[13],
xkk[2], xkk[6], xkk[10], xkk[14],
xkk[3], xkk[7], xkk[11], xkk[15]
];
return this;
}
var p4=xTk.prototype;
p4.xam="";
p4.xrm=false;
p4.xIm=14;
function xTk(value)
{
this.xNk=Math.floor(Math.pow(10,this.xIm-1)+0.1);
var xpm=typeof value;
if( (xpm =="undefined") || (value === null) )
{
}
else if(xpm =="number")
{
this.xGk(value);
}
else if(xpm =="string")
{
this.xRk(value);
}
else if(xpm =="object")
{
if(value instanceof xTk)
{
this.x3l(value);
}
else
{
var xyk="(unknown)";
if(value && value.constructor && value.constructor.toString)
{
xyk=value.constructor.toString();
}
throw new Error("Invalid type: "+xyk);
}
}
else
{
throw new Error("Invalid type: "+xpm);
}
}
p4.x3l=function(xGl)
{
this.xam=xGl.xam;
this.xrm=xGl.xrm;
}
p4.toString=function()
{
if(this.xrm)
{
return"-"+this.xam;
}
else
{
return this.xam;
}
}
p4.xEk=function()
{
return (this.xam =="");
}
p4.xUm=function(value, xgm)
{
this.xam=this.x5k(value);
if(this.xEk()) xgm=false;
this.xrm=xgm;
}
p4.xRk=function(value)
{
var xgm=false;
if(value.charAt(0) =="-")
{
xgm=true;
value=value.substr(1);
}
if(! value.match(/^[0-9]*$/))
{
throw new Error("Invalid value");
}
value=this.x5k(value);
if(value =="")
{
xgm=false;
}
this.xam=value;
this.xrm=xgm;
}
p4.xlm=function(xfm, xcn, length)
{
var xem=xfm.length-xcn;
if(xem <= 0)
{
return 0;
}
else
{
var xRl=xem-length;
if(xRl < 0) xRl=0;
var substr=xfm.substring(xRl,xem);
substr=substr.replace(/^0+/,"");
if(substr.length == 0) return 0;
return parseInt(substr);
}
}
p4.xtl=function(i, length)
{
var xud=""+i;
xud=this.xsk(length-xud.length)+xud;
return xud;
}
p4.xTl=function(xpl, xXl)
{
xpl=this.x5k(xpl);
xXl=this.x5k(xXl);
if(xpl.length > xXl.length) return 1;
if(xpl.length < xXl.length) return -1;
var xJl=xpl.length;
var xZl, xCl;
for(var i=0; i < xJl; i++)
{
xZl=xpl.charCodeAt(i);
xCl=xXl.charCodeAt(i);
if(xZl > xCl) return 1;
if(xZl < xCl) return -1;
}
return 0;
}
p4.xNm=function(s)
{
var xDk=s.length;
var x6k=0;
var xQl;
while(xDk > 0)
{
xQl=xDk-1;
if(s.charAt(xQl) !="0") break;
x6k++;
xDk--;
}
if(x6k > 0)
{
s=s.substr(0,xDk);
}
return [s,x6k];
}
p4.x5k=function(s)
{
var xHm=0;
while(xHm < s.length)
{
if(s.charAt(xHm) !="0") break;
xHm++;
}
if(xHm > 0)
{
return s.substr(xHm);
}
else
{
return s;
}
}
p4.x4m=function(xSl,xJl)
{
if(xSl.length < xJl)
{
xSl=this.xsk(xJl-xSl.length)+xSl;
}
return xSl;
}
p4.xsk=function(xhm)
{
var s="000000000000000000000000000000000000000000000000000000000";
var xud="";
while(xud.length < xhm)
{
xud += s.substr(0,xhm-xud.length);
}
return xud;
}
p4.xWl=function(xpl)
{
if(xpl < 0.0)
{
throw new Error("Negative");
}
if(xpl < 1.0)
{
return"";
}
var x1k=""+xpl;
if(/^[0-9]+$/.test(x1k))
{
return x1k;
}
else
{
var exp=Math.floor(Math.log(xpl)/Math.log(10))+1;
xpl *= Math.pow(10,-exp);
if(xpl >= 1.0)
{
exp += 1;
xpl *= 0.1;
}
else if(xpl < 0.1)
{
exp -= 1;
xpl *= 10;
}
var xCm=""+xpl;
if(xCm.substr(0,2) !="0.")
{
throw new Error("Internal error");
}
xCm=xCm.substr(2);
if(xCm.length < exp)
{
xCm += this.xsk(exp-xCm.length);
}
else
{
xCm=xCm.substr(0,exp);
}
return xCm;
}
}
p4.xVl=function(s)
{
s=this.x5k(s);
if(s =="")
{
return 0.0;
}
else
{
var xuk=17;
if(s.length > xuk)
{
return parseFloat(s.substr(0,xuk))*Math.pow(10,s.length-xuk);
}
else
{
return parseFloat(s);
}
}
}
p4.xSm=function()
{
var xpl=this.xam;
var xud="";
var xBk=this.xIm-1;
var xMm=this.xNk;
var xVk=Math.floor(1+(xpl.length-1)/xBk);
var xcn=(xVk-1)*xBk;
var xal;
var xDm=0;
for(var xhl=0; xhl < xVk; xhl++)
{
xal=this.xlm(xpl,xcn,xBk);
xal += xDm;
xDm=(xal & 1)? xMm : 0;
xal=Math.floor(0.5*xal);
xud += this.xtl(xal, xBk);
xcn -= xBk;
}
var xQk=new xTk();
if(xDm != 0)
{
xQk.xam="1";
xQk.xrm=this.xrm;
}
this.xam=this.x5k(xud);
return xQk;
}
p4.xDl=function(xqm, xEl)
{
var xOl=17;
var xdl=1e17;
var x9k=0;
var xpl=new xTk(xqm);
var xXl=new xTk(xEl);
if(xpl.xam.length > xOl)
{
x9k += xpl.xam.length-xOl;
xpl.xam=xpl.xam.substr(0,xOl);
}
if(xXl.xam.length > xOl)
{
x9k -= xXl.xam.length-xOl;
xXl.xam=xXl.xam.substr(0,xOl);
}
var xBl=xpl.xkm();
var xcm=xXl.xkm();
var xMk=xBl/xcm;
xMk *= xdl;
x9k -= xOl;
var xum=new xTk(xMk);
if(x9k > 0)
{
xum.xam += this.xsk(x9k);
}
else
{
var xJl=xum.xam.length;
if(xJl <= -x9k)
{
xum.xGk(0);
}
else
{
xum.xam=xum.xam.substr(0,xJl+x9k);
}
}
return xum;
}
p4.xwm=function(xtm)
{
if(xtm.xEk())
{
throw new Error("Divide by zero");
}
if( (xtm.xam =="2") && (xtm.xrm == false) )
{
return this.xSm();
}
var xum=new xTk();
var xQk=new xTk(this);
var xrk;
while(true)
{
if(xQk.xEk())
{
break;
}
xrk=this.xDl(xQk,xtm);
if(xrk.xEk())
{
if(this.xrm != xQk.xrm)
{
if(xQk.xrm == xtm.xrm)
{
xrk.xGk(1);
}
else
{
xrk.xGk(-1);
}
}
else
{
break;
}
}
xum=xum.x6l(xrk);
xQk=xQk.xim(xrk.xjm(xtm));
}
this.x3l(xum);
return xQk;
}
p4.xIk=function(xpl, xXl)
{
xpl=this.x5k(xpl);
xXl=this.x5k(xXl);
var xan=this.xTl(xpl,xXl);
if(xan == 0) return ["",false];
var xgm=false;
if(xan < 0)
{
var xpm=xXl;
xXl=xpl;
xpl=xpm;
xgm=true;
}
var xud="";
var xcg=this.xNm(xXl);
var xbm=xcg[1];
if(xbm > 0)
{
xXl=xcg[0];
var xWk=xpl.length-xbm;
xcg=this.xZk(xpl,xWk);
xud=xcg[1]+xud;
xpl=xcg[0];
}
var xBk=this.xIm-1;
var x1l=this.xNk;
var xAl=xpl.length;
var xFk=xXl.length;
var xcn=0;
var xDm=0;
var xrl, xbl, xsm;
while(xcn < xAl)
{
if( (xcn >= xFk) && (xDm == 0) )
{
xud=xpl.substr(0,xAl-xcn)+xud;
break;
}
xrl=this.xlm(xpl,xcn,xBk);
xbl=this.xlm(xXl,xcn,xBk);
xsm=xrl-xbl+xDm;
if(xsm >= 0)
{
xDm=0;
}
else
{
xDm=-1;
xsm += x1l;
}
xud=this.xtl(xsm, xBk)+xud;
xcn += xBk;
}
return [xud,xgm];
}
p4.x8m=function(s, xBk)
{
var xud=[];
var xHl=s.length;
var xLl;
var xbn;
while(true)
{
if(xHl <= 0) break;
xLl=xHl-xBk;
if(xLl < 0) xLl=0;
xbn=s.substring(xLl,xHl);
xbn=xbn.replace(/^0+/,"");
xud.push(parseInt(xbn));
xHl -= xBk;
}
return xud;
}
p4.xOm=function(xpl, xXl)
{
xpl=this.x5k(xpl);
xXl=this.x5k(xXl);
var x0l=0;
var xcg=this.xNm(xpl);
xpl=xcg[0];
x0l += xcg[1];
xcg=this.xNm(xXl);
xXl=xcg[0];
x0l += xcg[1];
var xud="";
var xBk=Math.floor((this.xIm-3)/2);
if(xBk < 1) xBk=1;
var xCk=Math.floor(1+(xpl.length-1)/xBk);
var xQm=Math.floor(1+(xXl.length-1)/xBk);
var x8k=xCk+xQm-1;
var xdm, xLm, x3m, xul, xKm, xwl, xvl;
var xDm=0;
var x0k;
var xPl=this.x8m(xpl,xBk);
var xZm=this.x8m(xXl,xBk);
for(x0k=0; x0k < x8k; x0k++)
{
xLm=x0k-xQm+1;
if(xLm < 0) xLm=0;
x3m=x0k+1;
if(x3m > xCk) x3m=xCk;
xKm=0;
xul=x0k-xLm;
for(xdm=xLm; xdm < x3m; xdm++)
{
var xnm=xPl[xdm];
var xzk=xZm[xul];
xKm += xnm*xzk;
xul--;
}
xKm += xDm;
xwl=this.xtl(xKm, xBk);
if(xwl.length > xBk)
{
xvl=xwl.length-xBk;
xDm=parseInt(xwl.substr(0, xvl));
xwl=xwl.substr(xvl);
}
else
{
xDm=0;
}
xud=xwl+xud;
}
if(xDm != 0)
{
xud=(""+xDm)+xud;
}
if(x0l != 0)
{
xud += this.xsk(x0l);
}
return xud;
}
p4.xZk=function(s, xWk)
{
var x1m, x8l;
if(xWk < 0)
{
x1m="";
x8l=this.xsk(-xWk)+s;
}
else if(xWk > s.length)
{
x1m=s+this.xsk(xWk-s.length);
x8l="";
}
else
{
x1m=s.substr(0,xWk);
x8l=s.substr(xWk);
}
return [x1m,x8l];
}
p4.xUl=function(xpl, xXl)
{
xpl=this.x5k(xpl);
xXl=this.x5k(xXl);
if(xpl.length < xXl.length)
{
var xNl=xpl;
xpl=xXl;
xXl=xNl;
}
var xud="";
var xcg=this.xNm(xpl);
var xbm=xcg[1];
var xWk;
if(xbm > 0)
{
xpl=xcg[0];
xWk=xXl.length-xbm;
xcg=this.xZk(xXl,xWk);
xud=xcg[1]+xud;
xXl=xcg[0];
}
xcg=this.xNm(xXl);
xbm=xcg[1];
if(xbm > 0)
{
xXl=xcg[0];
xWk=xpl.length-xbm;
xcg=this.xZk(xpl,xWk);
xud=xcg[1]+xud;
xpl=xcg[0];
}
var xBk=this.xIm;
var xAl=xpl.length;
var xFk=xXl.length;
var xcn=0;
var xDm=0;
var xrl, xbl, xwl, xvl;
while(xcn < xAl)
{
if( (xcn >= xFk) && (xDm == 0) )
{
xud=xpl.substr(0,xAl-xcn)+xud;
break;
}
xrl=this.xlm(xpl,xcn,xBk);
xbl=this.xlm(xXl,xcn,xBk);
xwl=this.xtl(xrl+xbl+xDm, xBk);
if(xwl.length > xBk)
{
xvl=xwl.length-xBk;
xDm=parseInt(xwl.substr(0, xvl));
xwl=xwl.substr(xvl);
}
else
{
xDm=0;
}
xud=xwl+xud;
xcn += xBk;
}
if(xDm != 0)
{
xud=(""+xDm)+xud;
}
return xud;
}
p4.xsl=function(xpl, xKl, xXl, xtk)
{
var xPm, xgm;
if(xKl == xtk)
{
xPm=this.xUl(xpl,xXl);
xgm=xKl;
}
else
{
var xud=this.xIk(xpl,xXl);
xPm=xud[0];
xgm=xKl;
if(xud[1])
{
xgm=!xgm;
}
}
return [xPm,xgm];
}
p4.x6l=function(xXl)
{
var xPm=this.xsl(this.xam, this.xrm, xXl.xam, xXl.xrm);
var xud=new xTk();
xud.xUm(xPm[0],xPm[1]);
return xud;
}
p4.xim=function(xXl)
{
var xPm=this.xsl(this.xam, this.xrm, xXl.xam, !xXl.xrm);
var xud=new xTk();
xud.xUm(xPm[0],xPm[1]);
return xud;
}
p4.xxm=function(xXl)
{
if(this.xrm && (!xXl.xrm)) return -1;
if(xXl.xrm && (!this.xrm)) return 1;
var xud=this.xTl(this.xam, xXl.xam);
if(this.xrm) xud=-xud;
return xud;
}
p4.xjm=function(xXl)
{
var xgm=this.xrm;
if(xXl.xrm) xgm=!xgm;
var xFl=this.xOm(this.xam, xXl.xam);
var xud=new xTk();
xud.xUm(xFl,xgm);
return xud;
}
p4.xel=function(xXl)
{
var xum=new xTk(this);
var xQk=xum.xwm(xXl);
return [xum,xQk];
}
p4.xkl=function(xXl)
{
var xud=this.xel(xXl);
return xud[0];
}
p4.x7l=function(xXl)
{
var xud=this.xel(xXl);
return xud[1];
}
p4.xqk=function(xXl)
{
return ((this.xam == xXl.xam) && (this.xrm == xXl.xrm));
}
p4.xGk=function(x7m)
{
this.xrm=(x7m < 0.0);
if(this.xrm)
{
x7m=-x7m;
}
this.xam=this.xWl(x7m);
}
p4.xkm=function()
{
var xud=this.xVl(this.xam);
if( (!this.xEk()) && (this.xrm) )
{
xud=-xud;
}
return xud;
}
p4.xil=function()
{
if(this.xrm)
{
throw new Error("Not supported");
}
var xhm=new xTk(this);
var xcg;
var xud=[];
var xtm=new xTk("4294967296");
while(true)
{
xcg=xhm.xel(xtm);
xhm=xcg[0];
var xml=xhm.xEk();
var x5l=xcg[1].xkm();
for(var i=0; i < 4; i++)
{
if(xml && (x5l == 0)) break;
xud.push(x5l & 0xff);
x5l >>= 8;
}
if(xml) break;
}
xud.reverse();
return xud;
}
p4.xPk=function(xYk)
{
var xXm=3-((xYk.length+3)&3);
var xcg=[];
while(xXm-- > 0)
{
xcg.push(0);
}
xcg=xcg.concat(xYk);
var xud=new xTk();
var xdl=new xTk("4294967296");
for(var xMl=0; xMl < xcg.length; xMl += 4)
{
xud=xud.xjm(xdl);
var x5l=(xcg[xMl]<<24) | (xcg[xMl+1]<<16) | (xcg[xMl+2]<<8) | (xcg[xMl+3]);
if(x5l < 0)
{
x5l += 0x100000000;
}
var x6l=new xTk(x5l);
xud=xud.x6l(x6l);
}
this.x3l(xud);
}
p4.xHk=function(x4l, x6m)
{
if(this.xrm || x4l.xrm || x6m.xrm)
{
throw new Error("Negative");
}
var x9m=new xTk(this);
var xym=new xTk("2");
var xTm=new xTk(x4l);
var xvk;
var xud=new xTk("1");
while(true)
{
xvk=xTm.xwm(xym);
if(!xvk.xEk())
{
xud=xud.xjm(x9m);
xud=xud.x7l(x6m);
}
if(xTm.xEk())
{
break;
}
x9m=x9m.xjm(x9m);
x9m=x9m.x7l(x6m);
}
return xud;
}
p4.xRm=function()
{
return this.xrm;
}
var p5=xBn.prototype;
p5.xin=null;
p5.xIn=null;
p5.xAn=null;
function xBn()
{
}
p5.xtn=function(xpn, xfn)
{
var xMn=new xTk("1");
var xEf=xpn.xjm(xfn);
var xFn=xpn.xim(xMn).xjm(xfn.xim(xMn));
var x4b=new xTk(17);
var xqn=this.xdn(x4b,xFn);
var xQn=xqn[2];
if(!xQn.xqk(xMn))
{
if(!xFn.x7l(xQn).xEk())
{
throw new Error("internal error");
}
throw new Error("not coprime");
}
var xK=xqn[0];
if(xK.xRm())
{
xK=xK.x6l(xFn);
}
if(xK.xRm())
{
throw new Error("negative");
}
if(xK.xxm(xFn) >= 0)
{
throw new Error("too large");
}
var xY=xK.xjm(x4b).x7l(xFn);
if(!xY.xqk(xMn))
{
throw new Error("failed2");
}
return [x4b,xK,xEf];
}
p5.xPn=function(xcn, xEf)
{
this.xIn=new xTk(xcn);
this.xin=new xTk(xEf);
}
p5.xon=function(xcn, xEf)
{
this.xAn=new xTk(xcn);
this.xin=new xTk(xEf);
}
p5.xkn=function()
{
return this.xIn;
}
p5.xOn=function()
{
return this.xAn;
}
p5.xzn=function()
{
return this.xin;
}
p5.xen=function()
{
if( (!this.xin) || (!this.xAn) )
{
throw new Error("Need private key");
}
}
p5.xRn=function()
{
if( (!this.xin) || (!this.xIn) )
{
throw new Error("Need public key");
}
}
p5.xSn=function(message)
{
this.xen();
if(message.xxm(this.xin) >= 0)
{
throw new Error("Message too large");
}
return message.xHk(this.xAn,this.xin);
}
p5.xyn=function(message)
{
this.xRn();
if(message.xxm(this.xin) >= 0)
{
throw new Error("Message too large");
}
return message.xHk(this.xIn,this.xin);
}
p5.xdn=function(xsn, xDn)
{
var xWj=new xTk(xsn);
var xxl=new xTk(xDn);
var x=new xTk();
var y=new xTk("1");
var xLn=new xTk("1");
var xmn=new xTk();
while(!xxl.xEk())
{
var xnn=xWj.xel(xxl);
var xum=xnn[0];
xWj.x3l(xxl);
xxl=xnn[1];
var xCn=xLn.xim(xum.xjm(x));
var xxn=xmn.xim(xum.xjm(y));
xLn=x;
xmn=y;
x=xCn;
y=xxn;
}
var xY=xLn.xjm(xsn).x6l(xmn.xjm(xDn));
if(!xY.xqk(xWj))
{
throw new Error("Failed3");
}
if(!xsn.x7l(xWj).xEk())
{
throw new Error("Failed4");
}
if(!xDn.x7l(xWj).xEk())
{
throw new Error("Failed5");
}
return [xLn, xmn, xWj];
}
var p6=xqo.prototype;
function xqo()
{
}
p6.x9n=function(xmo)
{
this.xho();
var xbo=xmo.length;
var xMl=0;
var xoo=xbo;
while(true)
{
if(xoo >= 64)
{
this.xFo(xmo.slice(xMl,xMl+64));
xoo -= 64;
xMl += 64;
}
else
{
this.x1n(xmo.slice(xMl,xMl+xoo),xbo);
break;
}
}
return this.xfo(this.x5n);
}
p6.xVn=function(s)
{
var xno=this.xro(s);
this.x9n(xno);
}
p6.xlo=function()
{
return this.xfo(this.x5n);
}
p6.xEo=function()
{
var xno=this.xfo(this.x5n);
return this.xyo(xno);
}
p6.xyo=function(xWj)
{
var xud="";
for(var i=0; i < xWj.length; i++)
{
var xxl=xWj[i];
for(var x0k=0; x0k < 2; x0k++)
{
var xwo=(xxl >> 4)&0x0f;
if(xwo < 10)
{
xud += String.fromCharCode(48+xwo);
}
else
{
xud += String.fromCharCode(87+xwo);
}
xxl <<= 4;
}
}
return xud;
}
//////////// private: ///////////////
p6.xho=function()
{
this.x5n=[0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0];
}
p6.xDo=function(xXn)
{
if(xXn.length != 16)
{
throw new Error("Should be 16");
}
var xyc=[];
var i;
for(i=0; i < 16; i++)
{
xyc[i]=xXn[i];
}
for(i=16; i < 80; i++)
{
xyc[i] = this.xzo(xyc[i-3] ^ xyc[i-8] ^ xyc[i-14] ^ xyc[i-16], 1);
}
var x2n=this.x5n.slice(0);
var x7m, xWn, x7n;
for(i=0; i < 80; i++)
{
if(i < 20)
{
x7m = (x2n[1] & x2n[2]) | ((x2n[1]^0xffffffff) & x2n[3]);
xWn = 0x5A827999;
}
else if(i < 40)
{
x7m = x2n[1] ^ x2n[2] ^ x2n[3];
xWn = 0x6ED9EBA1;
}
else if(i < 60)
{
x7m = (x2n[1] & x2n[2]) | (x2n[1] & x2n[3]) | (x2n[2] & x2n[3]);
xWn = 0x8F1BBCDC;
}
else
{
x7m = x2n[1] ^ x2n[2] ^ x2n[3];
xWn = 0xCA62C1D6;
}
x7n = (this.xzo(x2n[0], 5)+x7m+x2n[4]+xWn+xyc[i]) & 0xffffffff;
x2n[4] = x2n[3];
x2n[3] = x2n[2];
x2n[2] = this.xzo(x2n[1], 30);
x2n[1] = x2n[0];
x2n[0] = x7n;
}
for(i=0; i < 5; i++)
{
x7n=this.x5n[i]+x2n[i];
x7n &= 0xffffffff;
this.x5n[i]=x7n;
}
}
p6.xFo=function(xmo)
{
if(xmo.length != 64)
{
throw new Error("Should be 64");
}
var xAo=this.xto(xmo);
this.xDo(xAo);
}
p6.x1n=function(xmo, xso)
{
var x0n=xso & 63;
var xeo=xmo.slice(0,x0n);
xeo.push(128);
if(xeo.length < 56)
{
while(xeo.length < 56)
{
xeo.push(0);
}
}
else
{
while(xeo.length < 120)
{
xeo.push(0);
}
}
xso *= 8;
var xvo=this.xfo([Math.floor(xso/0x100000000), xso&0xffffffff]);
xeo=xeo.concat(xvo);
if(xeo.length == 64)
{
this.xFo(xeo);
}
else
{
this.xFo(xeo.slice(0,64));
this.xFo(xeo.slice(64,128));
}
}
p6.xzo=function(xxl, xuo)
{
xxl &= 0xffffffff;
var xud=this.x6n(xxl, xuo);
var xY=this.x6n(xud, -xuo);
if(xxl != xY)
{
throw new Error("Failed");
}
return xud;
}
p6.x6n=function(xxl, xuo)
{
xuo &= 31;
if(xuo == 0) return xxl;
var xud=(xxl << xuo)&0xffffffff;
var xjo=32-xuo;
var xCo=0x7fffffff >> (xjo-1);
var xpo=(xxl >> xjo)&xCo;
xud |= xpo;
return xud;
}
p6.xto=function(xmo)
{
if(xmo.length & 3)
{
throw new Error("Should be multiple of 4");
}
var xAo=[];
var xGl=0;
var i=0;
while(i < xmo.length)
{
xGl <<= 8;
xGl |= (xmo[i] & 0xff);
i++;
if( (i & 3) == 0)
{
xAo.push(xGl);
xGl=0;
}
}
return xAo;
}
p6.xfo=function(xXn)
{
var xno=[];
var xyc, i, xYn;
for(i=0; i < xXn.length; i++)
{
xyc=xXn[i];
xno.push((xyc >> 24)&0xff);
xno.push((xyc >> 16)&0xff);
xno.push((xyc >> 8)&0xff);
xno.push((xyc)&0xff);
}
return xno;
}
p6.xro=function(s)
{
var xud=[];
for(var i=0; i < s.length; i++)
{
xud=xud.concat(this.xxo(s.charCodeAt(i)));
}
return xud;
}
p6.xxo=function(x8j)
{
var xud;
if(x8j <= 0x7f)
{
xud=[x8j];
}
else if(x8j <= 0x07ff)
{
xud=[0xc0|((x8j>>6)&0x1f), 0x80|(x8j&0x3f)];
}
else if(x8j <= 0xffff)
{
xud=[0xc0|((x8j>>12)&0x0f), 0x80|((x8j>>6)&0x3f), 0x80|(x8j&0x3f)];
}
else if(x8j <= 0x1fffff)
{
xud=[0xc0|((x8j>>18)&0x07), 0x80|((x8j>>12)&0x3f), 0x80|((x8j>>6)&0x3f), 0x80|(x8j&0x3f)];
}
else if(x8j <= 0x3ffffff)
{
xud=[0xc0|((x8j>>24)&0x03), 0x80|((x8j>>18)&0x3f), 0x80|((x8j>>12)&0x3f), 0x80|((x8j>>6)&0x3f), 0x80|(x8j&0x3f)];
}
else
{
xud=[0xc0|((x8j>>30)&0x01), 0x80|((x8j>>24)&0x3f), 0x80|((x8j>>18)&0x3f), 0x80|((x8j>>12)&0x3f), 0x80|((x8j>>6)&0x3f), 0x80|(x8j&0x3f)];
}
return xud;
}
var p7=x2o.prototype;
function x2o()
{
this.xJo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
}
p7.xYo=function(xno)
{
var xud="";
var xbo=xno.length;
var xIc=0;
var xHl;
while(xIc < xbo)
{
xHl=xIc+3;
if(xHl > xbo) xHl=xbo;
xud += this.xNo(xno.slice(xIc,xHl));
xIc=xHl;
}
return xud;
}
p7.xZo=function(xSl)
{
var xud=[];
if( (xSl.length % 4) != 0)
{
this.xKo();
}
var xIc=0;
var x0o;
while(xIc < xSl.length)
{
x0o=this.x3o(xSl.substr(xIc,4));
xud=xud.concat(x0o);
xIc += 4;
}
return xud;
}
p7.xNo=function(xno)
{
var xud="";
var xwo=xno[0] >> 2;
xud += this.xJo.substr(xwo,1);
var xxl;
if(xno.length < 2)
{
xxl=0;
}
else
{
xxl=xno[1];
}
xwo=((xno[0] & 0x03) << 4) | (xxl >> 4);
xud += this.xJo.substr(xwo,1);
if(xno.length < 2)
{
xud +="==";
}
else
{
if(xno.length < 3)
{
xxl=0;
}
else
{
xxl=xno[2];
}
xwo=((xno[1] & 0x0f) << 2) | (xxl >> 6);
xud += this.xJo.substr(xwo,1);
if(xno.length < 3)
{
xud +="=";
}
else
{
xwo=xxl & 0x3f;
xud += this.xJo.substr(xwo,1);
}
}
return xud;
}
p7.x3o=function(xSl)
{
if(xSl.length != 4)
{
this.xKo();
}
var xud=[];
var xXo=this.x4o(xSl.charCodeAt(0));
var x1o=this.x4o(xSl.charCodeAt(1));
xud[0]=(xXo << 2) | (x1o >> 4);
var i=xSl.charCodeAt(2);
if(i != 61)
{
xXo=x1o;
x1o=this.x4o(i);
xud[1]=((xXo & 0x0f) << 4) | (x1o >> 2);
i=xSl.charCodeAt(3);
if(i != 61)
{
xXo=x1o;
x1o=this.x4o(i);
xud[2]=((xXo & 0x03) << 6) | x1o;
}
}
return xud;
}
p7.x4o=function(xWo)
{
if( (xWo >= 65) && (xWo <= 90))
{
return xWo-65;
}
else if( (xWo >= 97) && (xWo <= 122))
{
return xWo-71;
}
else if( (xWo >= 48) && (xWo <= 57))
{
return xWo+4;
}
else if(xWo == 43)
{
return 62;
}
else if(xWo == 47)
{
return 63;
}
this.xKo();
return 0;
}
p7.xKo=function()
{
throw new Error("Faulty Base64 data");
}
var p8=xtp.prototype;
function xtp()
{
this.xvp=new xBn();
this.x6o=new xqo();
this.xap=new x2o();
}
p8.x8o=function(message, xkp)
{
this.xvp.xen();
if(xkp)
{
this.xvp.xRn();
}
this.x6o.xVn(message);
var xko=this.x6o.xlo();
var xEf=this.xvp.xzn();
var xhp=xEf.xil();
var xgp=xhp.length-1;
if(xko.length > xgp)
{
throw new Error("Key too short");
}
var xqp="";
while(xko.length < xgp)
{
var x7b=Math.floor(Math.random()*255);
xko[xko.length]=x7b;
xqp += x7b+",";
}
var xjp=new xTk();
xjp.xPk(xko);
var xln=this.xvp.xSn(xjp);
if(xkp)
{
var xip=this.xvp.xyn(xln);
if(! xip.xqk(xjp))
{
throw new Error("Internal error");
}
}
var xfp=xln.xil();
var xlp=this.xap.xYo(xfp);
return xlp;
}
p8.xkp=function(message, xUf)
{
this.xvp.xRn();
var xcp=this.xap.xZo(xUf);
var xrp=new xTk();
xrp.xPk(xcp);
var xip=this.xvp.xyn(xrp);
var xpp=xip.xil();
this.x6o.xVn(message);
var xko=this.x6o.xlo();
if(xpp.length < xko.length) return false;
for(var i=0; i < xko.length; i++)
{
if(xpp[i] != xko[i]) return false;
}
return true;
}
p8.xPn=function(xcn, xEf)
{
this.xvp.xPn(xcn, xEf);
}
p8.xon=function(xcn, xEf)
{
this.xvp.xon(xcn, xEf);
}