1/* 2DO NOT TAKE A COPY OF THIS FILE! 3DO NOT COPY PARTS OF THIS FILE! 4THIS SCRIPT IS DYNAMICALLY GENERATED! 5*/ 6 7if(typeof AvvioWS == 'undefined') 8{ 9 var AvvioWS = {}; 10} 11 12/* CONFIG OPTIONS FROM OUTSIDE */ 13if ( ! AvvioWS.hasOwnProperty('debug') ) AvvioWS.debug = false; 14/* INTERNAL VALUES */ 15AvvioWS.languages = ["en"]; 16AvvioWS.lang = false 17AvvioWS.ref = (document.referrer) ? ('&r='+encodeURIComponent(document.referrer)) : ''; 18AvvioWS.loc = (document.URL) ? ('&l='+encodeURIComponent(document.URL)) : ''; 19AvvioWS.cachebuster = '&b=' + Math.round(Math.random() * 999999); 20AvvioWS.version = "&v=38985f9aa1ffcc5e4dd09353cf4ade75"; 21AvvioWS.appLocations = {"convert5":"https:\/\/secure.plazahotel.ie\/convert\/site\/The Plaza Hotel\/","crm":"https:\/\/secure.plazahotel.ie\/crm\/site\/The Plaza Hotel\/","vouchers5":"https:\/\/secure.plazahotel.ie\/vouchers\/site\/The Plaza Hotel\/"}; 22 23AvvioWS.getLanguage = function() { 24 if(this.lang != false) 25 return this.lang; 26 return this.languages[0]; 27}; 28 29AvvioWS.getAppBaseURL = function(appName) { 30 return AvvioWS.appLocations[appName] || null; 31}; 32 33AvvioWS.getGenericURL = function(appName, lang, extra, args={}) { 34 var url = AvvioWS.getAppBaseURL(appName); 35 if(url == null) 36 return null; 37 38 if(lang !== null) 39 { 40 if(AvvioWS.languages.indexOf(lang) > -1) 41 url += lang + '/'; 42 } 43 44 url += extra; 45 46 delete args.lang; 47 const u = new URLSearchParams(args).toString(); 48 49 if(u.length > 0) 50 url += '?' + u; 51 52 var sep = (url.indexOf('?') == -1) ? '?' : '&'; 53 url += sep + 'fw_notemplate=1'; 54 55 return url; 56}; 57 58AvvioWS.getGenericModalURL = function(appName, lang, extra, args={}) { 59 if(url = AvvioWS.getGenericURL(appName, lang, extra, args)) 60 return 'javascript:AvvioWS.openBookingEngine(\''+url+'\');'; 61 return null; 62}; 63 64(function() { 65 var event = new CustomEvent('avvioWSSLoaded'); 66 document.dispatchEvent(event); 67 68 var d = document.getElementsByClassName('allora-action'); 69 for(let i=0; i<d.length; i++) 70 { 71 var lang = d[i].getAttribute('data-allora-lang'); 72 var args = {} 73 try 74 { 75 args = JSON.parse(d[i].getAttribute('data-allora-args') || '{}'); 76 } 77 catch(error) 78 { 79 console.log('Invalid JSON in data-allora-args attribute'); 80 } 81 82 if(d[i].getAttribute('data-allora-action') == 'modal-index') 83 { 84 if(url = AvvioWS.getGenericModalURL('convert5', lang, 'index.html', args)) 85 d[i].setAttribute('href', url); 86 } 87 else if(d[i].getAttribute('data-allora-action') == 'modal-results') 88 { 89 if(url = AvvioWS.getGenericModalURL('convert5', lang, 'results.php', args)) 90 d[i].setAttribute('href', url); 91 } 92 else if(d[i].getAttribute('data-allora-action') == 'modal-room') 93 { 94 var roomID = d[i].getAttribute('data-allora-roomID'); 95 var requiredArgs = {viewtype:'roomrate', partya:0, roomcode:roomID}; 96 if((url = AvvioWS.getGenericModalURL('convert5', lang, 'results.php', {...requiredArgs, ...args})) && ! isNaN(roomID)) 97 d[i].setAttribute('href', url); 98 } 99 else if(d[i].getAttribute('data-allora-action') == 'modal-rate') 100 { 101 var rateID = d[i].getAttribute('data-allora-rateID'); 102 var requiredArgs = {partya:0, noerr:1}; 103 if((url = AvvioWS.getGenericModalURL('convert5', lang, 'rate/'+rateID+'.html', {...requiredArgs, ...args})) && ! isNaN(rateID)) 104 d[i].setAttribute('href', url); 105 } 106 else if(d[i].getAttribute('data-allora-action') == 'modal-rategroup') 107 { 108 var rateGroupID = d[i].getAttribute('data-allora-rateGroupID'); 109 if((url = AvvioWS.getGenericModalURL('convert5', lang, 'rate_group/'+rateGroupID+'.html', {...args})) && ! isNaN(rateGroupID)) 110 d[i].setAttribute('href', url); 111 } 112 else if(d[i].getAttribute('data-allora-action') == 'modal-roomgroup') 113 { 114 var roomGroupCode = d[i].getAttribute('data-allora-roomGroupCode'); 115 var requiredArgs = {viewtype:'roomrate', partya:0, roomgroup:roomGroupCode}; 116 if((url = AvvioWS.getGenericModalURL('convert5', lang, 'results.php', {...requiredArgs, ...args}))) 117 d[i].setAttribute('href', url); 118 } 119 else if(d[i].getAttribute('data-allora-action') == 'modal-vouchers') 120 { 121 if(url = AvvioWS.getGenericModalURL('vouchers5', lang, 'index.html', {...args})) 122 d[i].setAttribute('href', url); 123 } 124 } 125 126 var event = new CustomEvent('avvioWSSDocumentParsed'); 127 document.dispatchEvent(event); 128 129}()); 130 131AvvioWS.openBookingEngineIndex = function(args={}) { 132 if(url = AvvioWS.getGenericURL('convert5', args.lang||null, 'index.html', args)) 133 AvvioWS.openBookingEngine(url); 134}; 135 136AvvioWS.openBookingEngineResults = function(args={}) { 137 if(url = AvvioWS.getGenericURL('convert5', args.lang||null, 'results.html', args)) 138 AvvioWS.openBookingEngine(url); 139}; 140 141AvvioWS.openBookingEngineRoom = function(roomID, args={}) { 142 var requiredArgs = {viewtype:'roomrate', partya:0, roomcode:roomID}; 143 if(url = AvvioWS.getGenericURL('convert5', args.lang||null, 'results.php', {...requiredArgs, ...args})) 144 AvvioWS.openBookingEngine(url); 145}; 146 147AvvioWS.openBookingEngineRate = function(rateID, args={}) { 148 var requiredArgs = {partya:0, noerr:1}; 149 if(url = AvvioWS.getGenericURL('convert5', args.lang||null, 'rate/'+rateID+'.html', {...requiredArgs, ...args})) 150 AvvioWS.openBookingEngine(url); 151}; 152 153AvvioWS.openBookingEngineRateGroup = function(rateGroupID, args={}) { 154 if(url = AvvioWS.getGenericURL('convert5', args.lang||null, 'rate_group/'+rateGroupID+'.html', {...args})) 155 AvvioWS.openBookingEngine(url); 156}; 157 158AvvioWS.openBookingEngineRoomGroup = function(roomGroupCode, args={}) { 159 var requiredArgs = {viewtype:'roomrate', partya:0, roomgroup:roomGroupCode}; 160 if(url = AvvioWS.getGenericURL('convert5', args.lang||null, 'results.php', {...requiredArgs, ...args})) 161 AvvioWS.openBookingEngine(url); 162}; 163 164AvvioWS.openVoucherEngineIndex = function(args={}) { 165 if(url = AvvioWS.getGenericURL('vouchers5', args.lang||null, 'index.html', args)) 166 AvvioWS.openBookingEngine(url); 167}; 168 169AvvioWS.openVoucherBalanceChecker = function(args={}) { 170 if(url = AvvioWS.getGenericURL('vouchers5', args.lang||null, 'balance_login.html', args)) 171 AvvioWS.openBookingEngine(url); 172}; 173 174/* 175=================================================== 176AI Tracking 177*/ 178 179AvvioWS.deployAI = function() 180{ 181 var aiLocation= 'https://secure.plazahotel.ie/ai/rpc/The%20Plaza%20Hotel/image?el=NFf0efM2IJbMrG22M4J6IP_vRcdrv_qqRQC8JSPo_9E' + this.cachebuster + this.ref + this.loc; 182 const aiImg = document.createElement('img'); 183 aiImg.src = aiLocation; 184 aiImg.width = 1; 185 aiImg.height = 1; 186 aiImg.id = 'avvioAIImage'; 187 document.querySelector('body').appendChild(aiImg); 188};const modalStyle = document.createElement('style'); 189modalStyle.textContent = atob('OnJvb3R7IC0tYm9yZGVyLXJhZGl1cy0xeDogOHB4OyB9I2F2dmlvLWxvZGl2IHsgZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB6LWluZGV4OiAxMDI1MDAwO30jYXZ2aW8tbW9kYWwtZnJhbWV7IHotaW5kZXg6IDEyNTAwMDsgfSNhdnZpby1sb2Rpdi5hdnZpby1sb2FkZXI6Ym
189Vmb3JlIHsJcG9zaXRpb246IGFic29sdXRlOwl0b3A6IGNhbGMoNTAlIC0gMjRweCk7CWxlZnQ6IGNhbGMoNTAlIC0gMjRweCk7CWJvcmRlcjogOHB4IHNvbGlkICM4QzkxOTY7CWJvcmRlci1yYWRpdXM6IDUwJTsJYm9yZGVyLXRvcDogOHB4IHNvbGlkIHRyYW5zcGFyZW50Owl3aWR0aDogNDhweDsJaGVpZ2h0OiA0OHB4Owktd2Via2l0LWFuaW1hdGlvbjogc2hvdy1zcGlubmVyIDAuMnMsIHNwaW4gMXMgMC4ycyBsaW5lYXIgaW5maW5pdGU7CWFuaW1hdGlvbjogc2hvdy1zcGlubmVyIDAuMnMsIHNwaW4gMXMgMC4ycyBsaW5lYXIgaW5maW5pdGU7CWJveC1zaXppbmc6IGJvcmRlci1ib3g7IAljb250ZW50OiAiIjsJb3BhY2l0eTogLjg7fUAtd2Via2l0LWtleWZyYW1lcyBzcGluIHsJMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQkxMDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9fUBrZXlmcmFtZXMgc3BpbiB7CTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0JMTAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfX1ALXdlYmtpdC1rZXlmcmFtZXMgc2hvdy1zcGlubmVyIHsJZnJvbSB7IC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsgdHJhbnNmb3JtOiBzY2FsZSgwKTt9CXRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOyB0cmFuc2Zvcm06IHNjYWxlKDEpO319QGtleWZyYW1lcyBzaG93LXNwaW5uZXIgewlmcm9tIHt0cmFuc2Zvcm06IHNjYWxlKDApO30JdG8ge3RyYW5zZm9ybTogc2NhbGUoMSk7fX0='); 190document.head.appendChild(modalStyle); 191 192AvvioWS.deployModalFunctions = function() 193{ 194 const lodiv = document.createElement('div'); 195 lodiv.id = 'avvio-lodiv'; 196 lodiv.style.position = 'fixed'; 197 lodiv.style.left = 0; 198 lodiv.style.top = 0; 199 lodiv.style.height = '100dvh'; 200 lodiv.style.width = '100dvw'; 201 lodiv.style.zindex = '50000'; 202 lodiv.style.display = 'none'; 203 document.body.appendChild(lodiv); 204 AvvioWS.postToWidget = function(message) 205 { 206 var af = document.getElementById('avvio-frame'); 207 if(af !== null) 208 af.contentWindow.postMessage(message,'*'); 209 } 210 AvvioWS.closeModal = function () 211 { 212 // updating continue feed url without page reload. 213 AvvioWS.postToWidget({type:"updateContinueFeedLink"}); 214 215 document.getElementById('avvio-lodiv').classList.remove('avvio-loader'); 216 const element = document.getElementById('avvio-modal-frame'); 217 setTimeout(function(){ 218 if(element) 219 element.remove(); 220 document.getElementById('avvio-lodiv').style.display='none'; 221 //document.getElementById('avvio-frame').style.opacity = 1; 222 document.body.style.overflowY = AvvioWS.avvioReBodyOverflow; 223 //document.body.style.position = AvvioWS.avvioReBodyPosition; 224 document.body.style.width = AvvioWS.avvioReBodyWidth; 225 }, 200); 226 227 let modalWrapper = document.getElementById("avvioFakeModalWrapper"); 228 if(modalWrapper) 229 modalWrapper.style.display = "none"; 230 } 231 AvvioWS.openModal = function openModal(url, transparent, noLoader) 232 { 233 if( ! url) 234 return; 235 236 let lodiv = document.getElementById('avvio-lodiv'); 237 lodiv.style.display = 'flex'; 238 239 var mframe = document.createElement('iframe'); 240 mframe.id = 'avvio-modal-frame'; 241 mframe.setAttribute('frameborder',0); 242 mframe.setAttribute('allow','web-share'); 243 mframe.src = url; 244 mframe.style.height = '100dvh'; 245 mframe.style.width = '100dvw'; 246 247 if(transparent) 248 { 249 mframe.setAttribute("allowTransparency", true); 250 mframe.setAttribute("background", "transparent"); 251 mframe.visibility = "hidden"; 252 } 253 254 lodiv.appendChild(mframe); 255 256 AvvioWS.avvioReBodyOverflow = document.body.style.overflowY; 257 AvvioWS.avvioReBodyWidth = document.body.style.width; 258 259 document.body.style.overflowY = 'hidden'; 260 document.body.style.width = '100%'; 261 262 setTimeout(function () { 263 if ( ! noLoader) 264 lodiv.classList.add('avvio-loader'); 265 mframe.addEventListener('load', function () { 266 lodiv.classList.remove('avvio-loader'); 267 mframe.visibility = "visible"; 268 }, { 'once': true }); 269 }, 150); 270 }; 271 AvvioWS.openBookingEngine = function openBookingEngine(url) 272 { 273 let wrapper = document.getElementById("avvioFakeModalWrapper"); 274 const alignment = "avvio-modal-center"; 275 276 if( ! wrapper) 277 { 278 let fontAwesome = document.querySelector("#fa-v5-font-face"); 279 //console.log(fontAwesome); 280 281 wrapper = document.createElement("div"); 282 wrapper.id = "avvioFakeModalWrapper"; 283 wrapper.style.display = "none"; 284 285 let shadowRoot = wrapper.attachShadow({ mode: "open" }); 286 287 let frame = document.getElementById("avvio-lodiv"); 288 let frameZIndex = getComputedStyle(frame).zIndex; 289 290 const shadowHTML = document.createElement("html"); 291 shadowRoot.appendChild(shadowHTML); 292 293 const shadowHead = document.createElement("head"); 294 shadowHTML.appendChild(shadowHead); 295 296 let staticPath = "https://ag.avvio.com/crm/templates/ConsumerSide/StaticContent/mainbe/"; 297 298 // Firefox wants the weird double quote 299 let font = new FontFace("'Font Awesome 7 Pro'", "url(" + staticPath + "css/fontawesome7.2.0/webfonts/fa-regular-400.woff2) format('woff2')"); 300 document.fonts.add(font); 301 302 // Chrome doesn't like it 303 let font2 = new FontFace("Font Awesome 7 Pro", "url(" + staticPath + "css/fontawesome7.2.0/webfonts/fa-regular-400.woff2) format('woff2')"); 304 document.fonts.add(font2); 305 306 let cssFiles = [ 307 staticPath + "css/fontawesome7.2.0/css/all.min.css", 308 staticPath + "css/designsystem.css", 309 ]; 310 311 for(let file of cssFiles) 312 { 313 let shadowStyle = document.createElement("link"); 314 shadowStyle.setAttribute("rel", "stylesheet"); 315 shadowStyle.setAttribute("type", "text/css"); 316 shadowStyle.setAttribute("href", file) 317 shadowHead.appendChild(shadowStyle); 318 } 319 320 const shadowBody = document.createElement("body"); 321 shadowHTML.appendChild(shadowBody); 322 323 let modalbg = document.createElement("div"); 324 modalbg.setAttribute("id", "avvioFakeModal__background"); 325 modalbg.setAttribute("class", "avvio-modal__background"); 326 modalbg.style.zIndex = frameZIndex - 1; 327 328 let modal = document.createElement("div"); 329 modal.setAttribute("id", "avvioFakeModal"); 330 modal.setAttribute("class", "avvio-modal avvio-modal-center"); 331 shadowBody.appendChild(modalbg); 332 333 let header = document.createElement("div"); 334 header.setAttribute("class", "avvio-modal__header noheader"); 335 modal.appendChild(header); 336 337 let button = document.createElement("button"); 338 button.setAttribute("id", "avvioFakeModal__closeBtn"); 339 button.setAttribute("type", "button"); 340 button.setAttribute("class", "button-icon button-icon--plain closeModal closelink"); 341 header.appendChild(button); 342 343 let buttonIcon = document.createElement("i"); 344 buttonIcon.setAttribute("class", "button-icon__icon far fa-fw fa-times"); 345 buttonIcon.addEventListener("click", AvvioWS.closeModal); 346 button.appendChild(buttonIcon); 347 348 let content = document.createElement("div"); 349 content.setAttribute("class", "avvio-modal__content"); 350 modal.appendChild(content); 351 352 let mainScroll = document.createElement("div"); 353 mainScroll.setAttribute("class", "avvio-modal__main avvio-modal__main-scroll"); 354 content.appendChild(mainScroll); 355 356 let loader = document.createElement("div"); 357 loader.setAttribute("id", "loader"); 358 mainScroll.appendChild(loader); 359 360 let body = document.getElementsByTagName("body")[0]; 361 modalbg.appendChild(modal); 362 body.appendChild(wrapper); 363 364 window.addEventListener("message", function (event) { 365 if( ! event.data) 366 return; 367 368 if(event.data.type !== "resizeFake") 369 return; 370 371 modal.style.top = event.data.top + "px"; 372 modal.style.left = event.data.left + "px"; 373 modal.style.width = event.data.width + "px"; 374 modal.style.height = event.data.height + "px"; 375 //console.log(event.data); 376 // 377 modal.setAttribute("dir", event.data.rtl ? "rtl" : false); 378 }); 379 } 380 381 let modal = wrapper.shadowRoot.getElementById("avvioFakeModal"); 382 modal.style.top = ""; 383 modal.style.left = ""; 384 385 switch (alignment) { 386 case 'avvio-modal-left': 387 case 'avvio-modal-right': 388 modal.style.height = "100dvh"; 389 break; 390 391 default: 392 case 'avvio-modal-center': 393 modal.style.height = "735.2px"; 394 break; 395 } 396 397 AvvioWS.openModal(url, true); 398 }; 399 window.addEventListener('message', e => { 400 const key = e.message ? 'message' : 'data'; 401 const data = e[key]; 402 403 if(data.avvio && 'https://secure.plazahotel.ie/crm/site/The%20Plaza%20Hotel/'.
403indexOf(e.origin + '/') != 0) 404 { 405 console.log('Origin does not match location'); 406 // TODO KK this needs to be tested 407 // return; 408 } 409 410 if(data.type == 'openModal') { 411 AvvioWS.openModal(data.url); 412 } 413 else if(data.type == 'openBookingEngine') { 414 AvvioWS.openBookingEngine(data.url); 415 } 416 else if(data.type == 'closeModal') { 417 AvvioWS.closeModal(); 418 } 419 },false); 420 421 window.addEventListener('keydown', function(evt) { 422 evt = evt || window.event; 423 var isEscape = false; 424 if('key' in evt) 425 isEscape = (evt.key === 'Escape' || evt.key === 'Esc'); 426 else 427 isEscape = (evt.keyCode === 27); 428 429 if(isEscape) 430 AvvioWS.closeModal(); 431 }); 432}; /* semicolon not optional */ const style = document.createElement('style'); 433 style.textContent = atob('I2F2dmlvLWZyYW1lIHsgcG9zaXRpb246Zml4ZWQ7IGJvdHRvbTo1MHB4OyByaWdodDozMnB4OyBvcGFjaXR5OjA7IH0jYXZ2aW8tZnJhbWUgeyBoZWlnaHQ6IDEwMCU7IG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDI0MHB4KTsgfS5zbGlkZS1vdXQtYmx1cnJlZC1ib3R0b20uaGlkZVJlSWZyYW1lIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9LmZyYW1lLW1pbmltaXNlZCB7IG1heC13aWR0aDozMjBweDsgbWF4LWhlaWdodDoxMDZweDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMzIwcHg7IH0uZnJhbWUtbWF4aW1pc2VkIHsgd2lkdGg6NDgwcHg7IH0uZnJhbWUtc3VwZXItbWluaW1pc2VkIHsgd2lkdGg6NzZweDsgbWF4LXdpZHRoOjc2cHg7IGhlaWdodDo4MHB4OyBtYXgtaGVpZ2h0OjgwcHg7IH0vKi5mcmFtZS1oaWRkZW4geyBib3R0b206IC01NjAwcHggIWltcG9ydGFudDsgfSovI2F2dmlvLW1vZGFsLWZyYW1lIHsgbWF4LWhlaWdodDogMTAwJTsvKiA5NSU7ICovIH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjUxMnB4KSB7CSNhdnZpby1mcmFtZSB7IG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDUwcHgpOyB6LWluZGV4OiAxMDAwICFpbXBvcnRhbnQ7IH0JI2F2dmlvLWZyYW1lLmZyYW1lLW1heGltaXNlZCB7IHdpZHRoOiAxMDAlOyBtYXgtd2lkdGg6NDgwcHg7IGJvdHRvbTogMDsgfQkjYXZ2aW8tZnJhbWUgeyBwb3NpdGlvbjpmaXhlZDsgYm90dG9tOjEwMHB4OyByaWdodDowcHg7IG9wYWNpdHk6MDsgfQkjYXZ2aW8tbG9kaXYgeyBhbGlnbi1pdGVtczplbmQ7IH0JI2F2dmlvLWZyYW1lLmZyYW1lLW1heGltaXNlZCB7IGJvdHRvbTowcHg7IGxlZnQ6MHB4OyB9CSNhdnZpby1mcmFtZS5mcmFtZS1taW5pbWlzZWQgeyByaWdodDowcHg7IH19LnNsaWRlLWluLWJsdXJyZWQtYm90dG9tIHsJLXdlYmtpdC1hbmltYXRpb246IHNsaWRlLWluLWJsdXJyZWQtYm90dG9tIDAuNnMgY3ViaWMtYmV6aWVyKDAuMjMwLCAxLjAwMCwgMC4zMjAsIDEuMDAwKSBib3RoOyBhbmltYXRpb246IHNsaWRlLWluLWJsdXJyZWQtYm90dG9tIDAuNnMgY3ViaWMtYmV6aWVyKDAuMjMwLCAxLjAwMCwgMC4zMjAsIDEuMDAwKSBib3RoO31ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtaW4tYmx1cnJlZC1ib3R0b20gewkwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwJSkgc2NhbGUoMC45NSk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMCUpIHNjYWxlKDAuOTUpOyBvcGFjaXR5OiAwOyB9CTEwMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlWSgxKSBzY2FsZVgoMSk7IG9wYWNpdHk6IDAuOTk7IH19QGtleWZyYW1lcyBzbGlkZS1pbi1ibHVycmVkLWJvdHRvbSB7CTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAlKSBzY2FsZSgwLjk1KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwJSkgc2NhbGUoMC45NSk7IG9wYWNpdHk6IDA7IH0JMTAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGVZKDEpIHNjYWxlWCgxKTsgb3BhY2l0eTogMC45OTsgfX0uc2xpZGUtb3V0LWJsdXJyZWQtYm90dG9tIHsJLXdlYmtpdC1hbmltYXRpb246IHNsaWRlLW91dC1ibHVycmVkLWJvdHRvbSAwLjQ1cyBjdWJpYy1iZXppZXIoMC43NTUsIDAuMDUwLCAwLjg1NSwgMC4wNjApIGJvdGg7IGFuaW1hdGlvbjogc2xpZGUtb3V0LWJsdXJyZWQtYm90dG9tIDAuNDVzIGN1YmljLWJlemllcigwLjc1NSwgMC4wNTAsIDAuODU1LCAwLjA2MCkgYm90aDt9QC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlLW91dC1ibHVycmVkLWJvdHRvbSB7CTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfQkxMDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAlKSBzY2FsZSgwLjk1KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwJSkgc2NhbGUoMC45NSk7IG9wYWNpdHk6IDA7IH19QGtleWZyYW1lcyBzbGlkZS1vdXQtYmx1cnJlZC1ib3R0b20gewkwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7IG9wYWNpdHk6IDE7IH0JMTAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwJSkgc2NhbGUoMC45NSk7ICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAlKSBzY2FsZVkoMC45NSk7IG9wYWNpdHk6IDA7IH19'); 434 document.head.appendChild(style); 435 436 437 438 439AvvioWS.avvioReBodyOverflow = 0; 440//AvvioWS.avvioReBodyPosition = 0; 441AvvioWS.AvvioReBodyMargins = (parseInt(getComputedStyle(document.body).marginRight)) + (parseInt(getComputedStyle(document.body).marginLeft)); 442AvvioWS.avvioReBodyWidth = 'calc(100% - '+AvvioWS.AvvioReBodyMargins+'px)'; 443document.body.style.scrollbarGutter = 'stable'; 444 445var marginTopBottom; 446var ReApiObject; 447AvvioWS.deployRE = function() 448{ 449 var isWidgetVisible = true; 450 if(typeof avvioReWidget !== 'undefined' && avvioReWidget == false){ 451 isWidgetVisible = false;
452 console.log('Re Widget hidden.'); 453 } 454 455 var dims = getClientDimensions(); 456 if(dims.width > 512){ // Desktop 457 marginTopBottom = 240; 458 marginBottom = 50; 459 }else{ // Mobile 460 marginTopBottom = 50 461 marginBottom = 100 462 } 463 function getClientDimensions() 464 { 465 var w = document.documentElement.clientWidth; 466 var h = document.documentElement.clientHeight; 467 return {width:w, height:h}; 468 } 469 470 var hour = new Date().getHours(); 471 472 var dims = getClientDimensions(); 473 474 // collect feedViews 475 var feedViews = JSON.parse(localStorage.getItem('seenFeedsData')); 476 if(feedViews === null) 477 feedViews = []; 478 // clear localstorage 479 localStorage.removeItem('seenFeedsData'); 480 481 const iframe = document.createElement('iframe'); 482 iframe.id = 'avvio-frame'; 483 iframe.title = 'Recommender Engine'; 484 iframe.setAttribute('frameborder', 0); 485 iframe.setAttribute('taborder', 0); 486 iframe.src = 'https://secure.plazahotel.ie/crm/site/The%20Plaza%20Hotel/' + this.getLanguage()+'/frame.php?br=8&isWidgetVisible='+isWidgetVisible+'&hour='+hour + this.loc + this.ref + '&vh='+dims.height + '&vw='+dims.width + '&feedViews='+feedViews.join() + this.version; 487 iframe.style.height = '100dvh'; 488 489 iframe.width = 330; 490 iframe.style.zIndex = 25000; 491 iframe.scrolling = 'no'; 492 493 iframe.style.display = 'block'; 494 495 document.body.appendChild(iframe); 496 window.addEventListener('message', e => { 497 const key = e.message ? 'message' : 'data'; 498 const data = e[key]; 499 500 if(data.avvio && 'https://secure.plazahotel.ie/crm/site/The%20Plaza%20Hotel/'.indexOf(e.origin + '/') != 0) 501 { 502 console.log('Origin does not match location'); 503 return; 504 } 505 506 if(data.type == 'setIframe100') { 507 iframe.style.maxHeight = "calc(100% - "+marginTopBottom+"px)"; 508 iframe.classList.add('frame-maximised'); 509 iframe.classList.remove('frame-minimised','frame-super-minimised'); 510 } 511 else if(data.type == 'collapseFrame') { 512 iframe.classList.add('frame-minimised'); 513 iframe.classList.remove('frame-maximised','frame-super-minimsed'); 514 iframe.style.maxHeight = '106px'; //'auto'; 515 iframe.width = data.width; 516 //AvvioWS.closeModal(); 517 } 518 else if(data.type == 'minimiseBadge') { 519 iframe.style.maxHeight = '86px'; 520 iframe.width = '100px'; 521 iframe.classList.remove('frame-maximised','frame-minimised'); 522 iframe.classList.add('frame-super-minimised'); 523 } 524 else if(data.type == 'frameContentReady') { 525 if(isWidgetVisible) 526 document.getElementById('avvio-frame').style.opacity = 0.99; 527 iframe.width = data.width; 528 } 529 else if(data.type == 'removeIframe') { 530 document.getElementById('avvio-frame').style.display = 'none'; 531 } 532 else if(data.type == 'updateFrameHeight') { 533 iframe.style.maxHeight = 'min('+parseInt(data.height) + 'px, calc(100% - '+marginTopBottom+'px))'; 534 } 535 else if(data.type == 'updateLocalstorage') { 536 localStorage.setItem('seenFeedsData', JSON.stringify(data.feedViews)); 537 }else if(data.type == 'reApiObjectPass') { 538 ReApiObject = data.ReApiObject; 539 console.log(ReApiObject); 540 console.log("Document ready. ReApiObject loaded. Trying to run ReApiRun() JS function"); 541 if (typeof ReApiRun !== "undefined" && typeof ReApiRun === "function") { 542 ReApiRun(); 543 } 544 }else if(data.type == 'reWidgetRefresh') { 545 546 console.log("re widget refresh"); 547 iframe.src = iframe.src; 548 setTimeout(function(){ 549 AvvioWS.expandReWidget(); 550 }, 1000); 551 } 552 },false); 553 if( ! isWidgetVisible) 554 { 555 document.getElementById('avvio-frame').style.cssText += 'opacity: 0 !important;'; 556 setTimeout(function(){ 557 document.getElementById('avvio-frame').style.display = 'none'; 558 document.getElementById('avvio-frame').style.opacity = '0.99' 559 }, 1000); 560 } 561 // hiding widget when scroll 562 var lastScrollTop; 563 var reShown = true; 564 var resizeTimeout; 565 var hideReIframeTimer; 566 window.parent.document.addEventListener("scroll", function(){ 567 var st = window.pageYOffset || document.documentElement.scrollTop; 568 if (st > lastScrollTop && reShown) 569 { // move down 570 iframe.classList.remove('slide-in-blurred-bottom'); 571 iframe.classList.add('slide-out-blurred-bottom'); 572 reShown = false; 573 hideReIframeTimer = setTimeout(function(){ 574 iframe.classList.add('hideReIframe'); 575 }, 1000); 576 } 577 else if (st < lastScrollTop && ! reShown) 578 { // move up 579 clearTimeout(hideReIframeTimer); 580 iframe.classList.remove('hideReIframe'); 581 iframe.classList.remove('slide-out-blurred-bottom'); 582 iframe.classList.add('slide-in-blurred-bottom'); 583 reShown = true; 584 setTimeout(function(){ 585 iframe.classList.remove('slide-in-blurred-bottom'); 586 }, 300); 587 } 588 lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling 589 }, false); 590 591 window.addEventListener("resize", function() { 592 // added timeout to work with maximize button 593 clearTimeout(resizeTimeout); 594 resizeTimeout = setTimeout(function(){ 595 var dims = getClientDimensions(); 596 var iframe = document.getElementById('avvio-frame'); 597 598 if(dims.width > 512) // Desktop 599 { 600 marginTopBottom = 240; 601 }else{ // Mobile 602 marginTopBottom = 50 603 } 604 //const message = {type:"mainWindowHeight", height:dims.height, width:dims.width}; 605 //iframe.contentWindow.postMessage(message,'*'); 606 AvvioWS.postToWidget({type:"mainWindowHeight", height:dims.height, width:dims.width}); 607 }, 500); 608 }); 609 AvvioWS.expandReWidget = function(feedNumber = 'feedKey0'){ 610 if(document.getElementById('avvio-frame').style.display == 'none') 611 { 612 isWidgetVisible = true; 613 reShown = false;
614 document.getElementById('avvio-frame').style.display = 'block'; 615 //const message = {type:"forceExpand", feedNumber: feedNumber}; 616 //document.getElementById('avvio-frame').contentWindow.postMessage(message,'*'); 617 AvvioWS.postToWidget({type:"forceExpand", feedNumber: feedNumber}); 618 } 619 if( !reShown){ 620 clearTimeout(hideReIframeTimer); 621 iframe.classList.remove('hideReIframe'); 622 iframe.classList.remove('slide-out-blurred-bottom'); 623 iframe.classList.add('slide-in-blurred-bottom'); 624 reShown = true; 625 setTimeout(function(){ 626 iframe.classList.remove('slide-in-blurred-bottom'); 627 }, 300); 628 } 629 const message = {type:"expandWidget", feedNumber: feedNumber}; 630 document.getElementById('avvio-frame').contentWindow.postMessage(message,'*'); 631 } 632} 633 634AvvioWS.deployRequired=function() 635{ 636 if ( this.debug ) console.log("WSS:deployRequired" ); 637} 638 639AvvioWS.deployFunctional=function() 640{ 641 if ( this.debug ) console.log("WSS:deployFunctional" ); 642 643 if ( AvvioWS.hasOwnProperty('deployAI') ) AvvioWS.deployAI(); 644 if ( AvvioWS.hasOwnProperty('deployRE') ) AvvioWS.deployRE(); 645 //AvvioWS.deployModalFunctions(); 646} 647 648AvvioWS.deployStatistical=function() 649{ 650 if ( this.debug ) console.log("WSS:deployStatistical" ); 651 652 if ( AvvioWS.hasOwnProperty('deployCRM') ) AvvioWS.deployCRM(); 653} 654 655AvvioWS.deployMarketing=function() 656{ 657 if ( this.debug ) console.log("WSS:deployMarketing" ); 658} 659AvvioWS.deployModalFunctions(); 660 661/* 662=================================================== 663ACC 664*/ 665 666 667if ( typeof AvvioCC == 'undefined' ) 668{ 669 // if the parent did not define AvvioCC yet, then we just create one here 670 // and make sure ACC kicks off init straight away 671 var AvvioCC = {}; 672 673 // IMPORTANT: 674 // AvvioCC values (if any) need to be defined by parent page before WSS is loaded/executed! 675 AvvioCC.variablesAfterScript=false; 676} 677 678// IMPORTANT: 679// if ACC is loaded through WSS, then any avvio related scripts are controlled by the WSS 680// the parent page should not deploy avvio::crm or avvio:ai scripts 681// gtm should not deploy avvio:crm or avvio:ai scripts 682AvvioCC.userDeploysAvvio=true; 683 684AvvioWS.deployACC = function() 685{ 686 /* global code */ 687 var path="https://secure.plazahotel.ie/crm/rpc/The%20Plaza%20Hotel/ACC_js.php"; 688 689 if ( this.lang != false ) 690 path+='lang='+this.lang; 691 692 const script = document.createElement('script'); 693 script.src = "https://secure.plazahotel.ie/crm/rpc/The%20Plaza%20Hotel/ACC_js.php"; 694 document.querySelector('head').appendChild(script); 695} 696 697AvvioWS.deployACC();
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.