// 3D Building Designer created by ON THE Z (www.onthez.com) // Visit onthez.com to find out about creating your own 3D interactive web app, designer, or configurator. var e,o,t,r,i,a,n,l,s,c,d,p,h,g,m,u,b,w,y,f,x,v,T,E,R,B,k,O,H,F,S=!1,j=8;let D=window.location.href,N=new URL(D);var M=N.pathname.replace(/\/$/,""),C=N.searchParams.get("id"),W=N.searchParams.get("dt");function P(){(l=new THREE.WebGLRenderer({antialias:!0,alpha:!0,preserveDrawingBuffer:!0})).shadowMap.enabled=!0,l.setPixelRatio(window.devicePixelRatio),(e=l.domElement).setAttribute("id","viewport3D"),document.body.appendChild(e),(n=new THREE.Scene).background=new THREE.Color(10526880),(b=new THREE.Group).name="cameraLightsSetNull",n.add(b),(x=new THREE.Group).name="firstAlarmNull",x.visible=!1,n.add(x),(v=new THREE.Group).name="secondAlarmStandardNull",v.visible=!1,n.add(v),(T=new THREE.Group).name="secondAlarmExtendedNull",T.visible=!1,n.add(T),(E=new THREE.Group).name="thirdAlarmNull",E.visible=!1,n.add(E),(R=new THREE.Group).name="fifthAlarmNull",R.visible=!1,n.add(R),(B=new THREE.Group).name="generalAlarmNull",B.visible=!1,n.add(B),(k=new THREE.Group).name="accessoriesNull",k.visible=!1,n.add(k),(a=new THREE.PerspectiveCamera(45,e.innerWidth/e.innerHeight,.01,500)).name="camera",a.position.set(18,12,0),a.layers.enable(1),b.add(a),b.add(new THREE.AmbientLight(11184810,.2)),(s=new THREE.DirectionalLight(16777215,.75)).position.set(100,250,50),s.shadow.camera.top=15,s.shadow.camera.bottom=-15,s.shadow.camera.left=-15,s.shadow.camera.right=15,b.add(s),(s=new THREE.DirectionalLight(16777215,.5)).position.set(-100,200,-100),b.add(s),(s=new THREE.DirectionalLight(16777215,.5)).position.set(100,-200,100),b.add(s),(s=new THREE.DirectionalLight(16777215,.5)).position.set(-100,-100,100),b.add(s),(u=new THREE.LoadingManager).onStart=function(e,o,t){console.log("Started loading file: "+e+".\nLoaded "+o+" of "+t+" files.")},u.onProgress=function(e,o,t){},u.onLoad=function(){console.log("Loading complete!"),A(),z(),$("#overlay").fadeOut("slow"),$("#loading").fadeOut("slow"),$("#navigation .selected").next().slideToggle(400),Z(!0,3e3)};var r="images/brick-red.jpg",i=new THREE.TextureLoader;(O=i.load(r)).wrapS=THREE.RepeatWrapping,O.wrapT=THREE.RepeatWrapping,r="images/brick-brown.jpg",i=new THREE.TextureLoader,(H=i.load(r)).wrapS=THREE.RepeatWrapping,H.wrapT=THREE.RepeatWrapping,r="images/brick-tan.jpg",i=new THREE.TextureLoader,(F=i.load(r)).wrapS=THREE.RepeatWrapping,F.wrapT=THREE.RepeatWrapping,V([{path:"objects/Directions.lwo",parent:"cameraLightsSetNull",visible:!1},{path:"objects/FirstAlarm.lwo",parent:"firstAlarmNull",visible:!1},{path:"objects/SecondAlarm-Standard.lwo",parent:"secondAlarmStandardNull",visible:!1},{path:"objects/SecondAlarm-Extended.lwo",parent:"secondAlarmExtendedNull",visible:!1},{path:"objects/ThirdAlarm.lwo",parent:"thirdAlarmNull",visible:!1},{path:"objects/FifthAlarm.lwo",parent:"fifthAlarmNull",visible:!1},{path:"objects/GeneralAlarm.lwo",parent:"generalAlarmNull",visible:!1},{path:"objects/HighRise.lwo",parent:"accessoriesNull",visible:!1},{path:"objects/Options.lwo",parent:"accessoriesNull",visible:!1}]),n.fog=new THREE.Fog(12239038,20,175);var c=new THREE.SphereGeometry(250,25,25),d=(r="images/Environment/EnvMap.jpg",(i=new THREE.TextureLoader).load(r)),g=new THREE.MeshBasicMaterial({name:"skySphere-Material",map:d,fog:!1}),w=new THREE.Mesh(c,g);w.material.side=THREE.BackSide,w.name="skySphere-Mesh",w.rotation.y=Math.PI,b.add(w),(t=new THREE.OrbitControls(a,l.domElement)).autoRotate=!0,t.autoRotateSpeed=.03,t.enableDamping=!0,t.dampingFactor=.1,t.rotateSpeed=.1,t.panSpeed=.1,t.screenSpacePanning=!0,t.target.set(0,1.2,0),S?j=.5:(t.enablePan=!1,t.maxPolarAngle=Math.PI/2),t.minDistance=j,t.maxDistance=50,t.enableKeys=!1,t.addEventListener("start",function(){K()}),r="images/Environment/Grass.jpg",(d=(i=new THREE.TextureLoader).load(r)).wrapS=THREE.RepeatWrapping,d.wrapT=THREE.RepeatWrapping,d.repeat.x=30,d.repeat.y=45,d.anisotropy=l.capabilities.getMaxAnisotropy(),d.anisotropy=5;var y=new THREE.CircleGeometry(250,24);g=new THREE.MeshPhongMaterial({name:"grassGroundPlane-Material",map:d,bumpMap:d,bumpScale:.1,shininess:1});var f=new THREE.Mesh(y,g);function N(){this.towerHeight="3-story",this.towerFootprint="15x18",this.towerRoof="parapet",this.residentialBuilding="none",this.residentialRoof="gabled",this.annex="none",this.highRiseTower=!1,this.cornerBalcony=!1,this.cantileverBalcony=!1,this.cagedLadder=!1,this.exteriorTowerStairs=!1,this.insetBalcony=!1,this.exteriorTwoStoryStairs=!1,this.balconyWithStairs=!1,this.roofHatch=!1,this.garageDoor=!1,this.annexDoubleDoor=!1,this.exteriorMaterial="metal",this.wallColor="sandstone",this.doorWindowColor="melchers green",this.roofTrimColor="melchers green",this.wallTrimColor="melchers green",this.wearPlateColor="melchers green",this.brickColor="red"}f.rotateX(-Math.PI/2),f.name="ground",f.castShadow=!1,f.receiveShadow=!0,p=f,b.add(f),y=new THREE.BoxGeometry(1,.05,1),r="images/Foundation/concrete.jpg",(d=(i=new THREE.TextureLoader).load(r)).anisotropy=l.capabilities.getMaxAnisotropy(),d.wrapS=THREE.RepeatWrapping,d.wrapT=THREE.RepeatWrapping,g=new THREE.MeshPhongMaterial({color:"white",name:"foundation-Material",map:d,bumpMap:d,bumpScale:.04,specularMap:d}),(h=new THREE.Mesh(y,g)).name="foundation",h.receiveShadow=!0,h.visible=!1,b.add(h),N.prototype.towerWidth=function(){return 5},m=new N,S&&((o=new Stats).showPanel(0),e.appendChild(o.domElement),o.domElement.style="position:fixed;top:var(--bannerHeight);cursor:pointer;opacity:0.9;z-index:10000",console.log(m),console.log(n))}function L(){X(),requestAnimationFrame(L),l.render(n,a),TWEEN.update(),t.update(),S&&o.update()}function I(){"2-story"==m.towerHeight?(m.towerFootprint="15x18",$("#towerFootprint").parent().hide()):"3-story"==m.towerHeight?($('#towerFootprint option[value="none"]').prop("disabled",!0),$('#towerFootprint option[value="15x18"]').prop("disabled",!1),$('#towerFootprint option[value="22x12"]').prop("disabled",!1),$('#towerFootprint option[value="22x22"]').prop("disabled",!0),$('#towerFootprint option[value="22x25"]').prop("disabled",!0),"15x18"!==m.towerFootprint&&"22x12"!==m.towerFootprint&&(m.towerFootprint="22x12"),$("#towerFootprint").parent().show()):"4-story"==m.towerHeight?($('#towerFootprint option[value="none"]').prop("disabled",!0),$('#towerFootprint option[value="15x18"]').prop("disabled",!1),$('#towerFootprint option[value="22x12"]').prop("disabled",!1),$('#towerFootprint option[value="22x22"]').prop("disabled",!1),$('#towerFootprint option[value="22x25"]').prop("disabled",!1),"none"==m.towerFootprint&&(m.towerFootprint="22x12"),$("#towerFootprint").parent().show()):"5-story"==m.towerHeight?($('#towerFootprint option[value="none"]').prop("disabled",!0),$('#towerFootprint option[value="15x18"]').prop("disabled",!0),$('#towerFootprint option[value="22x12"]').prop("disabled",!1),$('#towerFootprint option[value="22x22"]').prop("disabled",!1),$('#towerFootprint option[value="22x25"]').prop("disabled",!1),"15x18"!=m.towerFootprint&&"none"!=m.towerFootprint||(m.towerFootprint="22x12"),$("#towerFootprint").parent().show()):"residential-only"==m.towerHeight&&(m.towerFootprint="none",$("#navigation #menuResidential").hasClass("selected")||($("#navigation #menuResidential").next().slideToggle(400),$("#navigation #menuResidential").toggleClass("selected"),$("#navigation #menuTower").next().slideToggle(400),$("#navigation #menuTower").toggleClass("selected")),$("#towerFootprint").parent().hide()),"15x18"==m.towerFootprint?($('#menuTowerRoof option[value="none"]').prop("disabled",!0),"none"==m.towerRoof&&(m.towerRoof="parapet"),$("#menuTowerRoof").show()):"residential-only"==m.towerHeight?(m.towerRoof="none",$("#menuTowerRoof").hide()):(m.towerRoof="parapet",$("#menuTowerRoof").hide()),"15x18"==m.towerFootprint?(m.residentialBuilding="none",$("section#menuResidential").hide()):"residential-only"==m.towerHeight?("none"==m.residentialBuilding&&(m.residentialBuilding="standard"),$('#residentialBuilding option[value="none"]').prop("disabled",!0),$("section#menuResidential").show()):($('#menuResidential option[value="none"]').prop("disabled",!1),$("section#menuResidential").show()),"none"==m.residentialBuilding?$("#residentialRoof").parent().hide():"standard"==m.residentialBuilding?("split"==m.residentialRoof&&(m.residentialRoof="parapet"),$('#residentialRoof option[value="parapet"]').prop("disabled",!1),$('#residentialRoof option[value="gabled"]').prop("disabled",!1),$('#residentialRoof option[value="split"]').prop("disabled",!0),$("#residentialRoof").parent().show()):"extended"==m.residentialBuilding&&($('#residentialRoof option[value="parapet"]').prop("disabled",!1),$('#residentialRoof option[value="gabled"]').prop("disabled",!1),$('#residentialRoof option[value="split"]').prop("disabled",!1),$("#residentialRoof").parent().show()),"15x18"==m.towerFootprint&&"2-story"==m.towerHeight?($("#high-rise-tower").checkboxradio("disable"),m.highRiseTower=!1,$("#exterior-stairs").checkboxradio("enable"),$("#two-story-stairs").checkboxradio("disable"),m.exteriorTwoStoryStairs=!1,$("#balcony-with-stairs").checkboxradio("disable"),m.balconyWithStairs=!1,$("#inset-balcony").checkboxradio("disable"),m.insetBalcony=!1,$("#corner-balcony").checkboxradio("disable"),m.cornerBalcony=!1,$("#cantilever-balcony").checkboxradio("disable"),m.cantileverBalcony=!1,$("#caged-ladder").checkboxradio("disable"),m.cagedLadder=!1,$("#garage-door").checkboxradio("disable"),m.garageDoor=!1,"none"!==m.annex?$("#annex-double-door").checkboxradio("enable"):($("#annex-double-door").checkboxradio("disable"),m.annexDoubleDoor=!1),"parapet"==m.towerRoof?$("#roof-hatch").checkboxradio("enable"):($("#roof-hatch").checkboxradio("disable"),m.roofHatch=!1)):"15x18"==m.towerFootprint?($("#high-rise-tower").checkboxradio("disable"),m.highRiseTower=!1,$("#exterior-stairs").checkboxradio("disable"),m.exteriorTowerStairs=!1,$("#two-story-stairs").checkboxradio("disable"),m.exteriorTwoStoryStairs=!1,$("#balcony-with-stairs").checkboxradio("disable"),m.balconyWithStairs=!1,$("#inset-balcony").checkboxradio("disable"),m.insetBalcony=!1,$("#corner-balcony").checkboxradio("enable"),$("#cantilever-balcony").checkboxradio("enable"),$("#caged-ladder").checkboxradio("enable"),$("#garage-door").checkboxradio("disable"),m.garageDoor=!1,"none"!==m.annex?$("#annex-double-door").checkboxradio("enable"):($("#annex-double-door").checkboxradio("disable"),m.annexDoubleDoor=!1),"parapet"==m.towerRoof?$("#roof-hatch").checkboxradio("enable"):($("#roof-hatch").checkboxradio("disable"),m.roofHatch=!1)):"residential-only"==m.towerHeight?($("#high-rise-tower").checkboxradio("disable"),m.highRiseTower=!1,$("#exterior-stairs").checkboxradio("disable"),m.exteriorTowerStairs=!1,$("#two-story-stairs").checkboxradio("disable"),m.exteriorTwoStoryStairs=!1,$("#inset-balcony").checkboxradio("disable"),m.insetBalcony=!1,$("#corner-balcony").checkboxradio("disable"),m.cornerBalcony=!1,$("#cantilever-balcony").checkboxradio("disable"),m.cantileverBalcony=!1,$("#caged-ladder").checkboxradio("disable"),m.cagedLadder=!1,$("#roof-hatch").checkboxradio("disable"),m.roofHatch=!1,$("#garage-door").checkboxradio("enable"),"none"!==m.annex&&"extended"==m.residentialBuilding?$("#balcony-with-stairs").checkboxradio("enable"):($("#balcony-with-stairs").checkboxradio("disable"),m.balconyWithStairs=!1),"none"!==m.annex?$("#annex-double-door").checkboxradio("enable"):($("#annex-double-door").checkboxradio("disable"),m.annexDoubleDoor=!1)):($("#high-rise-tower").checkboxradio("enable"),$("#exterior-stairs").checkboxradio("enable"),$("#cantilever-balcony").checkboxradio("enable"),$("#caged-ladder").checkboxradio("enable"),m.exteriorTowerStairs?($("#corner-balcony").checkboxradio("disable"),m.cornerBalcony=!1):$("#corner-balcony").checkboxradio("enable"),"none"!==m.residentialBuilding?($("#garage-door").checkboxradio("enable"),$("#two-story-stairs").checkboxradio("enable"),$("#inset-balcony").checkboxradio("enable")):($("#garage-door").checkboxradio("disable"),$("#two-story-stairs").checkboxradio("disable"),$("#inset-balcony").checkboxradio("disable")),"none"!==m.annex&&"extended"==m.residentialBuilding?$("#balcony-with-stairs").checkboxradio("enable"):($("#balcony-with-stairs").checkboxradio("disable"),m.balconyWithStairs=!1),"none"!==m.annex?$("#annex-double-door").checkboxradio("enable"):($("#annex-double-door").checkboxradio("disable"),m.annexDoubleDoor=!1),"parapet"==m.towerRoof?$("#roof-hatch").checkboxradio("enable"):($("#roof-hatch").checkboxradio("disable"),m.roofHatch=!1)),"metal"==m.exteriorMaterial?$("#brickColorMenu").hide():$("#brickColorMenu").show(),"brick"==m.exteriorMaterial?$("#metalColorMenu").hide():$("#metalColorMenu").show(),$("#towerHeight").val(m.towerHeight),$("#towerFootprint").val(m.towerFootprint),$("#towerRoof").val(m.towerRoof),$("#residentialBuilding").val(m.residentialBuilding),$("#residentialRoof").val(m.residentialRoof),$("#annex").val(m.annex),$("#high-rise-tower").prop("checked",m.highRiseTower),$("#corner-balcony").prop("checked",m.cornerBalcony),$("#cantilever-balcony").prop("checked",m.cantileverBalcony),$("#caged-ladder").prop("checked",m.cagedLadder),$("#exterior-stairs").prop("checked",m.exteriorTowerStairs),$("#inset-balcony").prop("checked",m.insetBalcony),$("#two-story-stairs").prop("checked",m.exteriorTwoStoryStairs),$("#balcony-with-stairs").prop("checked",m.balconyWithStairs),$("#roof-hatch").prop("checked",m.roofHatch),$("#garage-door").prop("checked",m.garageDoor),$("#annex-double-door").prop("checked",m.annexDoubleDoor),"brick"==m.exteriorMaterial?$("#exteriorMaterial-brick").attr("checked","checked"):$("#exteriorMaterial-metal").attr("checked","checked"),$("#wallColor").val(m.wallColor),$("#doorWindowColor").val(m.doorWindowColor),$("#roofTrimColor").val(m.roofTrimColor),$("#wallTrimColor").val(m.wallTrimColor),$("#wearPlateColor").val(m.wearPlateColor),$("#brickColor").val(m.brickColor),$(".prettySelect").selectmenu("refresh"),$(".prettyCheckbox").checkboxradio("refresh"),$(".prettyRadio").checkboxradio("refresh")}function A(){I(),S&&(b.getObjectByName("North").position.set(0,.01,-6),b.getObjectByName("East").position.set(6,.01,0),b.getObjectByName("South").position.set(0,.01,6),b.getObjectByName("West").position.set(-6,.01,0)),x.visible=!1,v.visible=!1,T.visible=!1,E.visible=!1,R.visible=!1,B.visible=!1,"15x18"==m.towerFootprint?(x.visible=!0,w=x):"22x12"==m.towerFootprint?(E.visible=!0,w=E):"22x22"==m.towerFootprint?(R.visible=!0,w=R):"22x25"==m.towerFootprint?(B.visible=!0,w=B):w=null;let e,o,t,r=0;if(null!==w){let e;w.traverse(function(e){e instanceof THREE.Mesh&&(e.visible=!1)});let o=0;m.highRiseTower&&(o=1),"2-story"==m.towerHeight&&((e=w.getObjectByName("building-2-story")).visible=!0,r=19.5),"3-story"==m.towerHeight&&((e=w.getObjectByName("building-3-story")).visible=!0,w.getObjectByName("building-2-story")&&((e=w.getObjectByName("building-2-story")).visible=!0),r=29.5),"4-story"==m.towerHeight&&((e=w.getObjectByName("building-4-story")).visible=!0,("22x22"==m.towerFootprint||"22x25"==m.towerFootprint)&&e.hasOwnProperty("morphTargetDictionary")&&e.morphTargetDictionary.hasOwnProperty("highRise")&&(e.morphTargetInfluences[e.morphTargetDictionary.highRise]=o),w.getObjectByName("building-2-story")&&((e=w.getObjectByName("building-2-story")).visible=!0,("22x22"==m.towerFootprint||"22x25"==m.towerFootprint)&&e.hasOwnProperty("morphTargetDictionary")&&e.morphTargetDictionary.hasOwnProperty("highRise")&&(e.morphTargetInfluences[e.morphTargetDictionary.highRise]=o)),w.getObjectByName("building-3-story")&&((e=w.getObjectByName("building-3-story")).visible=!0,("22x22"==m.towerFootprint||"22x25"==m.towerFootprint)&&e.hasOwnProperty("morphTargetDictionary")&&e.morphTargetDictionary.hasOwnProperty("highRise")&&(e.morphTargetInfluences[e.morphTargetDictionary.highRise]=o)),r=39.5),"5-story"==m.towerHeight&&((e=w.getObjectByName("building-5-story")).visible=!0,("22x22"==m.towerFootprint||"22x25"==m.towerFootprint)&&e.hasOwnProperty("morphTargetDictionary")&&e.morphTargetDictionary.hasOwnProperty("highRise")&&(e.morphTargetInfluences[e.morphTargetDictionary.highRise]=o),w.getObjectByName("building-4-story")&&((e=w.getObjectByName("building-4-story")).visible=!0,("22x22"==m.towerFootprint||"22x25"==m.towerFootprint)&&e.hasOwnProperty("morphTargetDictionary")&&e.morphTargetDictionary.hasOwnProperty("highRise")&&(e.morphTargetInfluences[e.morphTargetDictionary.highRise]=o)),w.getObjectByName("building-3-story")&&((e=w.getObjectByName("building-3-story")).visible=!0,("22x22"==m.towerFootprint||"22x25"==m.towerFootprint)&&e.hasOwnProperty("morphTargetDictionary")&&e.morphTargetDictionary.hasOwnProperty("highRise")&&(e.morphTargetInfluences[e.morphTargetDictionary.highRise]=o)),r=49.5);let t="roof-"+m.towerRoof;"parapet"!=m.towerRoof||!m.exteriorTowerStairs||"3-story"!=m.towerHeight&&"5-story"!=m.towerHeight||(t+="-left-opening"),"parapet"!=m.towerRoof||!m.exteriorTowerStairs||"2-story"!=m.towerHeight&&"4-story"!=m.towerHeight||(t+="-right-opening");let i=w.getObjectByName(t);m.highRiseTower||(i.visible=!0),i.position.y=_(r)}if("none"!==m.residentialBuilding){"standard"==m.residentialBuilding?y=v:"extended"==m.residentialBuilding&&(y=T),y.traverse(function(e){e instanceof THREE.Mesh&&(e.visible=!1)});let e=y.getObjectByName("building");y.visible=!0,e.visible=!0,y.getObjectByName("roof-"+m.residentialRoof).visible=!0}if("none"!==m.annex&&((f="none"!==m.residentialBuilding?y:w).getObjectByName("annex").visible=!0,f.getObjectByName("annex-roof-"+m.annex).visible=!0),k.visible=!0,k.traverse(function(e){e instanceof THREE.Mesh&&(e.visible=!1)}),m.highRiseTower){let e=39.5;"4-story"==m.towerHeight&&(e=49.6),"5-story"==m.towerHeight&&(e=59.6);let o=k.getObjectByName("high-rise-3-story");o.visible=!0,o.morphTargetInfluences[o.morphTargetDictionary.addStory]=(e-29.5)/10;let t="high-rise-roof";!m.exteriorTowerStairs||"3-story"!=m.towerHeight&&"5-story"!=m.towerHeight||(t+="-left-opening"),!m.exteriorTowerStairs||"2-story"!=m.towerHeight&&"4-story"!=m.towerHeight||(t+="-right-opening");let r=k.getObjectByName(t);r.visible=!0,r.position.set(0,_(e),0);let i=0,a=0;"22x22"==m.towerFootprint&&(i=10.25),"22x25"==m.towerFootprint&&(i=13.66666,a=1),r.morphTargetInfluences[r.morphTargetDictionary.highRiseRoofWidth]=i,r.morphTargetInfluences[r.morphTargetDictionary.highRiseRoofExtra]=a}if(m.cornerBalcony){let r;o=0,t=0,"15x18"==m.towerFootprint&&(o=_(41/12*1),t=_(-41/12*1)),"22x12"==m.towerFootprint&&(o=_(10.25)),"22x22"==m.towerFootprint&&(o=_(0)),"22x25"==m.towerFootprint&&(o=_(-41/12*1)),(e=k.getObjectByName("corner-balcony")).visible=m.cornerBalcony,e.position.x=o,e.position.z=t,"15x18"==m.towerFootprint&&(r=w.getObjectByName("building-3-story")),"22x12"==m.towerFootprint&&(r=w.getObjectByName("building-3-story"),w.getObjectByName("roof-parapet").morphTargetInfluences[w.getObjectByName("roof-parapet").morphTargetDictionary.cornerBalcony]=1,w.getObjectByName("roof-parapet-left-opening").morphTargetInfluences[w.getObjectByName("roof-parapet-left-opening").morphTargetDictionary.cornerBalcony]=1,w.getObjectByName("roof-parapet-right-opening").morphTargetInfluences[w.getObjectByName("roof-parapet-right-opening").morphTargetDictionary.cornerBalcony]=1),"22x22"==m.towerFootprint&&(r=w.getObjectByName("building-4-story")),"22x25"==m.towerFootprint&&(r=w.getObjectByName("building-4-story")),r.morphTargetInfluences[r.morphTargetDictionary.cornerBalcony]=1}else if("residential-only"!==m.towerHeight){let e;"15x18"==m.towerFootprint&&(e=w.getObjectByName("building-3-story")),"22x12"==m.towerFootprint&&(e=w.getObjectByName("building-3-story"),w.getObjectByName("roof-parapet").morphTargetInfluences[w.getObjectByName("roof-parapet").morphTargetDictionary.cornerBalcony]=0,w.getObjectByName("roof-parapet-left-opening").morphTargetInfluences[w.getObjectByName("roof-parapet-left-opening").morphTargetDictionary.cornerBalcony]=0,w.getObjectByName("roof-parapet-right-opening").morphTargetInfluences[w.getObjectByName("roof-parapet-right-opening").morphTargetDictionary.cornerBalcony]=0),"22x22"==m.towerFootprint&&(e=w.getObjectByName("building-4-story")),"22x25"==m.towerFootprint&&(e=w.getObjectByName("building-4-story")),e.morphTargetInfluences[e.morphTargetDictionary.cornerBalcony]=0}if(m.cantileverBalcony&&(t=0,"15x18"==m.towerFootprint&&(t=_(-41/12*1)),(e=k.getObjectByName("cantilever-balcony")).visible=m.cantileverBalcony,e.position.z=t),m.cagedLadder&&(t=0,"15x18"==m.towerFootprint&&(t=_(-41/12*1)),(e=k.getObjectByName("caged-ladder")).visible=m.cagedLadder,e.position.z=t),m.exteriorTowerStairs){let e,t;o=0,"15x18"==m.towerFootprint&&(o=_(-15)),"22x12"==m.towerFootprint&&(o=_(-11.8)),"22x22"==m.towerFootprint&&(o=_(-21.9)),"22x25"==m.towerFootprint&&(o=_(-25.35)),"3-story"!=m.towerHeight&&"4-story"!=m.towerHeight&&"5-story"!=m.towerHeight||((e=k.getObjectByName("exterior-stairs-3-story")).visible=m.exteriorTowerStairs,e.position.x=o,"3-story"==m.towerHeight&&"parapet"!==m.towerRoof&&((t=k.getObjectByName("exterior-stairs-5-story-top")).visible=m.exteriorTowerStairs,t.position.x=o,t.position.y=_(-20))),("4-story"==m.towerHeight||"5-story"==m.towerHeight||"3-story"==m.towerHeight&&"parapet"==m.towerRoof)&&((e=k.getObjectByName("exterior-stairs-4-story")).visible=m.exteriorTowerStairs,e.position.x=o,e.morphTargetInfluences[e.morphTargetDictionary.hideDoor]=0,("4-story"==m.towerHeight&&"parapet"!==m.towerRoof||"3-story"==m.towerHeight&&"parapet"==m.towerRoof)&&((t=k.getObjectByName("exterior-stairs-4-story-top")).visible=m.exteriorTowerStairs,t.position.x=o,t.position.y=0,"3-story"==m.towerHeight&&"parapet"==m.towerRoof&&(e.morphTargetInfluences[e.morphTargetDictionary.hideDoor]=1))),("5-story"==m.towerHeight||"4-story"==m.towerHeight&&"parapet"==m.towerRoof)&&((e=k.getObjectByName("exterior-stairs-5-story")).visible=m.exteriorTowerStairs,e.position.x=o,e.morphTargetInfluences[e.morphTargetDictionary.hideDoor]=0,("5-story"==m.towerHeight&&"parapet"!==m.towerRoof||"4-story"==m.towerHeight&&"parapet"==m.towerRoof)&&((t=k.getObjectByName("exterior-stairs-5-story-top")).visible=m.exteriorTowerStairs,t.position.x=o,t.position.y=0,"4-story"==m.towerHeight&&"parapet"==m.towerRoof&&(e.morphTargetInfluences[e.morphTargetDictionary.hideDoor]=1))),"5-story"==m.towerHeight&&"parapet"==m.towerRoof&&((e=k.getObjectByName("exterior-stairs-6-story")).visible=m.exteriorTowerStairs,e.position.x=o,e.morphTargetInfluences[e.morphTargetDictionary.hideDoor]=1,(t=k.getObjectByName("exterior-stairs-4-story-top")).visible=m.exteriorTowerStairs,t.position.x=o,t.position.y=_(20))}if(m.insetBalcony){o=0,"extended"==m.residentialBuilding&&(o=_(10.25)),(e=k.getObjectByName("inset-balcony")).visible=m.insetBalcony,e.position.x=o;let t=y.getObjectByName("building");t.morphTargetInfluences[t.morphTargetDictionary.insetBalcony]=1}else if("none"!==m.residentialBuilding){let e=y.getObjectByName("building");e.morphTargetInfluences[e.morphTargetDictionary.insetBalcony]=0}if(m.exteriorTwoStoryStairs){o=0,"extended"==m.residentialBuilding&&(o=_(10.25)),(e=k.getObjectByName("two-story-stairs")).visible=m.exteriorTwoStoryStairs,e.position.x=o;let t=y.getObjectByName("building");t.morphTargetInfluences[t.morphTargetDictionary.exteriorTwoStoryStairs]=1}else if("none"!==m.residentialBuilding){let e=y.getObjectByName("building");e.morphTargetInfluences[e.morphTargetDictionary.exteriorTwoStoryStairs]=0}if(m.balconyWithStairs){o=0,"extended"==m.residentialBuilding&&(o=_(10.25)),(e=k.getObjectByName("balcony-with-stairs")).visible=m.balconyWithStairs,e.position.x=o,"non-working"==m.annex?e.morphTargetInfluences[e.morphTargetDictionary.hideRail]=0:e.morphTargetInfluences[e.morphTargetDictionary.hideRail]=1;let t=y.getObjectByName("building");t.morphTargetInfluences[t.morphTargetDictionary.balconyWithStairs]=1}else if("none"!==m.residentialBuilding){let e=y.getObjectByName("building");e.morphTargetInfluences[e.morphTargetDictionary.balconyWithStairs]=0}if(m.roofHatch&&((e=k.getObjectByName("roof-hatch")).visible=m.roofHatch,e.position.set(_(-3.25),_(r+.25),_(3))),m.garageDoor){o=0,"extended"==m.residentialBuilding&&(o=_(10.25)),(e=k.getObjectByName("garage-door")).visible=m.garageDoor,e.position.x=o;let t=y.getObjectByName("building");t.morphTargetInfluences[t.morphTargetDictionary.garageDoor]=1}else if("none"!==m.residentialBuilding){let e=y.getObjectByName("building");e.morphTargetInfluences[e.morphTargetDictionary.garageDoor]=0}m.annexDoubleDoor&&(t=_(.1),o=0,"15x18"==m.towerFootprint&&(t=_(-3.296875)),"standard"==m.residentialBuilding&&(o=_(25.2)),"extended"==m.residentialBuilding&&(o=_(35.5)),(e=k.getObjectByName("annex-double-door")).position.z=t,e.position.x=o,e.visible=m.annexDoubleDoor),n.traverse(function(e){if(e instanceof THREE.Mesh)for(var o=0;o0?($(e).fadeTo(500,0,"linear",function(){t.style.pointerEvents="none",setTimeout(function(){t.style.display="none"},150)}),$("#overlay").fadeTo("slow",0,function(){r.style.pointerEvents="none",setTimeout(function(){r.style.display="none"},150)})):(t.style.display="absolute",t.style.pointerEvents="auto",$(e).fadeTo("fast",o,function(){$(e).find(":input:visible:enabled:first").focus()}),r.style.display="absolute",r.style.pointerEvents="auto",$("#overlay").fadeTo("fast",.8,function(){}))}function V(e,o,t){if(void 0===o&&(o=!0),void 0===t&&(t=!1),"string"===$.type(o)&&(t=o,o=!0),Array.isArray(e)&&e.length>0)e.forEach(function(e){let r="",i=o,a=t;"string"===$.type(e)&&(r=e),"object"==typeof e&&null!==e&&(r=e.path,void 0!==e.visible&&(i=e.visible),void 0!==e.parent&&(a=e.parent)),loader=new THREE.LWOLoader(u),loader.setResourcePath(M+"/"),loader.load(r,function(e){e.meshes.forEach(function(e){e.visible=i,e.name.endsWith("-master")&&(e.visible=!1),e.name.endsWith("-hide")&&(e.visible=!1),e.castShadow=!0,e.receiveShadow=!0,e.frustumCulled=!1,e.hasOwnProperty("morphTargetInfluences")||(e.morphTargetInfluences=[]),e.material.length>0?e.material.forEach(function(o){void 0!==e.morphTargetDictionary&&(o.morphTargets=!0),"MeshStandardMaterial"==o.type&&null!==o.roughnessMap&&(o.roughness=1),"doors-and-windows"==o.name||"door-and-window-trim"==o.name||"trim-roof"==o.name||"trim-walls"==o.name||"garage-door"==o.name||"chop-out"==o.name?(o.polygonOffset=!0,o.polygonOffsetUnits=1,o.polygonOffsetFactor=-1):"walls-brick"==o.name?(o.polygonOffset=!0,o.polygonOffsetUnits=1,o.polygonOffsetFactor=1):"walls-metal"==o.name&&(o.flatShading=!0)}):(void 0!==e.morphTargetDictionary&&(e.material.morphTargets=!0),"MeshStandardMaterial"==e.material.type&&null!==e.material.roughnessMap&&(e.material.roughness=1)),a?n.getObjectByName(a).add(e):n.add(e)})})});else{let r=e,i="",a=o,l=t;"string"===$.type(r)&&(i=r,a=o,l=t),"object"==typeof r&&null!==r&&(i=r.path,void 0!==r.visible&&(a=r.visible),void 0!==r.parent&&(l=r.parent)),loader=new THREE.LWOLoader(u),loader.setResourcePath(M+"/"),loader.load(i,function(e){e.meshes.forEach(function(e){e.visible=a,e.name.endsWith("-master")&&(e.visible=!1),e.name.endsWith("-hide")&&(e.visible=!1),e.castShadow=!0,e.receiveShadow=!0,e.frustumCulled=!1,e.material.length>0?e.material.forEach(function(o){void 0!==e.morphTargetDictionary&&(o.morphTargets=!0),"MeshStandardMaterial"==o.type&&null!==o.roughnessMap&&(o.roughness=1)}):(void 0!==e.morphTargetDictionary&&(e.material.morphTargets=!0),"MeshStandardMaterial"==e.material.type&&null!==e.material.roughnessMap&&(e.material.roughness=1)),l?n.getObjectByName(l).add(e):n.add(e)})})}}function K(){t.autoRotate=!1;for(var e=TWEEN.getAll(),o=e.length-1;o>=0;o--)e[o].stop()}function _(e){return e/3.28084}function Z(e,o){e=e||!1,o=o||1500;let i=0,n=0,l=0;"residential-only"!==m.towerHeight&&("2-story"==m.towerHeight&&(i=19.5),"3-story"==m.towerHeight&&(i=29.5),"4-story"==m.towerHeight&&(i=39.5),"5-story"==m.towerHeight&&(i=49.5),"15x18"==m.towerFootprint&&(l=-18,front=7.5,back=-7.5),"22x12"==m.towerFootprint&&(l=-12,front=11,back=-11),"22x22"==m.towerFootprint&&(l=-22,front=11,back=-11),"22x25"==m.towerFootprint&&(l=-25,front=11,back=-11)),"none"!==m.residentialBuilding&&(i=Math.max(i,31),front=11,back=-11,"standard"==m.residentialBuilding&&(n=25.5),"extended"==m.residentialBuilding&&(n=36)),"none"!==m.annex&&(n+=14.5),m.highRiseTower&&(i+=10,front=25.5,back=15),centerX=_((l+n)/2),centerY=_((i+0)/2);let s=new THREE.Vector3(centerX+10,centerY-1.5,i-10),c=new THREE.Vector3(centerX,centerY,0),d=o;if(!0===e)r=new TWEEN.Tween(a.position).to(s,d).easing(TWEEN.Easing.Quartic.Out).start(),r=new TWEEN.Tween(t.target).to(c,d).easing(TWEEN.Easing.Quartic.Out).start();else if("instant"===e)a.position.set(s.x,s.y,s.z),t.target.set(c.x,c.y,c.z);else{if("get"===e)return{x:s.x,y:s.y,z:s.z};r=new TWEEN.Tween(t.target).to(c,d).easing(TWEEN.Easing.Quartic.Out).start()}}g=null!==C&&null!==W,P(),L(),$("#towerHeight").on("selectmenuchange",function(e,o){m.towerHeight=this.value,A(),Z(!1)}),$("#towerFootprint").on("selectmenuchange",function(e,o){m.towerFootprint=this.value,A(),Z(!1)}),$("#towerRoof").on("selectmenuchange",function(e,o){m.towerRoof=this.value,A()}),$("#residentialBuilding").on("selectmenuchange",function(e,o){m.residentialBuilding=this.value,A(),Z(!1)}),$("#residentialRoof").on("selectmenuchange",function(e,o){m.residentialRoof=this.value,A()}),$("#annex").on("selectmenuchange",function(e,o){m.annex=this.value,A(),Z(!1)}),$("#high-rise-tower").change(function(){m.highRiseTower=$(this).is(":checked"),A(),Z(!1)}),$("#corner-balcony").change(function(){m.cornerBalcony=$(this).is(":checked"),"22x12"==m.towerFootprint&&1==m.cagedLadder&&(m.cagedLadder=!1),"22x12"==m.towerFootprint&&1==m.cantileverBalcony&&(m.cantileverBalcony=!1),A()}),$("#cantilever-balcony").change(function(){m.cantileverBalcony=$(this).is(":checked"),1==m.cagedLadder&&(m.cagedLadder=!1),"22x12"==m.towerFootprint&&1==m.cornerBalcony&&(m.cornerBalcony=!1),A()}),$("#caged-ladder").change(function(){m.cagedLadder=$(this).is(":checked"),1==m.cantileverBalcony&&(m.cantileverBalcony=!1),"22x12"==m.towerFootprint&&m.cornerBalcony&&(m.cornerBalcony=!1),A()}),$("#exterior-stairs").change(function(){m.exteriorTowerStairs=$(this).is(":checked"),A()}),$("#two-story-stairs").change(function(){m.exteriorTwoStoryStairs=$(this).is(":checked"),m.balconyWithStairs&&(m.balconyWithStairs=!1),A()}),$("#balcony-with-stairs").change(function(){m.balconyWithStairs=$(this).is(":checked"),m.exteriorTwoStoryStairs&&(m.exteriorTwoStoryStairs=!1),A()}),$("#inset-balcony").change(function(){m.insetBalcony=$(this).is(":checked"),A()}),$("#roof-hatch").change(function(){m.roofHatch=$(this).is(":checked"),A()}),$("#garage-door").change(function(){m.garageDoor=$(this).is(":checked"),A()}),$("#annex-double-door").change(function(){m.annexDoubleDoor=$(this).is(":checked"),A()}),$("#exteriorMaterial").change(function(){m.exteriorMaterial=$("input[name=exteriorMaterial]:checked").val(),A()}),jQuery(document).ready(function(){$("#navigation section").click(function(){return $(this).toggleClass("selected"),$(this).next().slideToggle(400),!1}).next().hide()}),$("#saveButton").click(function(){J("#saveModal")}),$("#submitButton").click(function(){J("#quoteModal")}),$("#overlay, .closeButton, .cancelButton").click(function(){J(".modal")}),$(".prettySelect").each(function(e,o){let t,r="";$(o).selectmenu({open:function(e,i){$("#"+this.id+"-menu").children().each(function(i){r=$(e.target.options[i]).attr("class"),t=$(o).next(),$(this).addClass($(o.options[i]).attr("class"))})},appendTo:"#navigation"})}),$(function(){$("input.prettyRadio").checkboxradio({icon:!1}),$("input.prettyCheckbox").checkboxradio(),$(".controlgroup").controlgroup()}),$("#wallColor").on("selectmenuchange",function(e,o){G(o.item.value,"walls-metal")}),$("#doorWindowColor").on("selectmenuchange",function(e,o){G(o.item.value,"doors-and-windows")}),$("#roofTrimColor").on("selectmenuchange",function(e,o){G(o.item.value,"trim-roof")}),$("#wallTrimColor").on("selectmenuchange",function(e,o){G(o.item.value,"trim-walls")}),$("#wearPlateColor").on("selectmenuchange",function(e,o){G(o.item.value,"wear-plate")}),$("#brickColor").on("selectmenuchange",function(e,o){G(o.item.value,"walls-brick")}),$("#roofOption1").on("selectmenuchange",function(e,o){m.roofs[1].type=o.item.value,A()}),$("#roofOption2").on("selectmenuchange",function(e,o){m.roofs[2].type=o.item.value,A()}),$("#roofOption3").on("selectmenuchange",function(e,o){m.roofs[3].type=o.item.value,A()}),$("#roofOption4").on("selectmenuchange",function(e,o){m.roofs[4].type=o.item.value,A()}),$("#roofOption5").on("selectmenuchange",function(e,o){m.roofs[5].type=o.item.value,A()}),$("#roofOption6").on("selectmenuchange",function(e,o){m.roofs[6].type=o.item.value,A()}),$("#roofOption7").on("selectmenuchange",function(e,o){m.roofs[7].type=o.item.value,A()}),$("#roofOption8").on("selectmenuchange",function(e,o){m.roofs[8].type=o.item.value,A()}),$("#addDoorButton").click(function(){addDoorWindow(this)}),$("#addWindowButton").click(function(){addDoorWindow(this)}),$("#addWallButton").click(function(){addDoorWindow(this)}),$("#addBurnRoomLiningButton").click(function(){addBurnRoomLining(this)}),$("#addStairwellButton").click(function(){addStairwell(this)}),$("#helpButton").click(function(){J("#help")}),$(document).ready(function(){$("form").each(function(){$(this).validate()})}),$(document).ready(function(){$("form").submit(function(e){if($(this).valid()){e.preventDefault();let t={},r={},a="",n=q();i=l.domElement.toDataURL("image/jpeg"),"quoteForm"===$(this).attr("name")?(r={firstname:$("#quoteForm input[name=firstname]").val(),lastname:$("#quoteForm input[name=lastname]").val(),title:$("#quoteForm input[name=title]").val(),company:$("#quoteForm input[name=company]").val(),email:$("#quoteForm input[name=email]").val(),phone:$("#quoteForm input[name=phone]").val(),organization:$("#quoteForm input[name=organization]").val(),title:$("#quoteForm input[name=title]").val(),address:$("#quoteForm input[name=address]").val(),address2:$("#quoteForm input[name=address2]").val(),city:$("#quoteForm input[name=city]").val(),state:$("#quoteForm input[name=state]").val(),zip:$("#quoteForm input[name=zip]").val(),notes:$("#quoteForm textarea[name=notes]").val(),action:$("#quoteForm input[name=action]").val()},a="Nice looking tower you have there! We have received your estimate request and one of our sales representatives will be in touch soon."):"shareForm"===$(this).attr("name")?(r={shareEmail:$("#shareForm input[name=shareEmail]").val(),firstname:$("#shareForm input[name=firstname]").val(),lastname:$("#shareForm input[name=lastname]").val(),email:$("#shareForm input[name=email]").val(),notes:$("#shareForm textarea[name=notes]").val(),action:$("#shareForm input[name=action]").val()},a="Check out that tower!
A link to view your creation has been shared."):"saveForm"===$(this).attr("name")&&(r={email:$("#saveForm input[name=email]").val(),notes:$("#saveForm textarea[name=notes]").val(),action:$("#saveForm input[name=action]").val()},a="Nice creation!
A link to this tower design has been emailed to you."),t.id=n,t.userData=r,t.towerData=m,t.image=i;var o=JSON.stringify(t);$.ajax({type:"POST",url:"save.php",data:o,dataType:"json",encode:!0}).done(function(e){if(!0===e.success)$("#successModal #successMessage").html(a),Y("#successModal");else{var o="";for(var t in e.errors)o=o+e.errors[t]+"
";$("p.error").html(o),$("p.error").slideUp(1),$("p.error").slideDown(500),$("p.error").delay(5e3).slideUp(1750)}})}})}),THREE.Object3D.prototype.GdeepCloneMaterials=function(){for(var e=this.clone(new THREE.Object3D,!1),o=0;o