if(!ndpov){var ndpov={}}ndpov.WISVIEWER_VERSION="1.0.2.5";ndpov.WSIViewer=function(J,B,F){if(!J){return }if(!B){J.innerHTML="Invalid itemID.";return }this.element=J;this.itemID=B;this.width=this.element.offsetWidth;this.height=this.element.offsetHeight;this.element.innerHTML="";if(this.element.style.position.toLowerCase()!="absolute"&&this.element.style.position.toLowerCase()!="relative"){this.element.style.position="relative"}this.element.style.width=this.width+"px";this.element.style.height=this.height+"px";ndpov.PreLoader(["divider.png","toolbar.png"]);var I=this;var P="position:absolute; top:0px; z-index:10; background-color:white; border:0px solid black;";var E=0;this.element.style.textAlign="left";var O=function(U,Y,Z,W,a,X,T,S,R){var V=new sjsl.Button(J,ndpov.IMAGE_BASE+"toolbar.png",U,Y,Z,W,a,X,T,S,R);V.getElement().style.position="absolute";V.getElement().style.zIndex="10";V.getElement().style.top="0px";V.getElement().style.left=E+"px";return V};var Q=O(38,42,0,0,0,-42,0,-84,"Go back");Q.onclick=sjsl.bind(this,function(){if(this.viewer){this.viewer.back()}});E+=38;var M=O(38,42,-38,0,-38,-42,-38,-84,"Go forward");M.onclick=sjsl.bind(this,function(){if(this.viewer){this.viewer.forward()}});E+=38;var H=document.createElement("img");H.style.cssText=P+"left:"+E+"px";H.src=ndpov.IMAGE_BASE+"divider.png";this.element.appendChild(H);E+=4;var D=O(38,42,-76,0,-76,-42,-76,-84,"Return to overview map");D.onclick=sjsl.bind(this,function(){if(this.viewer){this.viewer.setPosLensMap()}});E+=38;var G=O(100,42,0,-126,0,-168,0,-210,"Change lens");G.onclick=sjsl.bind(this,function(){if(!this.viewer||!this.viewer.isValid()){return }var R=new sjsl.Selecter(this.element,this.viewer.LENS_MENU,parseInt(G.getElement().style.left),parseInt(G.getElement().style.top)+G.getElement().offsetHeight);R.onselected=sjsl.bind(this.viewer,this.viewer.onLensMenuSelected)});G.onchange=function(R,U,T,S){if(S<10){S=Math.round(S*100)/100}else{S=Math.round(S*10)/10}this.setHTML("<div style='font-size:16px;font-family:Tahoma,sans-serif;text-align:center;font-weight:bold;padding:0px 0px 0px 20px;'>"+S+"x</div>")};G.onchange(0,0,0,1);E+=100;var N=O(100,42,0,0,0,0,0,0,"Change focul plane");N.onchange=function(R,U,T,S){if(T<0){this.setPos(-200,-126,-200,-168,-200,-210)}else{if(T>0){this.setPos(-300,-126,-300,-168,-300,-210)}else{this.setPos(-100,-126,-100,-168,-100,-210)}}this.setHTML("<div style='font-size:16px;font-family:Tahoma,sans-serif;text-align:center;font-weight:bold;white-space:nowrap;padding:0px 0px 0px 20px;'>"+(T/1000)+"<span style='font-size:10px;'> μm</span></div>")};N.onchange(0,0,0);E+=100;var H=document.createElement("img");H.style.cssText=P+"left:"+E+"px";H.src=ndpov.IMAGE_BASE+"divider.png";this.element.appendChild(H);E+=4;var C=O(46,42,-114,0,-114,-42,-114,-84,"Annotate image");C.onclick=function(){if(!I.viewer||!I.viewer.isValid()){return }var R=new sjsl.Selecter(I.element,I.viewer.ANNOTATION_MENU,parseInt(C.getElement().style.left),parseInt(C.getElement().style.top)+C.getElement().offsetHeight);R.onselected=sjsl.bind(I.viewer,I.viewer.onAnnotationMenuSelected)};E+=46;var H=document.createElement("img");H.style.cssText=P+"left:"+E+"px";H.src=ndpov.IMAGE_BASE+"divider.png";this.element.appendChild(H);E+=4;this.exportButton=O(38,42,-160,0,-160,-42,-160,-84,"Export the current image to file");this.exportButton.onclick=sjsl.bind(this,function(){if(this.viewer){this.viewer.exportImage()}});E+=38;var H=document.createElement("img");H.style.cssText=P+"left:"+E+"px";H.src=ndpov.IMAGE_BASE+"divider.png";this.element.appendChild(H);E+=4;modeButton=O(46,42,0,0,0,0,0,0,"Change display mode");modeButton.onclick=function(){if(!I.viewer||!I.viewer.isValid()){return }var R=new sjsl.Selecter(I.element,I.viewer.DISPLAY_MODE_MENU,parseInt(this.getElement().style.left),parseInt(this.getElement().style.top)+this.getElement().offsetHeight);R.onselected=sjsl.bind(I.viewer,I.viewer.onDisplayModeMenuSelected)};modeButton.onchange=function(R){switch(R){case ndpov.VIEW_MODE[1]:this.setPos(-244,0,-244,-42,-244,-84);break;case ndpov.VIEW_MODE[2]:this.setPos(-290,0,-290,-42,-290,-84);break;default:this.setPos(-198,0,-198,-42,-198,-84);break}};modeButton.onchange(ndpov.VIEW_MODE[0]);E+=46;var L=O(38,42,-336,0,-336,-42,-336,-84,"Show/hide settings window");L.onclick=sjsl.bind(this,function(){if(this.viewer){this.viewer.showSettingsDialog()}});E+=38;var H=document.createElement("img");H.style.cssText=P+"left:"+E+"px";H.src=ndpov.IMAGE_BASE+"divider.png";this.element.appendChild(H);E+=4;this.statusButton=O(38,42,-374,0,-374,-42,-374,-84,"Show/hide status screen");this.statusButton.onclick=function(){I.viewer.showStatus()};E+=38;this.helpButton=O(38,42,-412,0,-412,-42,-412,-84,"Show/hide help screen");this.helpButton.onclick=function(){I.viewer.showHelp()};E+=38;var K=document.createElement("div");K.id=this.element.id+"_ndpov";K.style.position="absolute";K.style.left="0px";K.style.top="44px";K.style.width=this.width+"px";K.style.height=(this.height-44)+"px";this.element.appendChild(K);if(!F){var A=location.pathname.substring(0,location.pathname.lastIndexOf("/")+1);F=location.protocol+"//"+location.host+A+"NDPServe.dll"}this.viewer=new ndpov.NDPov(K,F,B,function(){sjsl.eventObserver(this);var T=document.createElement("div");T.style.zIndex=10;T.style.position="absolute";T.style.left=(K.offsetWidth*3/4-10)+"px";T.style.top=(K.offsetHeight*3/4-10)+"px";T.style.width=(K.offsetWidth/4)+"px";T.style.height=(K.offsetHeight/4)+"px";K.appendChild(T);I.mapWnd=new ndpov.MapWnd(T,B,this);var R=document.createElement("div");R.style.zIndex=10;R.style.position="absolute";R.style.left="0px";R.style.top=(K.offsetHeight-40)+"px";K.appendChild(R);I.scaleBar=new ndpov.ScaleBarWnd(R,this,0);var S=sjsl.getCookie("wsiviewer")||"";if(S.match(/mapWnd=([01])/)&&RegExp.$1==0){T.style.visibility="hidden"}if(S.match(/scaleBar=([012])/)){if(RegExp.$1==1){I.scaleBar.type=0;I.scaleBar.resize()}else{if(RegExp.$1==2){I.scaleBar.type=1;I.scaleBar.resize()}else{R.style.visibility="hidden"}}}this.addEventObserver("change",sjsl.bind(G,G.onchange));this.addEventObserver("change",sjsl.bind(N,N.onchange));this.addEventObserver("changeviewmode",sjsl.bind(modeButton,modeButton.onchange));if(this.zstep!=0&&this.zmin!=this.zmax){N.onclick=function(){var U={icon:{image:ndpov.IMAGE_BASE+"ndpov.png",width:32,height:32},data:[]};for(var X=I.viewer.zmin,V=0;X<=I.viewer.zmax;X+=I.viewer.zstep,++V){if(X<0){U.data[V]={normalX:-288,normalY:-192,focusedX:-288,focusedY:-224,label:(X/1000)+" μm"}}else{if(X>0){U.data[V]={normalX:0,normalY:-256,focusedX:0,focusedY:-288,label:(X/1000)+" μm"}}else{U.data[V]={normalX:-256,normalY:-192,focusedX:-256,focusedY:-224,label:(X/1000)+" μm"}}}}var W=new sjsl.Selecter(I.element,U,parseInt(N.getElement().style.left),parseInt(N.getElement().style.top)+N.getElement().offsetHeight);W.onselected=function(Y){I.viewer.setPosition(I.viewer.getPosX(),I.viewer.getPosY(),I.viewer.zmin+Y*I.viewer.zstep)}}}sjsl.eventObserver(document);document.addEventObserver("keydown",sjsl.bind(I,I.onkeydown));this.setPosLensMap();this.setViewMode(this.viewMode)})};ndpov.WSIViewer.prototype={resize:function(){this.width=this.element.offsetWidth;this.height=this.element.offsetHeight;if(this.viewer){this.viewer.element.style.width=this.width+"px";this.viewer.element.style.height=(this.height-44)+"px";this.viewer.resize()}if(this.mapWnd){this.mapWnd.element.style.left=(this.viewer.element.offsetWidth*3/4-10)+"px";this.mapWnd.element.style.top=(this.viewer.element.offsetHeight*3/4-10)+"px";this.mapWnd.element.style.width=(this.viewer.element.offsetWidth/4)+"px";this.mapWnd.element.style.height=(this.viewer.element.offsetHeight/4)+"px";this.mapWnd.resize()}if(this.scaleBar){this.scaleBar.element.style.top=(this.viewer.element.offsetHeight-40)+"px";this.scaleBar.resize()}},onkeydown:function(B){if(!this.viewer.isValid()||this.viewer.queryModal){return }switch(sjsl.getKeyCode(B)){case 66:if(this.scaleBar.element.style.visibility=="hidden"){this.scaleBar.element.style.visibility="visible";this.scaleBar.type=0;this.scaleBar.resize()}else{if(this.scaleBar.type==0){this.scaleBar.type=1;this.scaleBar.resize()}else{this.scaleBar.element.style.visibility="hidden"}}break;case 67:case 69:this.exportButton.onclick();break;case 83:this.statusButton.onclick();break;case 77:if(this.mapWnd.element.style.visibility=="hidden"){this.mapWnd.element.style.visibility="visible"}else{this.mapWnd.element.style.visibility="hidden"}break;case 72:this.helpButton.onclick();break}var A=sjsl.getCookie("wsiviewer")||"mapWnd=1,scaleBar=1";A=A.replace(/mapWnd=[01]/,"mapWnd="+((this.mapWnd.element.style.visibility=="hidden")?0:1));A=A.replace(/scaleBar=[012]/,"scaleBar="+((this.scaleBar.element.style.visibility=="hidden")?0:(1+this.scaleBar.type)));sjsl.setCookie("wsiviewer",A)}};ndpov.MapWnd=function(B,C,D){this.element=B;this.itemID=C;this.viewer=D;this.baseWidth=this.element.offsetWidth;this.baseHeight=this.element.offsetHeight;this.element.style.backgroundColor="gray";this.element.style.overflow="hidden";sjsl.eventObserver(this.element);this.element.addEventObserver("click",sjsl.bind(this,this.onclick));var A=this;this.element.addEventObserver("mousemove",function(E){if(!A.rubberBand){sjsl.cancelBubble(E);return false}});this.element.addEventObserver("contextmenu",function(E){sjsl.cancelBubble(E);return false});this.element.addEventObserver("mousedown",sjsl.bind(this,this.onmousedown));this.element.addEventObserver("mouseup",sjsl.bind(this,this.onmouseup));this.img=document.createElement("img");this.img.style.position="absolute";this.img.style.left="1px";this.img.style.top="1px";this.element.appendChild(this.img);this.frameW=document.createElement("div");this.frameW.style.border="1px solid gray";this.frameW.style.position="absolute";this.frameW.style.fontSize="0px";this.element.appendChild(this.frameW);this.frame=document.createElement("div");this.frame.style.border="1px solid black";this.frame.style.position="absolute";this.frame.style.fontSize="0px";this.element.appendChild(this.frame);this.viewer.addEventObserver("change",sjsl.bind(this,this.onchange));this.viewer.addEventObserver("refresh",sjsl.bind(this,this.onrefresh));this.rotation=-1;this.resize()};ndpov.MapWnd.prototype={onrefresh:function(){var B=this.viewer.getPhysicalPos();var A=this.viewer.getPixelSize();this.img.count=0;this.img.onerror=function(D){if(++this.count<10){var C=this;this.timerID=setTimeout(function(){C.src=C.src},1000)}};clearTimeout(this.img.timerID);this.img.src=this.viewer.getImageURI(B.x,B.y,0,this.width*this.viewer.sourcelens/A.width,this.width,this.height)},resize:function(){this.width=this.baseWidth-2;this.height=this.baseHeight-2;var A=this.viewer.getPixelSize();if(this.width/A.width<this.height/A.height){this.height=Math.floor(this.width*A.height/A.width)}else{this.width=Math.floor(this.height*A.width/A.height)}this.onrefresh();this.element.style.left=(this.viewer.element.offsetWidth-this.width-10)+"px";this.element.style.top=(this.viewer.element.offsetHeight-this.height-10)+"px";this.element.style.width=(this.width+2)+"px";this.element.style.height=(this.height+2)+"px";this.recalcFrame()},recalcFrame:function(){var C=this.viewer.getPhysicalPos();var E=this.viewer.getPhysicalSize();var B=this.viewer.getPixelSize();var A=this.width*(this.viewer.element.offsetWidth*this.viewer.sourcelens/this.viewer.currentLens)/B.width;var D=this.height*(this.viewer.element.offsetHeight*this.viewer.sourcelens/this.viewer.currentLens)/B.height;var G=(this.viewer.getPosX()-C.x)*this.width/E.width+this.width/2-A/2;var F=(this.viewer.getPosY()-C.y)*this.height/E.height+this.height/2-D/2;this.frame.style.left=Math.floor(G+1-1)+"px";this.frame.style.top=Math.floor(F+1-1)+"px";this.frame.style.width=Math.floor(A+2)+"px";this.frame.style.height=Math.floor(D+2)+"px";this.frameW.style.left=Math.floor(G+1-1+1)+"px";this.frameW.style.top=Math.floor(F+1-1+1)+"px";this.frameW.style.width=Math.floor(A+2)+"px";this.frameW.style.height=Math.floor(D+2)+"px"},onchange:function(A,D,C,B){if(this.rotation!=this.viewer.rotation){this.rotation=this.viewer.rotation;this.resize()}else{this.recalcFrame()}},onclick:function(E){var D=sjsl.getSrcElement(E);var A=sjsl.getMouseXonSrcElement(E);var F=sjsl.getMouseYonSrcElement(E);while(D!=this.element){if(!D){return }A+=parseInt(D.style.left);F+=parseInt(D.style.top);D=D.parentNode}var B=this.viewer.getPhysicalPos();var C=this.viewer.getPhysicalSize();A=(A-1-this.width/2)*C.width/this.width+B.x;F=(F-1-this.height/2)*C.height/this.height+B.y;this.viewer.setPosition(A,F,this.viewer.getPosZ())},onmousedown:function(C){if(sjsl.getMouseButton(C)==2){var B=sjsl.getSrcElement(C);var D=sjsl.getMouseXonSrcElement(C);var A=sjsl.getMouseYonSrcElement(C);while(B!=this.element){if(!B){return }D+=parseInt(B.style.left);A+=parseInt(B.style.top);B=B.parentNode}this.rubberBand=new sjsl.RectTracker(sjsl.getMouseX(C),sjsl.getMouseY(C));this.rubberBand.onfinished=sjsl.bind(this,function(F,E,P,N){var K=Math.min(F,P)-(F-D);var J=Math.min(E,N)-(E-A);var L=Math.abs(P-F);var G=Math.abs(N-E);var I=this.viewer.getPhysicalPos();var Q=this.viewer.getPhysicalSize();K=(K-this.width/2+L/2)*Q.width/this.width+I.x;J=(J-this.height/2+G/2)*Q.height/this.height+I.y;var H=this.viewer.getPixelSize();var O=this.viewer.sourcelens*this.viewer.element.offsetWidth/(H.width*L/this.width);var M=this.viewer.sourcelens*this.viewer.element.offsetHeight/(H.height*G/this.height);this.viewer.setPosLens(K,J,this.viewer.getPosZ(),O<M?O:M)})}sjsl.cancelBubble(C);return false},onmouseup:function(A){if(this.rubberBand){this.rubberBand=null}}};ndpov.ScaleBarWnd=function(A,C,B){this.element=A;this.viewer=C;this.viewer.addEventObserver("change",sjsl.bind(this,this.onchange));this.type=B;this.resize()};ndpov.ScaleBarWnd.prototype={resize:function(){var H,C;if(this.type==0){H="#FFFFFF";C="#000000"}else{H="#000000";C="#FFFFFF"}var K=this.viewer.pixelToNanoX(this.viewer.element.offsetWidth/2,this.viewer.currentLens);var M=1;while(K>=10){K/=10;M*=10}K=parseInt(K);if(K==7){K=6}var G=([0,4,4,3,4,5,3,0,4,3])[K];var A;var J;if(M>=1000000){J="mm";A=M/1000000}else{if(M>=1000){J="μm";A=M/1000}else{uint="nm";A=M}}var D=this.viewer.nanoToPixelX(K*M,this.viewer.currentLens);this.element.innerHTML="";var L=document.createElement("div");L.style.position="absolute";L.style.left="9px";L.style.top="1px";L.style.width=D+"px";L.style.height="3px";L.style.fontSize="0px";L.style.backgroundColor=C;L.style.zIndex=0;this.element.appendChild(L);for(var B=0;B<G+1;++B){var L=document.createElement("div");L.style.position="absolute";L.style.left=(9+D/G*B)+"px";L.style.top="1px";L.style.width="3px";L.style.height="12px";L.style.fontSize="0px";L.style.backgroundColor=C;L.style.zIndex=0;this.element.appendChild(L);var I=document.createElement("div");I.style.position="absolute";I.style.left=(11+D/G*B-30)+"px";I.style.top="13px";I.style.width="60px";I.style.height="20px";I.style.fontSize="20px";I.style.color=C;I.style.zIndex=1;I.style.textAlign="center";I.appendChild(document.createTextNode(K*A/G*B));this.element.appendChild(I)}var I=document.createElement("div");I.style.position="absolute";I.style.left=(11+D+5)+"px";I.style.top="13px";I.style.width="60px";I.style.height="20px";I.style.fontSize="20px";I.style.color=C;I.style.zIndex=1;I.style.textAlign="center";I.appendChild(document.createTextNode(J));this.element.appendChild(I);var E=document.createElement("div");E.style.position="absolute";E.style.left="8px";E.style.top="0px";E.style.width=D+"px";E.style.height="3px";E.style.fontSize="0px";E.style.backgroundColor=H;E.style.zIndex=1;this.element.appendChild(E);for(var B=0;B<G+1;++B){var E=document.createElement("div");E.style.position="absolute";E.style.left=(8+D/G*B)+"px";E.style.top="0px";E.style.width="3px";E.style.height="12px";E.style.fontSize="0px";E.style.backgroundColor=H;E.style.zIndex=1;this.element.appendChild(E);var F=document.createElement("div");F.style.position="absolute";F.style.left=(10+D/G*B-30)+"px";F.style.top="12px";F.style.width="60px";F.style.height="20px";F.style.fontSize="20px";F.style.color=H;F.style.zIndex=1;F.style.textAlign="center";F.appendChild(document.createTextNode(K*A/G*B));this.element.appendChild(F)}var F=document.createElement("div");F.style.position="absolute";F.style.left=(10+D+5)+"px";F.style.top="12px";F.style.width="60px";F.style.height="20px";F.style.fontSize="20px";F.style.color=H;F.style.zIndex=1;F.style.textAlign="center";F.appendChild(document.createTextNode(J));this.element.appendChild(F)},onchange:function(A,D,C,B){this.resize()}};
