1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <title>Termorad</title> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6<!-- This site is hosted on Netlify. Anyone can build and deploy a site 7 like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=e23eadcd-bcdf-47c6-890a-96abe73480d4 8 Netlify hosting facts for this site: static/SSR served via Netlify Edge. --> 9 <meta name="viewport" id="metaViewport" content="user-scalable=no, initial-scale=1, width=device-width, viewport-fit=cover" data-tdv-general-scale="0.5"/> 10 <meta name="apple-mobile-web-app-capable" content="yes"/> 11 <meta name="apple-mobile-web-app-status-bar-style" content="default"> 12 <link rel="preload" href="locale/en.txt?v=1621429413729" as="fetch" crossorigin="anonymous"/> 13 <link rel="preload" href="script.js?v=1621429413729" as="script"/> 14 <link rel="preload" href="media/panorama_6600B914_6A6A_14CE_41D5_118FB7BB34D5_0/r/3/0_0.jpg?v=1621429413729" as="image"/> 15 <link rel="preload" href="media/panorama_6600B914_6A6A_14CE_41D5_118FB7BB34D5_0/l/3/0_0.jpg?v=1621429413729" as="image"/> 16 <link rel="preload" href="media/panorama_6600B914_6A6A_14CE_41D5_118FB7BB34D5_0/u/3/0_0.jpg?v=1621429413729" as="image"/> 17 <link rel="preload" href="media/panorama_6600B914_6A6A_14CE_41D5_118FB7BB34D5_0/d/3/0_0.jpg?v=1621429413729" as="image"/> 18 <link rel="preload" href="media/panorama_6600B914_6A6A_14CE_41D5_118FB7BB34D5_0/f/3/0_0.jpg?v=1621429413729" as="image"/> 19 <link rel="preload" href="media/panorama_6600B914_6A6A_14CE_41D5_118FB7BB34D5_0/b/3/0_0.jpg?v=1621429413729" as="image"/> 20 <meta name="description" content="Virtual Tour"/> 21 <meta name="theme-color" content="#FFFFFF"/> 22
22<script src="lib/tdvplayer.js?v=1621429413729"></script>
22 23
23<script src="script.js?v=1621429413729"></script>
23 24
24<script type="text/javascript"> 25 var tour; 26 var devicesUrl = {"mobile":"script_mobile.js?v=1621429413729","general":"script_general.js?v=1621429413729"}; 27 28 (function() 29 { 30 var deviceType = ['general']; 31 if(TDV.PlayerAPI.mobile) 32 deviceType.unshift('mobile'); 33 if(TDV.PlayerAPI.device == TDV.PlayerAPI.DEVICE_IPAD) 34 deviceType.unshift('ipad'); 35 var url; 36 for(var i=0; i<deviceType.length; ++i) { 37 var d = deviceType[i]; 38 if(d in devicesUrl) { 39 url = devicesUrl[d]; 40 break; 41 } 42 } 43 if(typeof url == "object") { 44 var orient = TDV.PlayerAPI.getOrientation(); 45 if(orient in url) { 46 url = url[orient]; 47 } 48 } 49 var link = document.createElement('link'); 50 link.rel = 'preload'; 51 link.href = url; 52 link.as = 'script'; 53 var el = document.getElementsByTagName('script')[0]; 54 el.parentNode.insertBefore(link, el); 55 })(); 56 57 function loadTour() 58 { 59 if(tour) return; 60 61 var settings = new TDV.PlayerSettings(); 62 settings.set(TDV.PlayerSettings.CONTAINER, document.getElementById('viewer')); 63 settings.set(TDV.PlayerSettings.WEBVR_POLYFILL_URL, 'lib/WebVRPolyfill.js?v=1621429413729'); 64 settings.set(TDV.PlayerSettings.HLS_URL, 'lib/Hls.js?v=1621429413729'); 65 settings.set(TDV.PlayerSettings.QUERY_STRING_PARAMETERS, 'v=1621429413729'); 66 67 tour = new TDV.Tour(settings, devicesUrl); 68 tour.bind(TDV.Tour.EVENT_TOUR_INITIALIZED, onVirtualTourInit); 69 tour.bind(TDV.Tour.EVENT_TOUR_LOADED, onVirtualTourLoaded); 70 tour.bind(TDV.Tour.EVENT_TOUR_ENDED, onVirtualTourEnded); 71 tour.load(); 72 } 73 74 function pauseTour() 75 { 76 if(!tour) 77 return; 78 79 tour.pause(); 80 } 81 82 function resumeTour() 83 { 84 if(!tour) 85 return; 86 87 tour.resume(); 88 } 89 90 function onVirtualTourInit() 91 { 92 var updateTexts = function() { 93 document.title = this.trans("tour.name") 94 }; 95 96 tour.locManager.bind(TDV.Tour.LocaleManager.EVENT_LOCALE_CHANGED, updateTexts.bind(tour.locManager)); 97 98 if (tour.player.cookiesEnabled) 99 enableCookies(); 100 else 101 tour.player.bind('enableCookies', enableCookies); 102 } 103 104 function onVirtualTourLoaded() 105 { 106 disposePreloader(); 107 } 108 109 function onVirtualTourEnded() 110 { 111 112 } 113 114 function enableCookies() 115 { 116 117 } 118 119 function setMediaByIndex(index) { 120 if(!tour) 121 return; 122 123 tour.setMediaByIndex(index); 124 } 125 126 function setMediaByName(name) 127 { 128 if(!tour) 129 return; 130 131 tour.setMediaByName(name); 132 } 133 134 function showPreloader() 135 { 136 var preloadContainer = document.getElementById('preloadContainer'); 137 if(preloadContainer != undefined) 138 preloadContainer.style.opacity = 1; 139 } 140 141 function disposePreloader() 142 { 143 var preloadContainer = document.getElementById('preloadContainer'); 144 if(preloadContainer == undefined) 145 return; 146 147 var transitionEndName = transitionEndEventName(); 148 if(transitionEndName) 149 { 150 preloadContainer.addEventListener(transitionEndName, hide, false); 151 preloadContainer.style.opacity = 0; 152 setTimeout(hide, 500); //Force hide. Some cases the transitionend event isn't dispatched with an iFrame. 153 } 154 else 155 { 156 hide(); 157 } 158 159 function hide() 160 { 161 162 preloadContainer.style.visibility = 'hidden'; 163 preloadContainer.style.display = 'none'; 164 var videoList = preloadContainer.getElementsByTagName("video"); 165 for(var i=0; i<videoList.length; ++i) 166 { 167 var video = videoList[i]; 168 video.pause(); 169 while (video.children.length) 170 video.removeChild(video.children[0]); 171 } 172 } 173 174 function transitionEndEventName () { 175 var el = document.createElement('div'); 176 var transitions = { 177 'transition':'transitionend', 178 'OTransition':'otransitionend', 179 'MozTransition':'transitionend', 180 'WebkitTransition':'webkitTransitionEnd' 181 }; 182 183 var t; 184 for (t in transitions) { 185 if (el.style[t] !== undefined) { 186 return transitions[t]; 187 } 188 } 189 190 return undefined; 191 } 192 } 193 194 function onBodyClick(){ 195 document.body.removeEventListener("click", onBodyClick); 196 document.body.removeEventListener("touchend", onBodyClick); 197 198 } 199 200 function onLoad() {
201 if (/AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent)) 202 { 203 var inIFrame = false; 204 try 205 { 206 inIFrame = (window.self !== window.top); 207 } 208 catch (e) 209 { 210 inIFrame = true; 211 } 212 if (!inIFrame) 213 { 214 var onResize = function(async) 215 { 216 [0, 250, 1000, 2000].forEach(function(delay) 217 { 218 setTimeout(function() 219 { 220 var viewer = document.querySelector('#viewer'); 221 var scale = window.innerWidth / document.documentElement.clientWidth; 222 var width = document.documentElement.clientWidth; 223 var height = Math.round(window.innerHeight / scale); 224 viewer.style.width = width + 'px'; 225 viewer.style.height = height + 'px'; 226 viewer.style.left = Math.round((window.innerWidth - width) * 0.5) + 'px'; 227 viewer.style.top = Math.round((window.innerHeight - height) * 0.5) + 'px'; 228 viewer.style.transform = 'scale(' + scale + ', ' + scale + ')'; 229 window.scrollTo(0,0); 230 }, delay); 231 }); 232 }; 233 var onTouchEnd = function() 234 { 235 document.body.removeEventListener("touchend", onTouchEnd); 236 clearInterval(resizeIntervalId); 237 onResize(); 238 if (/CriOS/.test(navigator.userAgent)) 239 setInterval(onResize, 4000); 240 }; 241 document.body.addEventListener("touchend", onTouchEnd); 242 var resizeIntervalId = setInterval(onResize, 300); 243 window.addEventListener('resize', onResize); 244 onResize(); 245 } 246 } 247 248 var params = getParams(location.search.substr(1)); 249 if(params.hasOwnProperty("skip-loading")) 250 { 251 loadTour(); 252 disposePreloader(); 253 return; 254 } 255 256 if (isOVRWeb()){ 257 showPreloader(); 258 loadTour(); 259 return; 260 } 261 262 showPreloader(); 263 loadTour(); 264 } 265 266 function playVideo(video) { 267 function isSafariDesktopV11orGreater() { 268 return /^((?!chrome|android|crios|ipad|iphone).)*safari/i.test(navigator.userAgent) && parseFloat(/Version\/([0-9]+\.[0-9]+)/i.exec(navigator.userAgent)[1]) >= 11; 269 } 270 271 function hasAudio (video) { 272 return video.mozHasAudio || 273 Boolean(video.webkitAudioDecodedByteCount) || 274 Boolean(video.audioTracks && video.audioTracks.length); 275 } 276 277 function detectUserAction() { 278 var onVideoClick = function(e) { 279 if(video.paused) { 280 video.play(); 281 } 282 video.muted = false; 283 if(hasAudio(video)) 284 { 285 e.stopPropagation(); 286 e.stopImmediatePropagation(); 287 e.preventDefault(); 288 } 289 290 video.removeEventListener('click', onVideoClick); 291 video.removeEventListener('touchend', onVideoClick); 292 }; 293 video.addEventListener("click", onVideoClick); 294 video.addEventListener("touchend", onVideoClick); 295 } 296 297 if (isSafariDesktopV11orGreater()) { 298 video.muted = true; 299 video.play(); 300 } else { 301 var canPlay = true; 302 var promise = video.play(); 303 if (promise) { 304 promise.catch(function() { 305 video.muted = true; 306 video.play(); 307 detectUserAction(); 308 }); 309 } else { 310 canPlay = false; 311 } 312 313 if (!canPlay || video.muted) { 314 detectUserAction(); 315 } 316 } 317 } 318 319 function isOVRWeb(){ 320 return window.location.hash.substring(1).split('&').indexOf('ovrweb') > -1; 321 } 322 323 function getParams(params) { 324 var queryDict = {}; params.split("&").forEach(function(item) {var k = item.split("=")[0], v = decodeURIComponent(item.split("=")[1]);queryDict[k.toLowerCase()] = v}); 325 return queryDict; 326 } 327 328 document.addEventListener('DOMContentLoaded', onLoad); 329 </script>
329 330 <style type="text/css"> 331 html, body { width: 100%; height: 100%; margin: 0; padding: 0; padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); } 332 333 #viewer { z-index:1; position:absolute; width: 100%; height: 100%; top: 0; } 334 #preloadContainer { z-index:2; position:relative; width:100%; height:100%; opacity:0; background-color:rgba(255,255,255,1); transition: opacity 0.5s; -webkit-transition: opacity 0.5s; -moz-transition: opacity 0.5s; -o-transition: opacity 0.5s;} 335 </style> 336 <link rel="stylesheet" href="fonts.css?v=1621429413729"> 337</head> 338<body> 339 <div id="preloadContainer"><div style="z-index: 4; position: absolute; background-image: url('loading/HTMLImage_65818801_4D3F_C1D0_41C2_61EBFDFE6978.gif'); background-size: contain; background-repeat: no-repeat; background-position: center center; overflow: hidden; right: 22.59%; bottom: 17.21%; width: 48.84%; height: 67.04%"></div><div style="z-index: 5; position: absolute; background-image: url('loading/HTMLImage_6A754024_57C4_4930_41C7_4AD4C1F4F032.png'); background-size: contain; background-repeat: no-repeat; background-position: center center; overflow: hidden; right: 32.6%; top: 27.59%; width: 29.37%; height: 7.60%"></div></div> 340 <div id="viewer"></div> 341</body> 342</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.