CINXE.COM
Kalgan Queen Scenic Cruises - Kalgan Queen Scenic Cruises Reservations
<!doctype html> <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--> <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]--> <head> <script type="text/javascript"> (function() { /** * @type {Object} */ var params = {}; params.currencyConversionEndpoint = "https://p6c3x5sxpa.execute-api.us-west-2.amazonaws.com/prod/convert"; params.localeDecimalSymbol = "."; params.currencyBase = "AUD"; params.targetCurrency = "AUD"; params.targetCurrencySymbol = "$"; params.currencyMessage = "Estimated conversion from {amount}"; params.lang = ""; /** * @namespace rezdy */ window.rezdy = {}; window.rezdy.params = params; })(); </script> <!-- Smart Polyfill service, detects user agent and replies with only missing features. Modern chrome gets an empty response, IE8 gets everything --> <script crossorigin="anonymous" src="https://cdnjs.cloudflare.com/polyfill/v2/polyfill.js?features=default,NodeList.prototype.forEach,Intl.~locale.en,Intl.~locale.fr,Intl.~locale.es,Intl.~locale.pt,Intl.~locale.de,Intl.~locale.it,Intl.~locale.zh,Intl.~locale.sv,Intl.~locale.nb,Intl.~locale.ru,Intl.~locale.da,Intl.~locale.ja,Intl.~locale.jo,Intl.~locale.ro,Intl.~locale.tr,Intl.~locale.fi,Intl.~locale.sk"></script> <!-- Smart Gtag Script --> <script> // Use the function currying pattern to either call gtag directly // or proxy the call to the parent page if in an iframe window.smartGtag = function() { const urlParams = new URLSearchParams(window.location.search); if (window.parent !== window.self) { return function(event, gtagEventType, payload) { console.debug("Received GTAG event from a widget ", event, gtagEventType, payload); // Some code in pluginJS listens to these events and proxys // them to gtag(); window.parent.postMessage( { type: "gtagEvent", gtagEventType, payload }, "*" // Allow all origin URLs. We don't know what the URL of the customer's website will be ); }; } else { return function(event, gtagEventType, payload) { console.debug("Received GTAG event from the booking form ", event, gtagEventType, payload); return gtag(event, gtagEventType, payload); }; } }; </script> <!-- Meta tags --> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={xpid:"UQEGWFVVGwAHVVhSBQE=",licenseKey:"fac5ff6a9a",applicationID:"3719020"};;/*! For license information please see nr-loader-full-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>d});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function d(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>h,gD:()=>p,xN:()=>g});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const d="[data-nr-mask]",u=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(d):""===t||null===t?e.mask_selector=d:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function h(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function g(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,u());const r=(0,s.nY)(e);r&&(r.init=l[e])}function p(e,t){if(!e)throw new Error(f);var r=h(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},5603:(e,t,r)=>{"use strict";r.d(t,{a:()=>c,o:()=>s});var n=r(384),i=r(8122);const o={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},a={};function s(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!a[e])throw new Error("LoaderConfig for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.loader_config=a[e])}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},d={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},u={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!u[e])throw new Error("Runtime for ".concat(e," was never set"));return u[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");u[e]={...(0,n.a)(t,d),...c},Object.hasOwnProperty.call(u[e],"harvestCount")||Object.defineProperty(u[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=u[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,Yq:()=>a,xv:()=>n});const n="1.274.0",i="PROD",o="CDN",a="^2.0.0-alpha.17"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>d,RI:()=>i,WN:()=>f,bv:()=>o,gm:()=>a,lR:()=>l,m:()=>c,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)()},7295:(e,t,r)=>{"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>o});var n=[];function i(e){if(!e||o(e))return!1;if(0===n.length)return!0;for(var t=0;t<n.length;t++){var r=n[t];if("*"===r.hostname)return!1;if(s(r.hostname,e.hostname)&&c(r.pathname,e.pathname))return!1}return!0}function o(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let o,a;i>0?(o=r.substring(0,i),a=r.substring(i)):(o=r,a="");let[s]=o.split(":");n.push({hostname:s,pathname:a})}}function s(e,t){return!(e.length>t.length)&&t.indexOf(e)===t.length-e.length}function c(e,t){return 0===e.indexOf("/")&&(e=e.substring(1)),0===t.indexOf("/")&&(t=t.substring(1)),""===e||e===t}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>d});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};u(e),s[e].get(t)||s[e].set(t,r)}function d(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),h(e,t,!1),s[e].size&&f(e))}function u(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(u(e),!e||!s[e].get(t)||r)return h(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),h(e,t)})))}function h(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)g(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function g(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>d});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),d=function e(t,r){var n={},s={},u={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:g,addEventListener:g,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(d.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=h(n),c=p(e),u=c.length,l=0;l<u;l++)c[l].apply(a,r);var g=v()[s[e]];g&&g.push([f,e,r,a]);return a},get:m,listeners:p,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function g(e,t){n[e]=p(e).concat(t)}function p(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),u=(0,n.Zm)();u.ee||(u.ee=d)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,ZF:()=>c,bz:()=>a,el:()=>d});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}function c(){return s(16)}function d(){return s(32)}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>d,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},d={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},7485:(e,t,r)=>{"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},3304:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(7836);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>u,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>d,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function d(e){let t=a();return t.initializedAgents?.[e]}function u(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},8139:(e,t,r)=>{"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),o=r(8990),a=r(6154);const s={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e){var t=function(e){return(e||n.ee).get("events")}(e);if(s[t.debugId]++)return t;s[t.debugId]=1;var r=(0,i.YM)(t,!0);function f(e){r.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,f),h(a.gm,f),h(c.prototype,f)),t.on(d+"-start",(function(e,t){var n=e[1];if(null!==n&&("function"==typeof n||"object"==typeof n)){var i=(0,o.I)(n,l,(function(){var e={object:function(){if("function"!=typeof n.handleEvent)return;return n.handleEvent.apply(n,arguments)},function:n}[typeof n];return e?r(e,"fn-",null,e.name||"anonymous"):n}));this.wrapped=e[1]=i}})),t.on(u+"-start",(function(e){e[1]=this.wrapped||e[1]})),t}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434:(e,t,r)=>{"use strict";r.d(t,{YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],d=e[c];u(d)||(e[c]=r(d,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return u(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){d([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,u,l;try{a=this,o=[...arguments],u="function"==typeof n?n(o,a):n||{}}catch(t){d([t,"",[o,a,s],u],e)}i(r+"start",[o,a,s],u,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],u,c),e}finally{i(r+"end",[o,a,l],u,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){d([t,r,n,i],e)}s=a}}}function d(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function u(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},9300:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.ajax},3333:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,Zp:()=>i,mq:()=>s,nf:()=>a,qN:()=>o});const n=r(860).K7.genericEvents,i=["auxclick","click","copy","keydown","paste","scrollend"],o=["focus","blur"],a=4,s=1e3},6774:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.jserrors},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,TZ:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log",a=n.K7.logging},3785:(e,t,r)=>{"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),o=r(860),a=r(3969),s=r(993);function c(e,t,r={},c=s.p_.INFO){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,o.K7.metrics,e),(0,n.p)(s.ET,[(0,i.t)(),t,r,c],void 0,o.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(s.p_).some((t=>t===e.toUpperCase().trim()))}},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{BB:()=>u,G4:()=>o,Qb:()=>l,TZ:()=>i,Ug:()=>a,_s:()=>s,bc:()=>d,yP:()=>c});var n=r(2614);const i=r(860).K7.sessionReplay,o={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"},a=.12,s={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0},d={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},u=5e3,l={API:"api"}},5270:(e,t,r)=>{"use strict";r.d(t,{Aw:()=>c,CT:()=>d,SR:()=>s});var n=r(384),i=r(9417),o=r(7767),a=r(6154);function s(e){return!!(0,n.dV)().o.MO&&(0,o.V)(e)&&!0===(0,i.gD)(e,"session_trace.enabled")}function c(e){return!0===(0,i.gD)(e,"session_replay.preload")&&s(e)}function d(e,t){const r=t.correctAbsoluteTimestamp(e);return{originalTimestamp:e,correctedTimestamp:r,timestampDiff:e-r,originTime:a.WN,correctedOriginTime:t.correctedOriginTime,originTimeDiff:Math.floor(a.WN-t.correctedOriginTime)}}},3738:(e,t,r)=>{"use strict";r.d(t,{He:()=>i,Kp:()=>s,Lc:()=>d,Rz:()=>u,TZ:()=>n,bD:()=>o,d3:()=>a,jx:()=>l,uP:()=>c});const n=r(860).K7.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,d="fn"+s,u="pushState",l=1e3},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7767:(e,t,r)=>{"use strict";r.d(t,{V:()=>o});var n=r(9417),i=r(6154);const o=e=>i.RI&&!0===(0,n.gD)(e,"privacy.cookies_enabled")},425:(e,t,r)=>{"use strict";r.d(t,{j:()=>P});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),d=r(5289),u=r(6154),l=r(944),f=r(3969),h=r(384),g=r(6344);const p=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",g.G4.RECORD,g.G4.PAUSE,"log","wrapLogger"],m=["setErrorHandler","finished","addToTrace","addRelease"];var v=r(1863),b=r(2614),y=r(993),R=r(3785),x=r(2646),w=r(3434);function T(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,w.YM)(i),a=new x.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function A(){const e=(0,h.pV)();p.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const E={};var S=r(9417),_=r(5603),O=r(5284);const N=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let I=!1;function P(e,t={},p,x){let{init:w,info:P,loader_config:j,runtime:C={},exposed:k=!0}=t;C.loaderType=p;const H=(0,h.pV)();P||(w=H.init,P=H.info,j=H.loader_config),(0,S.xN)(e.agentIdentifier,w||{}),(0,_.a)(e.agentIdentifier,j||{}),P.jsAttributes??={},u.bv&&(P.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,P);const D=(0,S.D0)(e.agentIdentifier),L=[P.beacon,P.errorBeacon];I||(D.proxy.assets&&(N(D.proxy.assets),L.push(D.proxy.assets)),D.proxy.beacon&&L.push(D.proxy.beacon),A(),(0,h.US)("activatedFeatures",O.B),e.runSoftNavOverSpa&&=!0===D.soft_navigations.enabled&&D.feature_flags.includes("soft_nav")),C.denyList=[...D.ajax.deny_list||[],...D.ajax.block_internal?L:[]],C.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,C),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=function(e,t,h=!1){t||(0,c.Ak)(e,"api");const p={};var x=s.ee.get(e),w=x.get("tracer");E[e]=b.g.OFF,x.on(g.G4.REPLAY_RUNNING,(t=>{E[e]=t}));var A="api-",S=A+"ixn-";function _(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),I(A,n,!0,o||null===r?"session":void 0)(t,r)}function O(){}p.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,x),(0,R.R)(x,e,t,r)},p.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,x),T(x,e,t,{customAttributes:r,level:i})},m.forEach((e=>{p[e]=I(A,e,!0,"api")})),p.addPageAction=I(A,"addPageAction",!0,n.K7.genericEvents),p.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,I(A,"setPageViewName",!0)()},p.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return _(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},p.setUserId=function(e){if("string"==typeof e||null===e)return _("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},p.setApplicationVersion=function(e){if("string"==typeof e||null===e)return _("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},p.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,x),x.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},p[g.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,x),(0,a.p)(g.G4.RECORD,[],void 0,n.K7.sessionReplay,x)},p[g.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,x),(0,a.p)(g.G4.PAUSE,[],void 0,n.K7.sessionReplay,x)},p.interaction=function(e){return(new O).get("object"==typeof e?e:{})};const N=O.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,x),h||(0,a.p)(S+"tracer",[(0,v.t)(),e,r],i,n.K7.spa,x),function(){if(w.emit((o?"":"no-")+"fn-start",[(0,v.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw w.emit("fn-err",[arguments,this,t],r),t}finally{w.emit("fn-end",[(0,v.t)()],r)}}}};function I(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,x),i&&(0,a.p)(e+t,[(0,v.t)(),...arguments],r?null:this,i,x),r?void 0:this}}function P(){r.e(891).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),x.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{N[e]=I(S,e,void 0,h?n.K7.softNav:n.K7.spa)})),p.setCurrentRouteName=h?I(S,"routeName",void 0,n.K7.softNav):I(A,"routeName",!0,n.K7.spa),p.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,x),(0,a.p)("err",[t,(0,v.t)(),!1,r,!!E[e]],void 0,n.K7.jserrors,x)},u.RI?(0,d.GG)((()=>P()),!0):P(),p}(e.agentIdentifier,x,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=k),I=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>({95:"nr-full-compressor",222:"nr-full-recorder",891:"nr-full"}[e]+"-1.274.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var d=document.getElementsByTagName("script"),u=0;u<d.length;u++){var l=d[u];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={891:"sha512-Sx2xJQrHp2m/Ngn/ZcfBCUwNr2Xy/C5urYtWpfm3bWpil4spXOQGTtNwIfF5HvPGioGASn9QTyE4Z+zC7r7wcg==",222:"sha512-hMte3OWgwwYeisSiD7WCIx/6tT16zLaPjag9uF4tIZp7ybOvrJKbeyzhe4fz1tDbkdcdOMm8dvgPPLBatSAGeA==",95:"sha512-MPaT9dkHv16XzwEUVZPyqpN1do/Er1XFAZoIAPYWylmv+iGIThqN+GwQq27pUyAX7sNXVJQVZezH96p53Ks3Pg=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var h=(t,n)=>{s.onerror=s.onload=null,clearTimeout(g);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},g=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={959:0,85:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,d=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);d<a.length;d++)o=a[d],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function d(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var u=i(425);var l=i(1687),f=i(4234),h=i(5289),g=i(6154),p=i(5270),m=i(7767),v=i(6389);class b extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,v.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if((0,m.V)(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(891).then(i.bind(i,6526));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(891).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(891).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};g.RI?(0,h.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return(0,p.SR)(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var y=i(6630);class R extends b{static featureName=y.T;constructor(e,t=!0){super(e,y.T,t),this.importAggregator(e)}}var x=i(384);var w=i(9908),T=i(2843),A=i(3878),E=i(782),S=i(1863);class _ extends b{static featureName=E.T;constructor(e,t=!0){super(e,E.T,t),g.RI&&((0,T.u)((()=>(0,w.p)("docHidden",[(0,S.t)()],void 0,E.T,this.ee)),!0),(0,A.sp)("pagehide",(()=>(0,w.p)("winPagehide",[(0,S.t)()],void 0,E.T,this.ee))),this.importAggregator(e))}}var O=i(3969);class N extends b{static featureName=O.TZ;constructor(e,t=!0){super(e,O.TZ,t),this.importAggregator(e)}}var I=i(6774),P=i(3304);class j{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,P.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function C(e){return D(e)?e:new j(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic)}function k(e){const t="Unhandled Promise Rejection";if(!e?.reason)return;if(D(e.reason))try{return e.reason.message=t+": "+e.reason.message,C(e.reason)}catch(t){return C(e.reason)}const r=C(e.reason);return r.message=t+": "+r?.message,r}function H(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new j(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic);return t.name=SyntaxError.name,t}return D(e.error)?e.error:C(e)}function D(e){return e instanceof Error&&!!e.stack}class L extends b{static featureName=I.T;#r=!1;constructor(e,r=!0){super(e,I.T,r);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(e=>{this.abortHandler&&(0,w.p)("ierr",[C(e),(0,S.t)(),!0,{},this.#r],void 0,this.featureName,this.ee)})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.#r=e})),g.gm.addEventListener("unhandledrejection",(e=>{this.abortHandler&&(0,w.p)("err",[k(e),(0,S.t)(),!1,{unhandledPromiseRejection:1},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",(e=>{this.abortHandler&&(0,w.p)("err",[H(e),(0,S.t)(),!1,{},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e)}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var K=i(8990);let M=1;const U="nr@id";function V(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,K.I)(e,U,(function(){return M++}))}function G(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,P.A)(e).length}catch(e){return}}}var F=i(8139),B=i(7836),W=i(3434);const z={},q=["open","send"];function Z(t){var r=t||B.ee;const n=function(e){return(e||B.ee).get("xhr")}(r);if(z[n.debugId]++)return n;z[n.debugId]=1,(0,F.u)(r);var i=(0,W.YM)(n),o=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,s=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],l=[],f=g.gm.XMLHttpRequest=function(t){const r=new o(t),a=n.context(r);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(s=a,function(){var e=this;e.readyState>3&&!s.resolved&&(s.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",y)}),(0,A.jT)(!1))}catch(t){(0,e.R)(15,t);try{n.emit("internal-error",[t])}catch(e){}}var s;return r};function h(e,t){i.inPlace(t,["onreadystatechange"],"fn-",y)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,f),f.prototype=o.prototype,i.inPlace(f.prototype,q,"-xhr-",y),n.on("send-xhr-start",(function(e,t){h(e,t),function(e){l.push(e),a&&(p?p.then(b):c?c(b):(m=-m,v.data=m))}(t)})),n.on("open-xhr-start",h),a){var p=s&&s.resolve();if(!c&&!s){var m=1,v=document.createTextNode(m);new a(b).observe(v,{characterData:!0})}}else r.on("fn-end",(function(e){e[0]&&e[0].type===d||b()}));function b(){for(var e=0;e<l.length;e++)h(0,l[e]);l.length&&(l=[])}function y(e,t){return t}return n}var Y="fetch-",X=Y+"body-",Q=["arrayBuffer","blob","json","text","formData"],J=g.gm.Request,ee=g.gm.Response,te="prototype";const re={};function ne(e){const t=function(e){return(e||B.ee).get("fetch")}(e);if(!(J&&ee&&g.gm.fetch))return t;if(re[t.debugId]++)return t;function r(e,r,n){var i=e[r];"function"==typeof i&&(e[r]=function(){var e,r=[...arguments],o={};t.emit(n+"before-start",[r],o),o[B.P]&&o[B.P].dt&&(e=o[B.P].dt);var a=i.apply(this,r);return t.emit(n+"start",[r,e],a),a.then((function(e){return t.emit(n+"end",[null,e],a),e}),(function(e){throw t.emit(n+"end",[e],a),e}))})}return re[t.debugId]=1,Q.forEach((e=>{r(J[te],e,X),r(ee[te],e,X)})),r(g.gm,"fetch",Y),t.on(Y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(Y+"done",[null,r],n)}else t.emit(Y+"done",[e],n)})),t}var ie=i(7485),oe=i(5603);class ae{constructor(e){this.agentIdentifier=e}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var t=(0,oe.o)(this.agentIdentifier);if(!t)return null;var n=(t.accountID||"").toString()||null,i=(t.agentID||"").toString()||null,o=(t.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,r.ZF)(),s=(0,r.el)(),c=Date.now(),d={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(d.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),d.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(d.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),d}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,P.A)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1,r={};if((0,s.gD)(this.agentIdentifier,"distributed_tracing")&&(r=(0,s.D0)(this.agentIdentifier).distributed_tracing),e.sameOrigin)t=!0;else if(r.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,ie.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}isDtEnabled(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.enabled}excludeNewrelicHeader(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.cors_use_tracecontext_headers}}var se=i(9300),ce=i(7295),de=["load","error","abort","timeout"],ue=de.length,le=(0,x.dV)().o.REQ,fe=(0,x.dV)().o.XHR;class he extends b{static featureName=se.T;constructor(e,t=!0){super(e,se.T,t),this.dt=new ae(e.agentIdentifier),this.handler=(e,t,r,n)=>(0,w.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach((t=>{if(t.initiatorType in e&&0!==t.responseStatus){const r={status:t.responseStatus},n={rxSize:t.transferSize,duration:Math.floor(t.duration),cbTime:0};ge(r,t.name),this.handler("xhr",[r,n,t.startTime,t.responseEnd,e[t.initiatorType]],void 0,a.K7.ajax)}}))}catch(e){}ne(this.ee),Z(this.ee),function(e,t,r,n){function i(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=x,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){T(t,e)}),(0,A.jT)(!1)),g.lR||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,A.jT)(!1))}function o(e){this.params={method:e[0]},ge(this,e[1]),this.metrics={}}function s(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var i=n.generateTracePayload(this.parsedOrigin);if(i){var o=!1;i.newrelicHeader&&(r.setRequestHeader("newrelic",i.newrelicHeader),o=!0),i.traceContextParentHeader&&(r.setRequestHeader("traceparent",i.traceContextParentHeader),i.traceContextStateHeader&&r.setRequestHeader("tracestate",i.traceContextStateHeader),o=!0),o&&(this.dt=i)}}function c(e,r){var n=this.metrics,i=e[0],o=this;if(n&&i){var a=G(i);a&&(n.txSize=a)}this.startTime=(0,S.t)(),this.body=i,this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof r.onload)&&"function"==typeof o.end)&&o.end(r)}catch(e){try{t.emit("internal-error",[e])}catch(e){}}};for(var s=0;s<ue;s++)r.addEventListener(de[s],this.listener,(0,A.jT)(!1))}function d(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function u(e,t){var r=""+V(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function l(e,t){var r=""+V(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function f(){this.endTime=(0,S.t)()}function h(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-added",[e[1],e[2]],r)}function p(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-removed",[e[1],e[2]],r)}function m(e,t,r){t instanceof fe&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,S.t)()))}function v(e,r){this.xhrCbStart&&t.emit("xhr-cb-time",[(0,S.t)()-this.xhrCbStart,this.onload,r],r)}function b(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,ie.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var i=n.generateTracePayload(this.parsedOrigin);if(i&&(i.newrelicHeader||i.traceContextParentHeader))if(e[0]&&e[0].headers)s(e[0].headers,i)&&(this.dt=i);else{var o={};for(var a in r)o[a]=r[a];o.headers=new Headers(r.headers||{}),s(o.headers,i)&&(this.dt=i),e.length>1?e[1]=o:e.push(o)}}function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function y(e,t){this.params={},this.metrics={},this.startTime=(0,S.t)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof le?r=i.url:g.gm?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),ge(this,r);var o=(""+(i&&i instanceof le&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.body=n.body,this.txSize=G(n.body)||0}function R(e,t){if(this.endTime=(0,S.t)(),this.params||(this.params={}),(0,ce.iW)(this.params))return;let n;this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);const i={txSize:this.txSize,rxSize:n,duration:(0,S.t)()-this.startTime};r("xhr",[this.params,i,this.startTime,this.endTime,"fetch"],this,a.K7.ajax)}function x(e){const t=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(let t=0;t<ue;t++)e.removeEventListener(de[t],this.listener,!1);t.aborted||(0,ce.iW)(t)||(n.duration=(0,S.t)()-this.startTime,this.loadCazptureCalled||4!==e.readyState?null==t.status&&(t.status=0):T(this,e),n.cbTime=this.cbTime,r("xhr",[t,n,this.startTime,this.endTime,"xhr"],this,a.K7.ajax))}}function T(e,r){e.params.status=r.status;var n=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?G(e.response):"text"===r||""===r||void 0===r?G(e.responseText):void 0}(r,e.lastSize);if(n&&(e.metrics.rxSize=n),e.sameOrigin){var i=r.getResponseHeader("X-NewRelic-App-Data");i&&((0,w.p)(O.rs,["Ajax/CrossApplicationTracing/Header/Seen"],void 0,a.K7.metrics,t),e.params.cat=i.split(", ").pop())}e.loadCaptureCalled=!0}t.on("new-xhr",i),t.on("open-xhr-start",o),t.on("open-xhr-end",s),t.on("send-xhr-start",c),t.on("xhr-cb-time",d),t.on("xhr-load-added",u),t.on("xhr-load-removed",l),t.on("xhr-resolved",f),t.on("addEventListener-end",h),t.on("removeEventListener-end",p),t.on("fn-end",v),t.on("fetch-before-start",b),t.on("fetch-start",y),t.on("fn-start",m),t.on("fetch-done",R)}(e,this.ee,this.handler,this.dt),this.importAggregator(e)}}function ge(e,t){var r=(0,ie.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}const pe={},me=["pushState","replaceState"];function ve(e){const t=function(e){return(e||B.ee).get("history")}(e);return!g.RI||pe[t.debugId]++||(pe[t.debugId]=1,(0,W.YM)(t).inPlace(window.history,me,"-")),t}var be=i(3738);const{He:ye,bD:Re,d3:xe,Kp:we,TZ:Te,Lc:Ae,uP:Ee,Rz:Se}=be;class _e extends b{static featureName=Te;constructor(e,t=!0){super(e,Te,t);if(!(0,m.V)(this.agentIdentifier))return void this.deregisterDrain();const r=this.ee;let n;ve(r),this.eventsEE=(0,F.u)(r),this.eventsEE.on(Ee,(function(e,t){this.bstStart=(0,S.t)()})),this.eventsEE.on(Ae,(function(e,t){(0,w.p)("bst",[e[0],t,this.bstStart,(0,S.t)()],void 0,a.K7.sessionTrace,r)})),r.on(Se+xe,(function(e){this.time=(0,S.t)(),this.startPath=location.pathname+location.hash})),r.on(Se+we,(function(e){(0,w.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,a.K7.sessionTrace,r)}));try{n=new PerformanceObserver((e=>{const t=e.getEntries();(0,w.p)(ye,[t],void 0,a.K7.sessionTrace,r)})),n.observe({type:Re,buffered:!0})}catch(e){}this.importAggregator(e,{resourceObserver:n})}}var Oe=i(2614);class Ne extends b{static featureName=t.TZ;#i;#o;constructor(e,r=!0){let n;super(e,t.TZ,r),this.replayRunning=!1,this.#o=e;try{n=JSON.parse(localStorage.getItem("".concat(Oe.H3,"_").concat(Oe.uh)))}catch(e){}(0,p.SR)(e.agentIdentifier)&&this.ee.on(t.G4.RECORD,(()=>this.#a())),this.#s(n)?(this.#i=n?.sessionReplayMode,this.#c()):this.importAggregator(e),this.ee.on("err",(e=>{this.replayRunning&&(this.errorNoticed=!0,(0,w.p)(t.G4.ERROR_DURING_REPLAY,[e],void 0,this.featureName,this.ee))})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.replayRunning=e}))}#s(e){return e&&(e.sessionReplayMode===Oe.g.FULL||e.sessionReplayMode===Oe.g.ERROR)||(0,p.Aw)(this.agentIdentifier)}#d=!1;async#c(e){if(!this.#d){this.#d=!0;try{const{Recorder:t}=await Promise.all([i.e(891),i.e(222)]).then(i.bind(i,8589));this.recorder??=new t({mode:this.#i,agentIdentifier:this.agentIdentifier,trigger:e,ee:this.ee}),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording}catch(e){}this.importAggregator(this.#o,{recorder:this.recorder,errorNoticed:this.errorNoticed})}}#a(){this.featAggregate?this.featAggregate.mode!==Oe.g.FULL&&this.featAggregate.initializeRecording(Oe.g.FULL,!0):(this.#i=Oe.g.FULL,this.#c(t.Qb.API),this.recorder&&this.recorder.parent.mode!==Oe.g.FULL&&(this.recorder.parent.mode=Oe.g.FULL,this.recorder.stopRecording(),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording))}}var Ie=i(3333);class Pe extends b{static featureName=Ie.TZ;constructor(e,t=!0){super(e,Ie.TZ,t);const r=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.user_actions.enabled];g.RI&&e.init.user_actions.enabled&&(Ie.Zp.forEach((e=>(0,A.sp)(e,(e=>(0,w.p)("ua",[e],void 0,this.featureName,this.ee)),!0))),Ie.qN.forEach((e=>(0,A.sp)(e,(e=>(0,w.p)("ua",[e],void 0,this.featureName,this.ee)))))),r.some((e=>e))?this.importAggregator(e):this.deregisterDrain()}}var je=i(993),Ce=i(3785);class ke extends b{static featureName=je.TZ;constructor(e,t=!0){super(e,je.TZ,t);const r=this.ee;this.ee.on("wrap-logger-end",(function([e]){const{level:t,customAttributes:n}=this;(0,Ce.R)(r,e,n,t)})),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),g.gm?(this.features={},(0,x.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(R),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,u.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=d(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,x.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[R,_,_e,Ne,he,N,L,Pe,ke],loaderType:"pro"})})()})();</script> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="robots" content="index,follow" /> <meta name="keywords" content="rezdy, booking, tours, activity, hotel, hotels, reservations,booking engine for tour, booking engine, online reservation system, distribution system, booking engine for attraction, online reservation for sightseeing, online reservation for attractions, reservation system, booking engine for sightseeing, booking engine for activity" /> <meta name="description" content="Rezdy Online Booking" /> <meta content="width=device-width, initial-scale=1.0" name="viewport"> <link rel="apple-touch-icon" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/images/app-icons/apple-touch-icon.png"> <link rel="apple-touch-icon-precomposed" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/images/app-icons/apple-touch-icon-precomposed.png"> <!-- Title --> <link rel="stylesheet" type="text/css" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/css/jquery-ui/jquery-ui.min.css" /> <link rel="stylesheet" type="text/css" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/fancybox/jquery.fancybox.css" /> <link rel="stylesheet" type="text/css" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/css/bootstrap.css" /> <link rel="stylesheet" type="text/css" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/css/bootstrap-responsive.css" /> <link rel="stylesheet" type="text/css" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/css/jquery-ui/jquery-ui-bs.css" /> <link rel="stylesheet" type="text/css" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/css/_styles.css?cache=1732661802" /> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/jquery/1.7.2/jquery.min.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/jquery-ui/1.9.2/jquery-ui.min.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/assets/7b957b77/jquery.cookie.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/assets/7b957b77/jquery.yii.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/assets/7b957b77/jquery.yiiactiveform.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/fancybox/jquery.fancybox.pack.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/timepicker/jquery-ui-timepicker-addon.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/pickups.js?cache=1725425537"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/modernizr-2.5.3-respond-1.1.0.min.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/bootstrap.min.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/_core.js?cache=1725425537"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/bootstrap-tabdrop.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/slick/slick.min.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/slick-lightbox.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/ofi.browser.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/moment.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/pickups.js"></script> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/rezdy-header.js"></script> <title>Kalgan Queen Scenic Cruises - Kalgan Queen Scenic Cruises Reservations</title> <script> window.canUseStorage = function _canUseStorage(storageType) { var canUseStorage = false; var defaultStorage = 'localStorage'; try { if (storageType !== undefined && window[storageType] !== undefined) { storage = window[storageType]; } else { storage = window[defaultStorage]; } storage.setItem('foo', 'foo'); storage.removeItem('foo'); canUseStorage = true; } catch (e) { canUseStorage = false; } return canUseStorage; }; </script> <!-- Alternate stylesheets/themes --> <style id="custom-color"> :root { --border-color: rgba(152,163,148,0.5); --hover-color: rgba(152,163,148,0.1); --background-primary: rgba(232, 199, 33, 1); --background-primary-hover: rgba(232, 199, 33, 0.75); --theme-color: rgba(173, 45, 60, 1); --theme-color-hover: rgba(173, 45, 60, 0.75); --text-primary: rgba(0, 0, 0, 1); --text-primary-hover: rgba(0, 0, 0, 0.75); --text-active: rgba(255, 255, 255, 1); --text-active-hover: rgba(255, 255, 255, 0.75); } </style> <!--[if lt IE 9]> <link rel="stylesheet" type="text/css" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/css/ie8.css" /> <![endif]--> <!--[if IE 7]> <link rel="stylesheet" type="text/css" href="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/css/ie7.css" /> <![endif]--> <script async src="https://www.googletagmanager.com/gtag/js"></script> </head> <!-- add margin to body when rezdy header is applied --> <body class="has-header"><script type="text/javascript" src="/themes/rezdy-booking/js/rate-exchange.js?cache=c1ce3ac06739b9d6f9a3d78aa88043b1"></script> <!--[if lt IE 7]> <p class=chromeframe>Your browser is <em>a-n-c-i-e-n-t!</em> <a href="http://browsehappy.com/">Upgrade to a different browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to experience this site.</p> <![endif]--> <div class="container"> <!-- Main content --> <div class="wrap r4"> <header class="active" id="rz-header"> <div class="container"> <div class="company-logo" > <h1><a href="/index">Kalgan Queen Scenic Cruises</a></h1> </div> <div class="menus"> <ul class="cart hover-menu"> <li> <a class="current"> <span class="cart-label rezdy-icon-shopping-cart"></span> <span class="cart-total">0</span></a> <ul class="subnav"> <li class="left"> <p class="text-center" style="margin: 30px 0">There are currently no items in your cart.</p> <a class="btn btn-inverse btn-submit button-booking rezdy-modal" href="/index">Continue Shopping</a> </li> </ul> </li> </ul> <ul class="share hover-menu"> <li> <a class="current"><span class="rezdy-icon-share-2"></span></a> <ul class="subnav" dropdown-menu "> <li class="left"> <a class="title">Share</a> <a target="_blank" title="Share on Facebook" class="social-links--link facebook-link" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fkalganqueen.rezdy.com%2F285161%2Fkalgan-queen-scenic-cruises">Facebook</a> <a target="_blank" title="Share on Pinterest" class="social-links--link pinterest-link" href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fkalganqueen.rezdy.com%2F285161%2Fkalgan-queen-scenic-cruises">Pinterest</a> <a target="_blank" title="Share on Twitter" class="social-links--link twitter-link" href="https://twitter.com/home?status=https%3A%2F%2Fkalganqueen.rezdy.com%2F285161%2Fkalgan-queen-scenic-cruises">Twitter</a> <a target="_blank" title="Share on Linked In" class="social-links--link linked_in-link" href="https://www.linkedin.com/shareArticle?url=https%3A%2F%2Fkalganqueen.rezdy.com%2F285161%2Fkalgan-queen-scenic-cruises">Linked In</a> </li> </ul> </li> </ul> <ul class="language-currency hover-menu"> <li> <a class="current"> <span class="language-name">English</span> <span class="currency-name">AUD</span> </a> <ul class="subnav"> <li class="left"> <a class="title">Language</a> <a data-title="English" data-title-code="EN"href="/285161/kalgan-queen-scenic-cruises?lang=en">English</a><a data-title="Français" data-title-code="FR"href="/285161/kalgan-queen-scenic-cruises?lang=fr">Français</a><a data-title="Español" data-title-code="ES"href="/285161/kalgan-queen-scenic-cruises?lang=es">Español</a><a data-title="Português" data-title-code="PT"href="/285161/kalgan-queen-scenic-cruises?lang=pt">Português</a><a data-title="Deutsch" data-title-code="DE"href="/285161/kalgan-queen-scenic-cruises?lang=de">Deutsch</a><a data-title="Italiano" data-title-code="IT"href="/285161/kalgan-queen-scenic-cruises?lang=it">Italiano</a><a data-title="中文" data-title-code="ZH"href="/285161/kalgan-queen-scenic-cruises?lang=zh">中文</a><a data-title="Svenska" data-title-code="SV"href="/285161/kalgan-queen-scenic-cruises?lang=sv">Svenska</a><a data-title="Norsk bokmål" data-title-code="NB"href="/285161/kalgan-queen-scenic-cruises?lang=nb">Norsk bokmål</a><a data-title="русский" data-title-code="RU"href="/285161/kalgan-queen-scenic-cruises?lang=ru">русский</a><a data-title="Dansk" data-title-code="DA"href="/285161/kalgan-queen-scenic-cruises?lang=da">Dansk</a><a data-title="日本語" data-title-code="JA"href="/285161/kalgan-queen-scenic-cruises?lang=ja">日本語</a><a data-title="한국어" data-title-code="KO"href="/285161/kalgan-queen-scenic-cruises?lang=ko">한국어</a><a data-title="Română" data-title-code="RO"href="/285161/kalgan-queen-scenic-cruises?lang=ro">Română</a><a data-title="Türkçe" data-title-code="TR"href="/285161/kalgan-queen-scenic-cruises?lang=tr">Türkçe</a><a data-title="Suomi" data-title-code="FI"href="/285161/kalgan-queen-scenic-cruises?lang=fi">Suomi</a><a data-title="Slovenčina" data-title-code="SK"href="/285161/kalgan-queen-scenic-cruises?lang=sk">Slovenčina</a> </li> <li class="right"> <a class="title">Currency</a> <a data-title="AUD" href="/285161/kalgan-queen-scenic-cruises?currency=AUD">AUD</a><a data-title="USD" href="/285161/kalgan-queen-scenic-cruises?currency=USD">USD</a><a data-title="GBP" href="/285161/kalgan-queen-scenic-cruises?currency=GBP">GBP</a><a data-title="EUR" href="/285161/kalgan-queen-scenic-cruises?currency=EUR">EUR</a><a data-title="CAD" href="/285161/kalgan-queen-scenic-cruises?currency=CAD">CAD</a><a data-title="NZD" href="/285161/kalgan-queen-scenic-cruises?currency=NZD">NZD</a><a data-title="SGD" href="/285161/kalgan-queen-scenic-cruises?currency=SGD">SGD</a><a data-title="HKD" href="/285161/kalgan-queen-scenic-cruises?currency=HKD">HKD</a><a data-title="SEK" href="/285161/kalgan-queen-scenic-cruises?currency=SEK">SEK</a><a data-title="NOK" href="/285161/kalgan-queen-scenic-cruises?currency=NOK">NOK</a><a data-title="DKK" href="/285161/kalgan-queen-scenic-cruises?currency=DKK">DKK</a><a data-title="JPY" href="/285161/kalgan-queen-scenic-cruises?currency=JPY">JPY</a><a data-title="XPF" href="/285161/kalgan-queen-scenic-cruises?currency=XPF">XPF</a> </li> </ul> </li> </ul> </div> <div id="close-button" style="display:none"> <a href="" id="close-rezdy-hosted">×</a> </div> </div> </header> <!-- If they have chosen a banner to go with the header --> <!-- Should only be displayed in the booking form, not in a modal or an iframe --> <div class="container"> <div class="hero-unit r0 rezdy-header-banner"> <a href="/index"><img src="https://img.rezdy.com/DESIGN_BASIC/149444/kq_lg.jpg" alt="" /></a> </div> </div> <div class="row nav-top-bar"> <div class="span6"> <div class="container-pad"> <div class="breadcrumbs"> <a href="/index" > Products </a> </div> </div> </div> <div class="span6"> </div> </div> <!-- Content --> <div class="row product-details-wrap"> <!-- Main column --> <div class="span8"> <div class="product-details main-content"> <div class="product-overview clearfix"> <!-- Name --> <h1>Kalgan Queen Scenic Cruises</h1> <div class="product-main-image product-img-lightbox has-carousel"> <figure><img data-img="https://img.rezdy.com/PRODUCT_IMAGE/149444/albany_boat_tours.JPG" class="OF -cover" src="https://img.rezdy.com/PRODUCT_IMAGE/149444/albany_boat_tours_lg.JPG" alt="Kalgan Queen Scenic Cruises" /></figure> <div class="product-img-carousel"> <figure> <img class="OF-cover" data-img="https://img.rezdy.com/PRODUCT_IMAGE/149444/03_albany_australia_pelican_lg.JPG" src="https://img.rezdy.com/PRODUCT_IMAGE/149444/03_albany_australia_pelican_med.JPG" /> </figure> <figure> <img class="OF-cover" data-img="https://img.rezdy.com/PRODUCT_IMAGE/149444/26_kalgan_queen_kite_lg.JPG" src="https://img.rezdy.com/PRODUCT_IMAGE/149444/26_kalgan_queen_kite_med.JPG" /> </figure> <figure> <img class="OF-cover" data-img="https://img.rezdy.com/PRODUCT_IMAGE/149444/34_skippy_and_Joey_3_lg.jpg" src="https://img.rezdy.com/PRODUCT_IMAGE/149444/34_skippy_and_Joey_3_med.jpg" /> </figure> <figure> <img class="OF-cover" data-img="https://img.rezdy.com/PRODUCT_IMAGE/149444/percey_p_lg.JPG" src="https://img.rezdy.com/PRODUCT_IMAGE/149444/percey_p_med.JPG" /> </figure> </div> </div> <!-- Price --> <div class="products-price"> <!-- Gift card product is a fixed price, no need to show 'from' --> <span class="from price-from-label"> From <span class="price-label">AUD</span> </span> <span class="price" data-currency-base="AUD" data-original-amount="$115.00">$115.00 </span> </div> <ul class="unstyled"> <!-- Duration --> <!-- Do not show duration for ANY or LIST duration types --> <li> <strong>Duration:</strong> 4 Hours (approx.) </li> <!-- Location --> <li> <strong>Location</strong>: Albany , Wa </li> <!-- Code --> <li> <strong>Product code:</strong> KQSC </li> </ul> </div> <!-- Description --> <div class="product-description"> <br><p>Departs 9am daily from Emu Point Boat Pens .Rated Number one Outdoor activity in Albany and Tourism Award Winner. Cruise the sheltered waters of Oyster Harbour and ancient Kalgan River, believed to be the oldest continually flowing river in the world. History, Wildlife, Bush Poetry, live commentary - FUN- . Like a journey through time you will take the path of the First Settlers as they discovered the natural and stunning beauty of "The New World" - 36K of Glass Bottom viewing, History, Bird Life, Bush Poetry and Wildflowers Billy Tea, Coffee and Captain Kalgan's famous Hot Savoury Damper. All aboard Albany's world unique" Kalgan Queen Riverboat"- Bringing you closer to nature.You will experience the true beauty of this unspoiled area at the same time as enjoying what is truly a memory for life!<br><br></p><p>Please arrive 15 minutes before tour starts.</p><br> </div> </div> </div> <!-- =Main column --> <!-- Side column --> <div class="span4"> <div class="side-column r4" id="rezdy-booking-form-KQSC"> <h3>Start Booking Now</h3> <!-- Datepicker Ref --> <!-- Widget: Jquery plugin http://api.jqueryui.com/datepicker/ --> <div class="in calendar-widget"> <div class="no-cookies"> <p>Please enable cookies in your browser to place a booking <br/><br/> <a href="http://www.whatarecookies.com/enable.asp" target="_blank">how do I enable cookies?</a> </p> </div> <form target="_top" class="form has-validation form-horizontal product-PBXHE0" novalidate="novalidate" id="order-item-form" action="/285161/kalgan-queen-scenic-cruises" method="post"> <input type="hidden" value="TmdwZkhZWlN4S3NyT2RZQUpLNVdMYXk5VzdOeUZkaTl4pBLu7e-9c8QU9x2a96PPW8SzBEz5QJ2riZtehNowTQ==" name="YII_CSRF_TOKEN" /> <div id="order-item-form_es_" class="errorSummary" style="display:none"> <ul><li>dummy</li></ul></div> <!-- INVENTORY PRODUCT --> <!-- NO AVAILABILITY FOUND --> <div class='availability-container' data-inventory-mode="SESSION_SEATS"> <!-- TRANSFER AND SHUTTLE PRODUCTS --> <input name="OrderItem[preferredDate]" id="OrderItem_preferredDate" type="hidden" value="2024-11-30" /> <input name="OrderItem[minDate]" id="OrderItem_minDate" type="hidden" value="2024-11-30" /> <div class="errorMessage" id="OrderItem_preferredDate_em_" style="display:none"></div> <input value="285161" name="OrderItem[product][id]" id="OrderItem_product_id" type="hidden" /> <script> $.fn.convertToInput = function (element) { var attributes = element.prop('attributes'); var events = jQuery._data(element[0], 'events'); var newInput = $('<input type=\'number\' data-min="0" data-max="9999" value=\'0\'>'); newInput.on('input.range', function(event) { var min = parseInt($(this).attr('data-min'), 10); var max = parseInt($(this).attr('data-max'), 10); if (event.target.value < min) { event.target.value = min; $(this).trigger('change'); } else if (event.target.value > max) { event.target.value = max; $(this).trigger('change'); } }); element.replaceWith(newInput); if (typeof attributes !== 'undefined' && attributes.length) { $.each(attributes, function () { newInput.attr(this.name, this.value); }); } if (typeof events !== 'undefined' ){ Object.values(events).forEach(v => { if (v[0].namespace === '') newInput.on(v[0].type, v[0].handler); else newInput.on(v[0].type + '.' + v[0].namespace, v[0].handler); }); } }; // Check if opting 'Add more' option. $(document).on('change.js.input', '.input-quantities-list', function () { if ($(this).val() == 'more') { $.fn.convertToInput($(this)); } }); // Prevent 'Enter' key from the PriceOption to prevent a form submission $(document).on('keypress', '.input-quantities-list', function (e) { if (e.keyCode == 13) { // Prevent to submit the form e.preventDefault(); // Trigger blur event $(this).trigger('blur'); } }); //Edge case where input quantity cannot be initialized properly (min required qty > 20). $(function() { var $qtySelectors = $('.input-quantities-list'); var $options = $qtySelectors.find('option'); if ($qtySelectors.length == 1 && $options.length == 1 && $options.first().val() == 'more') { $.fn.convertToInput($($qtySelectors[0])); } }); </script> <!-- Participants --> <div class="participants" data-unit-label="Participants"> <h4>Enter Number of Participants <em class='required'>*</em></h4><input name="OrderItem[minQuantityOverride]" id="OrderItem_minQuantityOverride" type="hidden" /><input name="OrderItem[maxQuantityOverride]" id="OrderItem_maxQuantityOverride" type="hidden" /><div class="control-group"><input name="ItemQuantity[285161][0][priceOption][id]" id="ItemQuantity_285161_0_priceOption_id" type="hidden" value="28890337" /><label class="control-label" for="28890337">Adult<span class="price-unit"><span class="price-from-label">From </span><span class="price-standard update-price-value price" data-currency-base="AUD" data-original-amount="$115.00">$115.00</span></span></label><div class="change-quantity controls price-shown"><select data-product-id="285161" data-price-type="ADULT" data-price="115.0" data-return-price="0" data-price-label="Adult" data-initial-value="1" data-price-id="28890337" class="input-quantities-list update-datepicker" width="50" style="width:50px" name="ItemQuantity[285161][0][quantity]" id="ItemQuantity_285161_0_quantity"> <option value="0">0</option> <option value="1" selected="selected">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> </select></div></div><div class="control-group"><input name="ItemQuantity[285161][1][priceOption][id]" id="ItemQuantity_285161_1_priceOption_id" type="hidden" value="28890338" /><label class="control-label" for="28890338">Senior<span class="price-unit"><span class="price-from-label">From </span><span class="price-standard update-price-value price" data-currency-base="AUD" data-original-amount="$105.00">$105.00</span></span></label><div class="change-quantity controls price-shown"><select data-product-id="285161" data-price-type="SENIOR" data-price="105.0" data-return-price="0" data-price-label="Senior" data-initial-value="0" data-price-id="28890338" class="input-quantities-list update-datepicker" width="50" style="width:50px" name="ItemQuantity[285161][1][quantity]" id="ItemQuantity_285161_1_quantity"> <option value="0" selected="selected">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> </select></div></div><div class="control-group"><input name="ItemQuantity[285161][2][priceOption][id]" id="ItemQuantity_285161_2_priceOption_id" type="hidden" value="28890339" /><label class="control-label" for="28890339">Child<span class="price-unit"><span class="price-from-label">From </span><span class="price-standard update-price-value price" data-currency-base="AUD" data-original-amount="$80.00">$80.00</span></span></label><div class="change-quantity controls price-shown"><select data-product-id="285161" data-price-type="CHILD" data-price="80.0" data-return-price="0" data-price-label="Child" data-initial-value="0" data-price-id="28890339" class="input-quantities-list update-datepicker" width="50" style="width:50px" name="ItemQuantity[285161][2][quantity]" id="ItemQuantity_285161_2_quantity"> <option value="0" selected="selected">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> </select></div></div><div class="control-group"><input name="ItemQuantity[285161][3][priceOption][id]" id="ItemQuantity_285161_3_priceOption_id" type="hidden" value="28890340" /><label class="control-label" for="28890340">2 Adults + 2 Children<span class="price-unit"><span class="price-from-label">From </span><span class="price-standard update-price-value price" data-currency-base="AUD" data-original-amount="$315.00">$315.00</span></span></label><div class="change-quantity controls price-shown"><select data-product-id="285161" data-price-type="TWO_ADULTS_2_CHILDREN" data-price="315.0" data-return-price="0" data-price-label="2 Adults + 2 Children" data-initial-value="0" data-price-id="28890340" class="input-quantities-list update-datepicker" width="50" style="width:50px" name="ItemQuantity[285161][3][quantity]" id="ItemQuantity_285161_3_quantity"> <option value="0" selected="selected">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> </select></div></div> </div> <input name="OrderItem[selectedSessionId]" id="OrderItem_selectedSessionId" type="hidden" /> <!-- Availability Picker --> <h4>Choose a Date <em class="required">*</em></h4> <div class="datepicker-container"> <div class="availabilitypicker notranslate" data-product-id="285161" data-initial-selected-date="" data-alt-field="#OrderItem_preferredDate" data-updatepicker="1"></div> </div> <!-- Book Now button --> <div class="control-group"> <div class="session-container clearfix hide"> <h4>Choose a Time <em class='required'>*</em></h4> </div> <div class="total-price"> </div> </div> <div class='book-now-container'> <a class="btn btn-primary btn-inverse btn-submit btn-lg booknow-button" data-product-code="PBXHE0" data-modal-supported="1" target="_top" href="#" id="yt0">Book Now</a> </div> </div> <!-- ANY DATE PRODUCTS (INCLUDING FIXEDTIME, ANYTIME and NOTIME) --> <!-- Rental product can not be sold as a gift --> <div class="clearfix"></div> </form> <div class="note show-if-availability"> <strong>Please note:</strong> After your purchase is confirmed we will email you a confirmation. </div> </div> </div> <div class="side-column r4 map"> <iframe width="100%" height="200px" frameborder="0" style="border:0" src="https://www.google.com/maps/embed/v1/place?key=AIzaSyBLV7vJMoEkfetjyA2m7i9IxJjovP5c4R0&q=-34.9935135,117.9430556¢er=-34.9935135,117.9430556&zoom=15&language=en" allowfullscreen></iframe> </div> <div class="side-column r4 contact-us"> <!-- Contact us --> <a class="btn-contactus fancycontact fancybox.ajax" href="/contact?modal=1">Contact us</a> </div> </div> </div> <div class="footnote"> <p><span class="credit"><a target="_blank" href="https://www.rezdy.com/booking-software-for-cruises/?utm_campaign=landing-page-redirect&utm_medium=referral&utm_source=bottom-booking-form&utm_content=Cruises">Booking Software for Cruises </a> by Rezdy.com | </span><span class="login-link"><a target="_top" href="http://s.rezdy.net/1Lx4eZS">Agent login</a></span></p> </div> </div> <!-- =Wrap --> </div> <!-- =container --> <script type="text/javascript" src="//static.rezdy-production.com/f238edad5eca373b3d412e5273f27cd86d9cfbd91361/themes/rezdy-booking/js/libs/css-var-polyfill.js"></script> <script type="text/javascript"> /*<![CDATA[*/ if (window.createTracker) createTracker(); if (window.trackTransaction) trackTransaction(); $(function() { if (typeof newrelic == 'object') { var addNewRelicAttributes = function _addNewRelicAttributes(attributes) { return $.extend(true, {}, attributes, {"companyName":"Kalgan Queen Scenic Cruises","chargifySubscriptionState":"ACTIVE","isSupplier":true,"lifecycleStage":"CUSTOMER","countryCode":"au","locale":"en_au","timezone":"Australia\/Sydney","currency":"AUD","nextBillingDate":"2024-12-02T01:50:23Z","plan":"FOUNDATION","companyId":"149444","companyAlias":"kalganqueen","bookingFormTheme":"rezdy-checkout","addressIp":"8.222.208.146"}); }; var getCssPath = function _getCssPath(element) { var elements = $.makeArray($(element).parents()); elements.splice(0, 0, element); return $.map(elements, function(elt) { return elt.className; }).reverse().join(",").trim(); }; $(document.body).on('click', 'input', function (event) { var cssPath = getCssPath(this); var inputText = this.name; var inputType = this.tagName; if (inputText.length > 0) { newrelic.addPageAction('bookInput', addNewRelicAttributes({ result: inputText, type: inputType, class: cssPath })); } }); //Links labels and submit clicks $(document.body).on('click', ':submit,a,label', function (event) { var cssPath = getCssPath(this); var linkText = this.innerText; var linkType = this.tagName; newrelic.addPageAction('bookLink', addNewRelicAttributes({ result: linkText, type: linkType, class: cssPath })); }); // Selected option value $(document.body).on('change', 'select', function (event) { var cssPath = getCssPath(this); var selectText = $(this).find("option:selected").text(); newrelic.addPageAction('bookSelect', addNewRelicAttributes({ result: selectText, class: cssPath })); }); //New currency / language selector (should be combined in one smart func) $(document.body).on('click', '.subnav .left a', function(event) { var language = $(this).attr('data-title'); $('.language-currency hover-menu .current .language').html( language ); }); $(document.body).on('click', '.subnav .right a', function(event) { var currency = $(this).attr('data-title'); $('.language-currency hover-menu .current .currency').html( currency ); }); //show error message on load $(window).on('load', function() { var errorText = $('.errorSummary ul li').text(); var dummyText = 'dummy'; if (errorText != dummyText) { newrelic.addPageAction('bookError', addNewRelicAttributes({ result: errorText })); } }); //show flash error message on load $(window).on('load', function() { var flashError = $('.alert-error').text(); newrelic.addPageAction('bookErrorMessage', addNewRelicAttributes({ result: flashError })); }); window.onerror = function(msg, url, line, col, error) { newrelic.addPageAction('jsError', addNewRelicAttributes({ message: msg, url: url, line: line, column: col || '', error: error || '' })); return false; }; //bogus iframe integration $(window).on('load', function (event) { //it will only send en event if it's embedded inside an iframe and there is no iframe query parameter //either ?iframe=1 or ?iframe=true or &iframe=1 or &iframe=true var iFrameRegExp = new RegExp('(?:\\?|\\&)iframe=(?:1|true)', 'i'); if ((window != window.top) && (!iFrameRegExp.test(window.location.href))) { newrelic.addPageAction('bookWrongIntegration', addNewRelicAttributes({})); } }); } }); <!-- Snowplow starts plowing --> ;(function(p,l,o,w,i,n,g){if(!p[i]){p.GlobalSnowplowNamespace=p.GlobalSnowplowNamespace||[]; p.GlobalSnowplowNamespace.push(i);p[i]=function(){(p[i].q=p[i].q||[]).push(arguments) };p[i].q=p[i].q||[];n=l.createElement(o);g=l.getElementsByTagName(o)[0];n.async=1; n.src=w;g.parentNode.insertBefore(n,g)}}(window,document,"script","//cdn.jsdelivr.net/gh/snowplow/sp-js-assets@2.14.0/sp.js","snowplow")); var snowPlowSettings = {"trackerName":"rezdyTracker","collectorUrl":"c.rezdy.com","gcpTrackerName":"rz-gcp","gcpCollectorUrl":"co.rezdy.com"}; var customContexts= [{"isExclusive":false,"schema":"iglu:com.rezdy\/booking_viewed\/jsonschema\/1-0-3","data":{"company_id":149444}},{"isExclusive":true,"schema":"iglu:com.rezdy\/booking_viewed\/jsonschema\/1-0-3","data":{"widget_type":"Product Details","booking_form_step":"Product Details","product_ids":[285161],"company_id":149444,"theme_version":null}}]; // Initialize the snowplow tracker window.snowplow('newTracker', snowPlowSettings.gcpTrackerName, snowPlowSettings.gcpCollectorUrl, { appId: 'booking_form', discoverRootDomain: true, platform: 'web', post: true, contexts: { webPage: true } }); var customContextFormatter = function _customContextFormatter(datum) { return {schema: datum.schema, data: datum.data}; }; var exclusiveEvent = customContexts.filter(function(datum) { return datum.isExclusive; }).map(customContextFormatter); var events = []; if (!exclusiveEvent.length) { events = customContexts.map(customContextFormatter); } else { if (typeof exclusiveEvent[0]['data']['order_id'] !== 'string' && typeof exclusiveEvent[0]['data']['order_id'] !== 'undefined') { exclusiveEvent[0]['data']['order_id'] = exclusiveEvent[0]['data']['order_id'].toString(); } } window.snowplow('enableLinkClickTracking'); window.snowplow('trackPageView', null, exclusiveEvent.length ? exclusiveEvent : events); //Allow all ajax requests to pass the CSRF check $(document).ajaxSend(function(event, request, settings){ switch(typeof settings.data) { case 'object': settings.data = settings.data || {}; settings.data['YII_CSRF_TOKEN'] = 'TmdwZkhZWlN4S3NyT2RZQUpLNVdMYXk5VzdOeUZkaTl4pBLu7e-9c8QU9x2a96PPW8SzBEz5QJ2riZtehNowTQ=='; break; case 'string': settings.data = settings.data || ''; settings.data += '&YII_CSRF_TOKEN=TmdwZkhZWlN4S3NyT2RZQUpLNVdMYXk5VzdOeUZkaTl4pBLu7e-9c8QU9x2a96PPW8SzBEz5QJ2riZtehNowTQ=='; break; default: settings.data = settings.data || ''; settings.data += 'YII_CSRF_TOKEN=TmdwZkhZWlN4S3NyT2RZQUpLNVdMYXk5VzdOeUZkaTl4pBLu7e-9c8QU9x2a96PPW8SzBEz5QJ2riZtehNowTQ=='; break; } }); jQuery(function($) { $(".fancycontact").fancybox({ maxWidth : 800, maxHeight : 600, fitToView : true, width : 500, height : 500, autoSize : false, closeClick : false, openEffect : 'none', closeEffect : 'none' }); $('.product-img-carousel').slick({ dots: false, infinite: true, speed: 300, slidesToShow: 4, centerMode: false, slidesToScroll: 1, initOnload: true, arrows: true, adaptiveHeight: true, mobileFirst: true, prevArrow: '<button type="button" class="slick-prev"></button>', nextArrow: '<button type="button" class="slick-next"></button>', responsive: [{ breakpoint: 1024, settings: { slidesToShow: 4, slidesToScroll: 1, infinite: true, dots: false } }, { breakpoint: 600, settings: { slidesToShow: 4, slidesToScroll: 1 } }, { breakpoint: 480, settings: { slidesToShow: 4, slidesToScroll: 1 } }] }); //SLick Lightbox $('.product-img-lightbox').slickLightbox({ src: 'data-img', itemSelector: 'figure img', navigateByKeyboard: true, background: 'rgba(255,255,255,.95)', closeOnBackdropClick: true }); // Make the main image open the lightbox if > 1 image if ($(".slick-track").length){ $('.product-main-image > img').css({"cursor": "pointer"}); $('.product-main-image > img').on('click', function (evt) { $('.slick-current > img').trigger('click'); evt.preventDefault(); }); } function storeOrderSource() { if (window.location.search.length && window.location.search.indexOf('orderSource=GOOGLE') !== -1 ) { sessionStorage.setItem('orderSource', 'GOOGLE') } } storeOrderSource() var supplierId = 149444; var currentProductId = 285161; var supplierCurrency = 'AUD'; var availability = []; var weekStartOn = 1; var waitlistButton = 'Join the waiting list'; var booknowButton = 'Book Now'; var disabledButton = 'No availability'; var preferredDate = $('#OrderItem_preferredDate'); var minDate = $('#OrderItem_minDate'); // Init showdate with the preselected (if any) or empty so the calendar loads the first available date. var showdate = $('[data-preset-date]').length ? $('[data-preset-date]').attr('data-preset-date') : '' || ''; var quantity = 0; var quantities = {}; if (minDate.length > 0 && minDate.val() != '') { var today = $.datepicker.parseDate('yy-mm-dd', minDate.val()); } else { var today = new Date(); } // Localise datepickers $.datepicker.regional['en_au'] = { monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"], monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], dayNamesMin:["S","M","T","W","T","F","S"], dateFormat:'d/mm/y', isRTL:false, showMonthAfterYear:false, yearSuffix:'', firstDay: weekStartOn, // 0 Sunday to 6 Saturday: default is 1 - Monday }; $.datepicker.setDefaults($.datepicker.regional['en_au']); $.timepicker.regional['en_au'] = { timeFormat:'h:mm TT', amNames:['AM', 'AM'], pmNames:['PM', 'PM'], ampm:true, timeOnlyTitle:"Choose a Time", timeText:"Time", hourText:"Hour", minuteText:"Minute", secondText:"Second", millisecText:"Millisecond", timezoneText:"Time Zone", closeText:"Confirm" }; $.timepicker.setDefaults($.timepicker.regional['en_au']); var durationUnit = ''; var minDuration = 0; var maxDuration = 0; var nextDayType = 'TWO'; var endTimeMin, endTimeMax; var minDate = new Date(); minDate.setDate(minDate.getDate() + 0); // Round Minutes to 5 minDate.setMinutes( 5 * Math.round(minDate.getMinutes() / 5) ); $('body').on('focusin', 'input.datepicker', function () { if (!$(this).hasClass('hasDatepicker')) { initDatepicker($(this)); $('.ui-datepicker').addClass('notranslate'); } }); $('div.datepicker').each(function () { if (!$(this).hasClass('hasDatepicker')) { initDatepicker($(this)); $('.ui-datepicker').addClass('notranslate'); } }); /** * /!\ Any update done here must be replicated in datepickers.php * @see https://github.com/dalelotts/angular-bootstrap-datetimepicker/issues/219 */ function setUserTimezone(localDate, timezoneOffset) { // convert to UTC var utc = new Date(localDate.getUTCFullYear(), localDate.getUTCMonth(), localDate.getUTCDate(), localDate.getUTCHours(), localDate.getUTCMinutes(), localDate.getUTCSeconds(), localDate.getUTCMilliseconds()); if (typeof timezoneOffset == 'undefined' || !timezoneOffset) { timezoneOffset = parseInt(39600, 10); } return new Date(utc.getTime() + timezoneOffset * 1000); } function initDatepicker(inputObj) { var options = { minDate: minDate, yearRange: (new Date()).getFullYear() + ':' + ((new Date()).getFullYear() + 10), altField: inputObj.attr('data-alt-field'), altFormat: 'yy-mm-dd', nextText: 'next →', prevText: '← prev', onSelect: updateMinMaxDuration, firstDay: weekStartOn, // 0 Sunday to 6 Saturday: default is 1 - Monday }; /** * If a preferredDate is set - set this date as a default date for the datepicker * the preferredDate wil be set when a query parameter date will be set * or if there is already an item in the cart with a startDate / preferredDate set. */ if ($('' + inputObj.attr('data-alt-field')).length && $('' + inputObj.attr('data-alt-field')).val().length) { options['defaultDate'] = $.datepicker.parseDate('yy-mm-dd', $('' + inputObj.attr('data-alt-field')).val()); } inputObj.datepicker(options); $('.ui-datepicker').addClass('notranslate'); } $('body').on('focusin', 'input.timepicker-trigger', function () { if (!$(this).hasClass('hasDatepicker')) { initTimepicker($(this)); $('.ui-datepicker').addClass('notranslate'); } }); function initTimepicker(inputObj) { if (!inputObj.hasClass('preferred-end-date') && !inputObj.hasClass('preferred-end-time')) { inputObj.timepicker({ //minDateTime: minDate, controlType: 'select', timeFormat: 'h:mm TT', amNames: ['AM', 'AM'], pmNames: ['PM', 'PM'], ampm: true, stepMinute: 5, onSelect: updateMinMaxDuration, onClose: updateMinMaxDuration }); } } $('body').on('change', '.return-check', function() { if ($('[data-group-price-merged]').length) { $('.return').toggle($(this).val() == 1); $('.price-update').toggle($(this).val() == 0); $('.price-return-update').toggle($(this).val() == 1); } else { $('.return').toggle($(this).val() == 1); $('.price-standard').toggle($(this).val() == 0); $('.price-return').toggle($(this).val() == 1); } }); if ($('.return-check:checked').length) { if ($('[data-group-price-merged]').length) { $('.return').toggle($(this).val() == 1); $('.price-update').toggle($(this).val() == 0); $('.price-return-update').toggle($(this).val() == 1); } else { $('.return').toggle($('.return-check:checked').val() == 1); $('.price-standard').toggle($('.return-check:checked').val() == 0); $('.price-return').toggle($('.return-check:checked').val() == 1); } } var cookieEnabled=(navigator.cookieEnabled)? true : false; if (!cookieEnabled) { document.cookie = 'test'; if (document.cookie) { cookieEnabled = true; } } if (!cookieEnabled) { $('div.calendar-widget div.no-cookies').css('display','block'); } // End Date and Times var showMinute = (durationUnit == 'MINUTES' ? true : false); var altField = (durationUnit != 'DAYS' ? '#OrderItem_preferredEndTime' : false); if (durationUnit != 'DAYS') { $('#OrderItem_preferredEndDate_picker').datetimepicker({ controlType: 'select', firstDay: weekStartOn, // 0 Sunday to 6 Saturday: default is 1 - Monday dateFormat: 'd/mm/y', timeFormat: 'h:mm TT', amNames: ['AM', 'AM'], pmNames: ['PM', 'PM'], ampm: true, stepMinute: 5, showMinute: showMinute, altField: altField }); } else { $('#OrderItem_preferredEndDate_picker').datepicker({ dateFormat: 'd/mm/y', altFormat: 'yy-mm-dd', firstDay: weekStartOn, // 0 Sunday to 6 Saturday: default is 1 - Monday altField: '#OrderItem_preferredEndDate', }); updateMinMaxDuration(); } // Convert select to input (To allow more quantities) $.fn.convertToInput = function (element) { var attributes = element.prop('attributes'); var newInput = $('<input type=\'number\' data-min="0" data-max="9999" value=\'0\'>'); var events = jQuery._data(element[0], 'events'); newInput.on('input.range', function(event) { var min = parseInt($(this).attr('data-min'), 10); var max = parseInt($(this).attr('data-max'), 10); if (event.target.value < min) { $(this).val(min); $(this).trigger('change'); } else if (event.target.value > max) { $(this).val(max); $(this).trigger('change') } }); element.replaceWith(newInput); if (typeof attributes !== 'undefined' && attributes.length) { $.each(attributes, function () { newInput.attr(this.name, this.value); }); } if (typeof events !== 'undefined' && events.length) { $.each(events, function (index, event) { $.each(event, function(i,v){ newInput.on(v.type + '.' + v.namespace, v.handler); }); }); } } // Check if opting 'Add more' option. $(document).on('change.js.input', '.input-quantities-list', function() { if (!$(this).hasClass('update-datepicker') && $(this).val() == 'more') { $.fn.convertToInput($(this)); } }); // Check if Add more inputbox is blank then set 0 $(document).on('blur', 'input.input-quantities-list', function() { if ($(this).val() == '') { $(this).val('0'); } }); // Prevent 'Enter' key from the PriceOption to prevent a form submission $(document).on('keypress', '.input-quantities-list', function (e) { if (e.keyCode == 13) { // Prevent to submit the form e.preventDefault(); // Trigger blur event $(this).trigger('blur'); } }); // On Form Submits, take our date picker for end time and convert it to the expected yy-mm-dd format. $('#order-item-form').on('submit', function(e) { if ($('#OrderItem_preferredEndDate').length) { useDate = $.datepicker.formatDate('yy-mm-dd', $('#OrderItem_preferredEndDate_picker').datepicker('getDate')); $('#OrderItem_preferredEndDate').val(useDate); } }); // On load, update MinMaxDuration // Catch the List Select Durations and pass over to updateMinMaxDuration if ($('select[id=OrderItem_preferredTime]').length == 1) { $('select[id=OrderItem_preferredTime]').on('change', function() { updateMinMaxDuration() }); updateMinMaxDuration(); } function updateMinMaxDuration() { // Make sure we're a duration product if (!durationUnit || durationUnit == 'false') return; // MinMax Durations should not be calculated on DurationList products. if ($('#OrderItem_durationValue').length) return; var preferredDate = $('#OrderItem_preferredDate'); var preferredTime = $('#OrderItem_preferredTime'); var preferredEndDate = $('#OrderItem_preferredEndDate_picker'); if (preferredDate.length > 0) { preferredDate = $.datepicker.parseDate('yy-mm-dd', preferredDate.val()); } // Parse time from the timeformat (09:00 AM) if (preferredTime.length > 0) { var preferredTimeLabel = preferredTime.val(); if (preferredTime.is('select')) { preferredTimeLabel = $('select#OrderItem_preferredTime option:selected').text(); // Label of the selected option (i.e 09:00 AM) } preferredTime = $.datepicker.parseTime( 'h:mm TT', preferredTimeLabel, { amNames: ['AM', 'AM'], pmNames: ['PM', 'PM'], ampm: true } ); } else { preferredTime = false; } if(preferredDate) { startDateTime = new Date( preferredDate.getFullYear(), preferredDate.getMonth(), preferredDate.getDate(), (preferredTime) ? preferredTime.hour : 0, (preferredTime) ? preferredTime.minute : 0, 0 ); switch (durationUnit) { case 'HOURS': endTimeMin = new Date(startDateTime.getTime()); endTimeMin.setHours(endTimeMin.getHours() + minDuration); endTimeMax = new Date(startDateTime.getTime()); endTimeMax.setHours(endTimeMax.getHours() + maxDuration); break; case 'MINUTES': minutesOverrideMinDuration = 5 * Math.round(minDuration / 5); minutesOverrideMaxDuration = 5 * Math.round(maxDuration / 5); endTimeMin = new Date(startDateTime.getTime()); endTimeMin.setMinutes(endTimeMin.getMinutes() + minutesOverrideMinDuration); endTimeMax = new Date(startDateTime.getTime()); endTimeMax.setMinutes(endTimeMax.getMinutes() + minutesOverrideMaxDuration); break; case 'DAYS': endTimeMin = new Date(startDateTime.getTime()); if (nextDayType == 'ONE') { endTimeMin.setDate(endTimeMin.getDate() + minDuration); } else { endTimeMin.setDate(endTimeMin.getDate() + minDuration - 1); } endTimeMax = new Date(startDateTime.getTime()); endTimeMax.setDate(endTimeMax.getDate() + maxDuration - 1); break; default: try { console.error('Uncaught Duration Unit. Report to developers please.'); } catch (e) {} break; } if (preferredEndDate) { // Update Min and Max range for Date preferredEndDate.datepicker('option', 'minDate', endTimeMin); preferredEndDate.datepicker('option', 'minDateTime', endTimeMin); preferredEndDate.datepicker('option', 'maxDate', endTimeMax); preferredEndDate.datepicker('option', 'maxDateTime', endTimeMax); // If the date is currently blank, update it. if (preferredEndDate.val() == '') { preferredEndDate.datepicker('setDate', endTimeMin); } } // Updated Minutes in endTime minutes to match startTime minutes when selecting hours. if (durationUnit == 'HOURS' && preferredTime) { endDate = preferredEndDate.datetimepicker('getDate'); endDate.setMinutes(preferredTime.minute); preferredEndDate.datetimepicker('setDate', endDate); } // If we have a end time object to show, and the min and max dates are the same if ( $('#OrderItem_preferredEndTime') && endTimeMin.getFullYear() == startDateTime.getFullYear() && endTimeMin.getFullYear() == endTimeMax.getFullYear() && endTimeMin.getMonth() == startDateTime.getMonth() && endTimeMin.getMonth() == endTimeMax.getMonth() && endTimeMin.getDate() == startDateTime.getDate() && endTimeMin.getDate() == endTimeMax.getDate() ) { $('#OrderItem_preferredEndDate_picker').addClass('hidden'); } else { $('#OrderItem_preferredEndDate_picker').removeClass('hidden'); } } } $(function(){ $('.ui-datepicker').addClass('notranslate'); $('input,select,textarea').addClass('notranslate'); }); var preferredDate = $('#OrderItem_preferredDate').val(); var unavailableLabel = 'Not available'; var soldOutLable = 'Sold Out'; var availableLabel = 'Available'; var numAjaxRequests = 0; // Update a price when different session time is selected. $(document).on('change', '.multiple-prices-list', function () { var sessionId = $(this).val(); if ($(this).find(':selected').attr('data-price')) { var price = $(this).find(':selected').attr('data-price'); var totalPriceValue = $('.total-price-value'); totalPriceValue.attr('data-original-amount', price); totalPriceValue.html(price); } // Make sure button label always says 'Book Now' until waitlist is enabled // And it should be enabled by default $('.booknow-button').html(booknowButton); $('.booknow-button').removeClass('disabled'); // Check for submit button label. if ($(this).find(':selected').attr('data-waitlist') == 'true') { $('.booknow-button').html(waitlistButton); } else { $('.booknow-button').html(booknowButton); // If there is not enough availabilty or sold out then disabled the buttton. if ($(this).find(':selected').attr('disabled') == 'disabled') { $('.booknow-button').addClass('disabled'); $('.booknow-button').html(disabledButton); } } // Change price underneath of PriceOption labels (.price-standard) $.fn.updatePricePerOptions($(this).find(':selected').attr('data-pricePerOption')); // Set it to a hiddenField so we can keep the selection after datepicker refresh $('#OrderItem_selectedSessionId').val($(this).val()); $('#OrderItem_selectedSessionId').attr('data-selectedTime', $(this).find(':selected').text().replace(/\s+-.*/, '')); // If session is not available then disabled the button so customer can not process further. if ($(this).find(':selected').attr('data-disabled') == 'disabled') { $('.booknow-button').addClass('disabled'); $('.booknow-button').html(disabledButton); } }); // Update price label for each options $.fn.updatePricePerOptions = function (jsonPriceOptionArray) { var priceOptionArray = JSON.parse(jsonPriceOptionArray); $.each(priceOptionArray, function (key, val) { var label = $('label[for=\''+parseInt(key)+'\']'); label.find('span.update-price-value').html(val); label.find('span.update-price-value').attr('data-original-amount', val); if(label.find('span.price-unit')) { if(label.find('span.price-from-label').html('')); } }); }; function initAvailabilitypicker(inputObj) { // Documentation is here: https://api.jqueryui.com/datepicker var updateDatepicker = inputObj.attr('data-updatepicker'); inputObj.datepicker({ minDate: today, showButtonPanel: true, closeText: 'X', currentText: 'Today', firstDay: weekStartOn, // 0 Sunday to 6 Saturday: default is 1 - Monday yearRange: (new Date()).getFullYear() + ':' + ((new Date()).getFullYear() + 10), beforeShowDay: function(mydate, inst) { return checkAvailability(inputObj.attr('data-product-id'), mydate); }, altField: inputObj.attr('data-alt-field'), altFormat: 'yy-mm-dd', onChangeMonthYear: function(year, month, inst) { var yyyy = inst.selectedYear.toString(); var mm = (1+inst.selectedMonth).toString(); showdate = yyyy + '-' + (mm[1]?mm:'0'+mm[0]) + '-01'; // Do not skip the month even if there is no availability. if (updateDatepicker) { loadAvailability(inputObj, showdate, inputObj.attr('data-product-id'), 1, $('[data-group-price-merged]').length); } else { loadAvailability(inputObj, showdate, inputObj.attr('data-product-id'), 0, $('[data-group-price-merged]').length); } // Add an overlay when datepicker is not inline (Transfers/Shuttles), because it is removed when datepicker is closed setTimeout(function() { var datepckr = inputObj.datepicker("widget" ); if (datepckr.find('.rezdy-overlay-loader').length < 1) { datepckr.append('<div class="rezdy-overlay-loader active"><i class="fa fa-circle-o-notch fa-spin"></i></div>'); } }, 1 ); }, onSelect: function(dateText, inst) { if (updateDatepicker) { updateTotalprice(); } }, nextText: 'next →', prevText: '← prev', defaultDate: $.datepicker.parseDate('yy-mm-dd', $('' + inputObj.attr('data-alt-field')).val()) }); } function loadAvailability(datepickerelement, showdate, productId, updateTotalPrice, isGroupPriceMerge, callback) { var unifiedSelector = isGroupPriceMerge || $('[data-group-price-merged]').length; // Count participants quantity = 0; if (!unifiedSelector) { $('.input-quantities-list').each(function () { // If no quantity pass then assume 0 seats = $(this).val() != '' ? parseInt($(this).val()) : 0; quantity += seats; }); } else { quantity = parseInt($('.input-quantities-list[data-group-price-merged]').val(), 10); } //Only use limit per price options format when the price has availability per price options. if (['SESSION_SEATS_PER_PRICE_OPTIONS', 'SESSION_RESOURCES_PER_PRICE_OPTIONS'].indexOf($('.availability-container').attr('data-inventory-mode')) !== -1) { $('.participants .change-quantity select').not('[data-price-type=\'VIRTUAL\']').each(function() { var parentThis = $(this); quantities[$(this).data('price-id')] = $(this).val(); //If we have return, we have to include all price options of the return product //So we can check availability on sessions of the return product $('.return:visible .return-po').each(function() { if($(this).data('price-type') == parentThis.data('price-type')) { quantities[$(this).data('price-id')] = parentThis.val(); } }); }); } $('[data-initial-selected-date]').attr('data-initial-selected-date', showdate); $.ajax({ url: '/availabilityAjax', type: 'POST', // Please note quantities is used for limit availability per price options // And need to have this following format : //priceOptionId-quantity: i.e 4535-5 where 4535 is the price option id. and 5 is the quantity required. data: { 'showdate' : showdate, 'productId' : productId, 'quantity' : quantity, 'quantities' : quantities}, dataType: 'json', beforeSend: function(xhr) { if (typeof showdate === 'undefined') { xhr.abort(); return false; } numAjaxRequests++; $('.booknow-button').addClass('disabled'); $('.rezdy-overlay-loader').show().addClass('active'); }, complete: function() { if (--numAjaxRequests == 0) { $('.rezdy-overlay-loader').removeClass('active').hide(); } }, success: function( jsonResponse ) { availability = $.extend(true, availability, jsonResponse.availability); // Check if availability exists otherwise display 'Product has no availability' message. if (Object.keys(availability).length === 0) { $('#order-item-form').html('<p class=\'error\'>This product has no availability, please try again later<br><a class="mt fancycontact fancybox.ajax" href="/contact?modal=1&alias=kalganqueen">Contact us</a></p>'); } if (jsonResponse.firstDate) { //Select the POSTed date if is set. var previouslySelectedDate = $('[data-initial-selected-date]').attr('data-initial-selected-date'); if (previouslySelectedDate && typeof jsonResponse.availability[previouslySelectedDate] !== 'undefined') { showdate = previouslySelectedDate } else { // Use the firstdate to display prices showdate = jsonResponse.firstDate; } datepickerelement.datepicker('setDate', $.datepicker.parseDate('yy-mm-dd', showdate)); } // Refresh available dates datepickerelement.datepicker('refresh'); $('.booknow-button').removeClass('disabled'); // Only updateTotal price if a flag is enabled. if (updateTotalPrice) { updateTotalprice($('[data-group-price-merged]').length, callback); } } }); } function checkAvailability(productId, mydate) { var available = false; var returnclass = 'unavailable'; var returndetails = unavailableLabel; checkdate = $.datepicker.formatDate('yy-mm-dd', mydate); if (availability[checkdate] != undefined) { available = true; returnclass= 'available'; dayAvailability = 0; var productFound = false; var onhold = 0; var totalSessions = 0; $.each(availability[checkdate], function(key, val) { if (productId != undefined && val[productId] != undefined) { totalSessions++; returndetails = availableLabel; if(val[productId].availabilityPerPriceOption == null) { if(parseInt(val[productId].seatsAvailable, 10) < parseInt(quantity, 10)) { returndetails = unavailableLabel; onhold++; } } else { var availablePo = true; var totalSeatsUsed = 0; var pos = val[productId].price.reduce(function(acc, po){ poId = po.id; if (po.parentId) { poId = po.parentId; } acc[poId] = po; return acc; }, {}); if (val[productId].hasResources && val[productId].price[0].resourceId) { var qtyPerResourceId = {}; $.each(quantities, function(poId, poQuantitySelected) { seatsUsed = typeof pos[poId] !== 'undefined' ? (pos[poId].seatsUsed || 1) : 1; if (typeof pos[poId] !== 'undefined' && typeof qtyPerResourceId[pos[poId].resourceId] === 'undefined') { qtyPerResourceId[pos[poId].resourceId] = 0; } // Edge cases where return products will be in the quantities but not in pos // Because they have different product ids // If not present continue the loop if (!qtyPerResourceId[pos[poId]?.resourceId]) { return; } qtyPerResourceId[pos[poId].resourceId] += parseInt(poQuantitySelected, 10) * seatsUsed; if(val[productId].availabilityPerPriceOption[poId] != null && parseInt(val[productId].availabilityPerPriceOption[poId].availability, 10) < parseInt(qtyPerResourceId[pos[poId].resourceId],10)) { availablePo = false; return false; } }); } else { $.each(quantities, function(poId, poQuantitySelected) { seatsUsed = typeof pos[poId] !== 'undefined' ? (pos[poId].seatsUsed || 1) : 1; totalSeatsUsed += parseInt(poQuantitySelected, 10) * seatsUsed; if(val[productId].availabilityPerPriceOption[poId] != null && parseInt(val[productId].availabilityPerPriceOption[poId].availability, 10) < parseInt(poQuantitySelected,10)) { availablePo = false; return false; } }); } if(!availablePo || (parseInt(val[productId].seatsAvailable, 10) < parseInt(totalSeatsUsed, 10))) { returndetails = unavailableLabel; onhold++; } } if (val[productId].availability != 'Free sale') { //Don't take in account overbooked sessions (If a session was overbooked with an amount greater than the actual remaining eats per day it would have been shown as sold out but showing available sessions) dayAvailability += Math.max(0, parseInt(val[productId].seatsAvailable, 10)); } else { // Trick to always show day as available dayAvailability += 999999; } productFound = true; } }); //Set the label after processing all options // because before the last process price option will set the label for the whole day // which is not right if (dayAvailability > 0) { returndetails = availableLabel; } // If there is not enough available days (Waiting list) // If all sessions are onHold if (dayAvailability <= 0 || (totalSessions == onhold && totalSessions > 0)) { // All sessions full for that day available = productFound; returnclass = productFound ? 'full' : 'unavailable'; returndetails = productFound ? soldOutLable : unavailableLabel; } } return [available,returnclass,returndetails]; } // Onchange of a quantity dropdown: Refresh availability in the datepicker and also update the price. $.fn.loadAvailabilityOnQtyChange = function (element, isGroupPriceMerge, callback) { if (element.val() && element.val() != 'more') { var productId = element.attr('data-product-id'); var selectedDate = $.datepicker.formatDate('yy-mm-dd', $('.availabilitypicker').datepicker('getDate')); loadAvailability($('.availabilitypicker'), selectedDate, productId, 1, $('[data-group-price-merged]').length, callback); // Load availability and update the datepicker. } } // Qty dropdown (for 0-20) $(document).on('change.js.rezdy', 'select.update-datepicker', function() { $.fn.loadAvailabilityOnQtyChange($(this)); }); // Qty textbox (for more than 20) $(document).on('input.js.rezdy', 'input.update-datepicker', function() { $.fn.loadAvailabilityOnQtyChange($(this)); }); // Update the total price based on the selected date and quantities function updateTotalprice(isGroupPriceMerge, callback) { var showPrice = true; var totalPrice = 0; var pricesMerged = isGroupPriceMerge || $('[data-group-price-merged]').length; if (pricesMerged) { $('.input-quantities-list').not('[data-matching-qty]').attr('disabled', 'disabled'); } var data = $('#order-item-form').serializeArray(); // Make sure button label always says 'Book Now' until waitlist is enabled // And it should be enabled by default $('.booknow-button').html(booknowButton); $('.booknow-button').removeClass('disabled'); $.ajax({ url: '/updateTotalprice', type: 'POST', data: data, dataType: 'json', beforeSend: function() { numAjaxRequests++; $('.rezdy-overlay-loader').show().addClass('active'); }, complete: function() { if (--numAjaxRequests == 0) { $('.rezdy-overlay-loader').removeClass('active').hide(); } if (typeof callback === 'function') { callback(); } }, success: function( data ) { $('.multiple-prices-list').remove(); $('.total-price').html(''); $('.session-container').addClass('hide'); if(data && data.sessions && (data.sessions).length > 0) { $('.session-container').removeClass('hide'); //Show the informative message when product has availability. $('.note.show-if-availability').show(); // Display dropdown with time(Key) and price(value) var sel = $('<select id=\'OrderItem_sessionId\' name=\'OrderItem[sessionId]\' class=\'multiple-prices-list notranslate\'>').insertAfter('.session-container h4'); $(data.sessions).each(function (key, value){ if (data.activeSession[value]) { sel.append($('<option>').attr('value', value).attr('data-price', data.totalPrice[value]).attr('data-waitlist', data.waitlist[value]).attr('data-pricePerOption', JSON.stringify(data.pricePerOption[value])).attr('data-quantitiesPerOption', JSON.stringify(data.quantitiesPerOption[value])).attr('data-minQuantityOverride', data.minQuantityOverride[value]).attr('data-maxQuantityOverride', data.maxQuantityOverride[value]).text(data.sessionTimeLabel[value])); } else { sel.append($('<option>').attr('value', value).attr('data-price', data.totalPrice[value]).attr('data-waitlist', data.waitlist[value]).attr('data-pricePerOption', JSON.stringify(data.pricePerOption[value])).attr('data-quantitiesPerOption', JSON.stringify(data.quantitiesPerOption[value])).attr('data-minQuantityOverride', data.minQuantityOverride[value]).attr('data-maxQuantityOverride', data.maxQuantityOverride[value]).text(data.sessionTimeLabel[value]).attr('data-disabled', 'disabled')); } }); sel.removeAttr('value'); // Check if a a session is already selected then keep it (useful when doing qty update) if ($('#OrderItem_selectedSessionId').val() && sel.find('option[value="' + $('#OrderItem_selectedSessionId').val() + '"]').length && sel.find('option[value="' + $('#OrderItem_selectedSessionId').val() + '"]:not("[data-disabled]")').length) { sel.find('option[value="' + $('#OrderItem_selectedSessionId').val() + '"]') .attr('selected', 'selected') .trigger('change'); sel.val($('#OrderItem_selectedSessionId').val()); sel.trigger('change'); } else // Check if a a session is already selected then keep it (useful when changing date) if ($('#OrderItem_selectedSessionId').attr('data-selectedTime')) { //Reset select value and previously selected option. sel.removeAttr('value'); if (sel.find('option[selected]').length) { $(sel.find('option[selected]')).removeAttr('selected'); } var matchingOptions = sel.children().filter(function(index, element) { return !$(element).attr('data-disabled') && ($(element).text().replace(/\s+-.*/, '') === $('#OrderItem_selectedSessionId').attr('data-selectedTime')); }); if (matchingOptions.length) { var opt = $(matchingOptions[0]); if (!opt.attr('data-disabled')) { opt.attr('selected', 'selected').trigger('change'); sel.val(opt.val()); sel.trigger('change'); } } } //IF no session has been selected (either using preset-date (or coming back from validation errors, or update quantity) if (!sel.val()) { //Select first available session. (when nothing has been selected before) var selectedOption = sel.find(':not([data-disabled]):not([data-waitlist=\'true\']:first)') //If no available sessions, select first session with waiting list if (!selectedOption.length) { selectedOption = sel.find('option[data-witlist=\'true\']:first'); } //Finally if nothing has been selected, Pick first option if(!selectedOption.length) { selectedOption = sel.find('option:first'); } if(selectedOption.length) { selectedOption.attr('selected','selected'); sel.val(selectedOption.val()); sel.find(':selected').text().replace(/\s+-.*/, ''); sel.trigger('change'); } } // Display total price per session. if (sel.find(':selected').attr('data-price') && showPrice) { var originalPrice = sel.find(':selected').attr('data-price'); $('.total-price').html('<h4>Price<small>(<span class=\'price-label\'>'+supplierCurrency+'</span>)</small> <span class=\'total-price-value color-inherit price\' data-currency-base=' + supplierCurrency+' data-original-amount=\''+originalPrice+'\'>'+originalPrice+'</span></h4>'); document.dispatchEvent(new CustomEvent('rezdy-update-prices', {})); // Set a hiddenfield for the selectedSessionValue so we can keep it selected $('#OrderItem_selectedSessionId').val(sel.val()); $('#OrderItem_selectedSessionId').attr('data-selectedTime', sel.find(':selected').text().replace(/\s+-.*/, '')); } // Check for submit button label. if (sel.find(':selected').attr('data-waitlist') == 'true') { $('.booknow-button').html(waitlistButton); } else { $('.booknow-button').html(booknowButton); } // Also disabled the button so customer can not process further. if (sel.find(':selected').attr('data-disabled') == 'disabled') { $('.booknow-button').addClass('disabled'); $('.booknow-button').html(disabledButton); } // Change price underneath of PriceOption labels (.price-standard) if(sel.find(':selected').attr('data-pricePerOption')) { $.fn.updatePricePerOptions(sel.find(':selected').attr('data-pricePerOption')); } } else { $('.note.show-if-availability').hide(); $('.booknow-button').addClass('disabled'); $('.booknow-button').html(disabledButton); } if (pricesMerged) { var matchingPrice = $('[data-matching-qty]'); if(matchingPrice.length){ //Update option price var currentPrice = matchingPrice.closest('.control-group').find('.control-label .update-price-value').text(); var currentReturnPrice = matchingPrice.closest('.control-group').find('.control-label .update-price-return-value').text(); //Dispatch price update after updating total price var updatePrice = new jQuery.Event('update_price.js.rezdy', { payload: { productId: matchingPrice.attr('data-product-id'), price: currentPrice, returnPrice: currentReturnPrice } }); $.event.trigger(updatePrice); } $('.input-quantities-list').not('[data-matching-qty]').removeAttr('disabled'); } } }); } // Update a price when different session time is selected. $(document).on('change', '.multiple-prices-list', function () { var sessionId = $(this).val(); var price = $(this).find(':selected').attr('data-price'); if (price) { $('.total-price-value').html(price); $('.total-price-value').data('original-amount', price); } // Make sure button label always says 'Book Now' until waitlist is enabled // And it should be enabled by default $('.booknow-button').html(booknowButton); $('.booknow-button').removeClass('disabled'); // Check for submit button label. if ($(this).find(':selected').attr('data-waitlist') == 'true') { $('.booknow-button').html(waitlistButton); } else { $('.booknow-button').html(booknowButton); //If there is not enough availabilty or sold out then disabled the buttton. if ($(this).find(':selected').attr('disabled') == 'disabled') { $('.booknow-button').addClass('disabled'); $('.booknow-button').html(disabledButton); } } if ($(this).find(':selected').attr('data-quantitiesPerOption')) { $.fn.updateQuantitiesPerOptions($(this).find(':selected').attr('data-quantitiesPerOption')); var minQuantityOverride = $(this).find(':selected').attr('data-minQuantityOverride'); var maxQuantityOverride = $(this).find(':selected').attr('data-maxQuantityOverride'); $.fn.updateQuantityOverride(minQuantityOverride, maxQuantityOverride); } // Change price underneath of PriceOption labels (.price-standard) $.fn.updatePricePerOptions($(this).find(':selected').attr('data-pricePerOption')); // Set it to a hiddenField so we can keep the selection after datepicker refresh $('#OrderItem_selectedSessionId').val($(this).val()); $('#OrderItem_selectedSessionId').attr('data-selectedTime', $(this).find(':selected').text().replace(/\s+-.*/, '')); // If session is not available then disabled the button so customer can not process further. if ($(this).find(':selected').attr('data-disabled') == 'disabled') { $('.booknow-button').addClass('disabled'); $('.booknow-button').html(disabledButton); } }); // Update price label for each options $.fn.updatePricePerOptions = function (jsonPriceOptionArray) { var priceOptionArray = JSON.parse(jsonPriceOptionArray); $.each(priceOptionArray, function (key, val) { var label = $('label[for=\''+parseInt(key)+'\']'); label.find('span.update-price-value').html(val); label.find('span.update-price-value').attr('data-original-amount', val); if(label.find('span.price-unit')) { if(label.find('span.price-from-label').html('')); } }); document.dispatchEvent(new CustomEvent('rezdy-update-prices', {})); } /** * This method rebuilds the select options for quantity */ $.fn.updateQuantitiesPerOptions = function (jsonQuantitiesOptionArray) { var quantitiesOptionArray = JSON.parse(jsonQuantitiesOptionArray); const createOptionElement = function(key, quantity, selectedValue) { const option = document.createElement('option'); option.value = key; option.text = quantity; return option; }; $.each(quantitiesOptionArray, function (key, quantityPerOption) { var select = $('select[data-price-id=\''+parseInt(key)+'\']'); var selectedValue = $('select[data-price-id=\''+parseInt(key)+'\'] :selected').val(); var isSelectedValueAvailable = false; select.empty(); // Recreate each option and append to select $.each(quantityPerOption, function (key, quantity) { const option = createOptionElement(key, quantity, selectedValue); if (key.toString() === selectedValue) { option.selected = 'selected'; isSelectedValueAvailable = true; } select.append(option); }); // If no selected value available, determine if the value is from VIRTUAL input if ($('input[data-price-type=\'VIRTUAL\']').length > 0 && !isSelectedValueAvailable) { const virtualInputValue = $('input[data-price-type=\'VIRTUAL\']').val(); // Ensure the virtualInputValue matched the stored selected value if (virtualInputValue === selectedValue) { // Append the dom with this option and mark as selected const option = createOptionElement(selectedValue, selectedValue, selectedValue); option.selected = 'selected'; isSelectedValueAvailable = true; select.append(option); } } // Default to second child selected if none selected. if (!isSelectedValueAvailable && Number(selectedValue) > 0) { select.find('option:nth-child(2)').prop('selected', true); } }); } // Update min/max quantity override for the session $.fn.updateQuantityOverride = function (jsonMinQuantityOverride, jsonMaxQuantityOverride) { var minQuantityOverride; var maxQuantityOverride if (jsonMinQuantityOverride && jsonMaxQuantityOverride) { minQuantityOverride = JSON.parse(jsonMinQuantityOverride); maxQuantityOverride= JSON.parse(jsonMaxQuantityOverride); } $('#OrderItem_minQuantityOverride').val(minQuantityOverride); $('#OrderItem_maxQuantityOverride').val(maxQuantityOverride); } // Case when changing month in datepicker, confirm availability then click back button in navigator if (preferredDate && Object.keys(availability).length && !availability[preferredDate]) { $('#OrderItem_preferredDate').val(''); } // For most of the products with onPage datePicker. $('div.availabilitypicker').each(function () { if (!$(this).hasClass('hasDatepicker')) { initAvailabilitypicker($(this)); } if ($(this).find('.ui-datepicker .rezdy-overlay-loader').length < 1) { $(this).find('.ui-datepicker').after('<div class="rezdy-overlay-loader"><i class="fa fa-circle-o-notch fa-spin"></i></div>'); } // If there is no availability then try to load it through ajaxcall. (Plugins can pass availability from a controller.) if(Object.keys(availability).length === 0) { var updateTotalPrice = 1; //keep the POSTed if is set. // Only work in that case (initialisation) var keepDate = $('[data-initial-selected-date]').attr('data-initial-selected-date') ? $('[data-initial-selected-date]').attr('data-initial-selected-date') : showdate; // Get availability on the ajax call and load calendar with the availability loadAvailability($(this), keepDate, currentProductId, updateTotalPrice, $('[data-group-price-merged]').length); } }); // For Transfer products where datepicker activated by focusing on the inputField $('body').on('focusin', '.availabilitypicker', function () { if (!$(this).hasClass('hasDatepicker')) { initAvailabilitypicker($(this)); // Loading overlay setTimeout(function() { var datepckr = $(this).datepicker("widget" ); datepckr.append('<div class="rezdy-overlay-loader active" style="display: block"><i class="fa fa-circle-o-notch fa-spin"></i></div>') }, 1 ); var updateTotalPrice = 1; var datepickerProductId = $(this).data('product-id') ? $(this).data('product-id') : currentProductId; // Get availability on the ajax call and load calendar with the availability loadAvailability($(this), showdate, datepickerProductId, updateTotalPrice, $('[data-group-price-merged]').length); } }); ;(function($){ $(function() { /** * Quantity Selector * @param Element DOMElement * @param isMain bool Determine if the current instance is the main quantity selector * @param Container {QuantityContainer} Keep a reference of the app (to avoid event spaghetti) * @returns {QtySelector} * @constructor */ var QtySelector = function QtySelector(Element, isMain, Container, sessionMerged) { this.el = $(Element); this.cb = sessionMerged || window.transferWidget ? false : $.fn.loadAvailabilityOnQtyChange; this.isMain = isMain || false; this.parent = Container; //In case of browser back. if (parseInt(this.el.val(), 10) > 0) { this.el.attr('data-initial-value', parseInt(this.el.val(), 10)); } var self = this; if (sessionMerged && !this.cb) { this.cb = function() { self.parent.handleFormSubmit(); formData = self.parent.el.closest('form').serialize(); $.event.trigger(new jQuery.Event('enable.js.rezdy', {payload: { productId: self.el.attr('data-product-id')}})); var event = new jQuery.Event('availability:qty_update', { payload: { productId: self.el.attr('data-product-id'), group_price: formData, subject: self } }); $.event.trigger(event); } } if (!this.isMain && (!this.el.attr('data-price') || !this.el.attr('data-price-type'))) { throw new Error('Current element does not have mandatory parameters (data-price, data-price-type)'); } this._init(); return this; }; QtySelector.prototype._init = function _init() { var self = this; this.el .on('hide.js.rezdy', function(event) { //Prevent other instances to react to unwanted update events if (!event.payload.productId || event.payload.productId !== self.el.attr('data-product-id')) { return; } if (event.payload.element === self.el) { self.el.closest('.control-group').hide(); } }) .on('enable.js.rezdy', function(event) { if (!event.payload.productId || event.payload.productId !== self.el.attr('data-product-id')) { return; } self.el.removeAttr('disabled'); }) .on('update_price.js.rezdy', function(event) { //Prevent other instances to react to unwanted update events if (!event.payload.productId || event.payload.productId !== self.el.attr('data-product-id')) { return; } if (self.isMain) { var newLabel = $('<span class="price-update"></span>'); var currentLabel = self.el.parents('.control-group').find('.control-label'); currentLabel = currentLabel.length ? currentLabel : self.parent.el.find('.control-label'); currentLabel.find('.price-unit').children().not('.price-update').hide(); newLabel.text(event.payload.price); var transfer = self.parent.el.closest('.transfer').length ? self.parent.el.closest('.transfer') : self.parent.el.siblings('.transfer'); if (transfer.find('.return-check').length) { var newReturnLabel = $('<span class="price-return-update"></span>'); newReturnLabel.text(event.payload.returnPrice); if (transfer.find('.return-check:checked').val() == 1) { newLabel.hide(); newReturnLabel.show(); } else { newLabel.show(); newReturnLabel.hide(); } if (currentLabel.find('.price-unit .price-return-update').length) { currentLabel.find('.price-unit .price-return-update').replaceWith(newReturnLabel); } else { currentLabel.find('.price-unit').append(newReturnLabel); } } if (currentLabel.find('.price-unit .price-update').length) { currentLabel.find('.price-unit .price-update').replaceWith(newLabel); } else { currentLabel.find('.price-unit').append(newLabel); } } }) .on('qty_update_unhandled.js.rezdy', function (event) { //Prevent other instances to react to unwanted update events if (!event.payload.productId || event.payload.productId !== self.el.attr('data-product-id')) { return; } if (self.el !== event.payload.element && !self.isMain) { self.el.val(0); self.el.find(':selected').removeAttr('selected'); self.el.removeAttr('data-matching-qty'); } else if (self.el === event.payload.element && self.isMain) { //If not qty couldn't match any group price, fallback on mainSelector. self.el.val(event.payload.qty); self.el.attr('data-matching-qty', true); if (typeof self.cb === 'function') { self.cb(self.el, true, event.payload.callback); } //Update option price var currentPrice = self.el.parents('.control-group').find('.control-label .update-price-value').text(); var currentReturnPrice = self.el.parents('.control-group').find('.control-label .update-price-return-value').text(); var updatePrice = new jQuery.Event('update_price.js.rezdy', { payload: { productId: self.el.attr('data-product-id'), price: currentPrice, returnPrice: currentReturnPrice } }); $.event.trigger(updatePrice); } }) .on('reset_selection.js.rezdy', function (event) { //Prevent other instances to react to unwanted update events if (!event.payload.productId || event.payload.productId !== self.el.attr('data-product-id')) { return; } if (!self.isMain) { self.el.val(0); self.el.find('option').removeAttr('selected'); } self.el.removeAttr('data-matching-qty'); }) .on('update_qty.js.rezdy', function(event) { //Prevent other instances to react to unwanted update events if (!event.payload.productId || event.payload.productId !== self.el.attr('data-product-id') || event.isPropagationStopped()) { return; } //No need to propagate the event when converting selecting into an input if (event.payload.qty == 'more' && self.isMain) { self.convertToInput(); event.stopImmediatePropagation(); event.stopPropagation(); return; } else { if (self.hasRange() && self.isWithinRange(event.payload.qty)) { //When matched stop event being caught by other handlers event.stopPropagation(); event.stopImmediatePropagation(); event.preventDefault(); //Append the quantity to matching select if (!self.el.find('option[value="' + event.payload.qty + '"]').length) { var opt = $('<option>') .val(event.payload.qty) .text(event.payload.qty); self.el.append(opt); } //Select the matching option self.el.find('option[value="' + event.payload.qty + '"]').attr('selected', 'selected'); self.el.val(event.payload.qty); self.el.attr('data-matching-qty', true); //Remove matching data-attribute from main selector. $('#'+self.parent.mainSelector.el.attr('id')).removeAttr('data-matching-qty'); //Execute callback if it exists if (typeof self.cb === 'function') { self.cb(self.el, true, event.payload.callback); } //Update option price //USe text here to avoid currency switching when it has been converted at least once var currentPrice = self.el.parents('.control-group').find('.control-label .update-price-value').text(); var currentReturnPrice = self.el.parents('.control-group').find('.control-label .update-price-return-value').text(); var updatePrice = new jQuery.Event('update_price.js.rezdy', { payload: { productId: self.el.attr('data-product-id'), price: currentPrice, returnPrice: currentReturnPrice } }); $.event.trigger(updatePrice); } else { //Emit an event to handle no match case. var UnhandledEvent = new jQuery.Event('qty_update_unhandled.js.rezdy', { payload: { productId: self.el.attr('data-product-id'), element: self.el, qty: event.payload.qty, callback: event.payload.callback } }); $.event.trigger(UnhandledEvent); } } }); } QtySelector.prototype.convertToInput = function convertToInput() { var originalElement = this.el; var attributes = originalElement[0].attributes; var nativeInput = document.createElement('input'); var events = jQuery._data(originalElement[0], 'events'); nativeInput.setAttribute('type', 'text'); //Copy attributes $(attributes).each(function() { nativeInput.setAttribute(this.name, this.value); }); nativeInput.setAttribute('data-matching-qty', true); originalElement[0].parentNode.replaceChild(nativeInput, originalElement[0]); var newInput = $(nativeInput); //Copy event handlers $.each(events, function (index, event) { $.each(event, function(i,v){ newInput.on(v.type + '.' + v.namespace, v.handler); }); }); //Add parents $(['offsetParent', 'parentNode', 'parentElement']).each(function(index, attributeName) { nativeInput[attributeName] = originalElement[0][attributeName]; }); this.el = newInput; newInput.trigger('focus'); var that = this; var updateMainSelector = new jQuery.Event('update_main_selector.js.rezdy', { payload: { productId: that.el.attr('data-product-id'), selector: that } }); $.event.trigger(updateMainSelector); return this; }; QtySelector.prototype.hasRange = function hasRange() { return this.el[0].hasAttribute('data-range-min-qty') && this.el[0].hasAttribute('data-range-max-qty'); }; QtySelector.prototype.isWithinRange = function isWithinRange(qty) { return parseInt(this.el.attr('data-range-min-qty'), 10) <= qty && parseInt(this.el.attr('data-range-max-qty'), 10) >= qty; }; QtySelector.prototype.isDistinct = function isDistinct() { return this.el.attr('data-price-type') !== 'GROUP'; }; /** * Application managing group price consilidation / merge * @listens to events: [update_main_selector.js.rezdy, change.js.qty_update, submit] * @emits events: [reset_selection.js.rezdy, update_qty.js.rezdy, hide.js.rezdy] * @param selector CSS selector * @returns {QuantityContainer} * @constructor */ var QuantityContainer = function QuantityContainer(selector, element) { this.selector = selector; this.el = $(element) || $(selector); this.mainSelector; this.quantitySelectors = []; this._init(); return this; }; QuantityContainer.prototype._init = function _init() { var self = this; this.quantitySelectors = $.map(this._getAllQtySelector(), function(element, index) { return new QtySelector(element, false, self, $('[data-session-merged]').length); }); if (this._shouldMergeQuantitySelector()) { //prevent others plugins to react on qty change since we are handling it. self.el.find('.input-quantities-list').off('change'); //Keep the main selector this.mainSelector = this.getDistinctSelector(1)[0]; this.mainSelector.isMain = true; //Main Selector must be the last to react to the event // That's why we unbind / rebind it. this.mainSelector.el .off('hide.js.rezdy') .off('enable.js.rezdy') .off('update_price.js.rezdy') .off('qty_update_unhandled.js.rezdy') .off('reset_selection.js.rezdy') .off('update_qty.js.rezdy'); this.mainSelector._init(); $(this.mainSelector.el).attr('data-group-price-merged', true); this.mainSelector.el.on('change.js.qty_update', this.dispatchQtyUpdate.bind(this)); //Unbind existing event handlers attached to quantity selectors this._unbindAvailabilityCallback(); //Hide group quantity selectors this._hideGroupSelectors(); //Assign Selector with new DOMElement as new mainSelector $(this).on('update_main_selector.js.rezdy', function (event) { //Prevent other instances to react to unwanted update events if (!event.payload.productId || event.payload.productId !== self.el.attr('data-product-id')) { return; } this.mainSelector.el = event.payload.selector; }).bind(this); //Set initial value for main selector. var selectWithValue = $(this.quantitySelectors).filter(function(index, qtySelector) { return parseInt(qtySelector.el.attr('data-initial-value'), 10) > 0 }); var initialPrice = selectWithValue.length ? parseInt(selectWithValue[0].el.attr('data-initial-value'), 10) : this._getMinQtyAndMaxQty().min; this.mainSelector.el[0].value = initialPrice; //Dispatch update event on change this.dispatchQtyUpdate(new jQuery.Event('initFakeSelect', { target: this.mainSelector.el[0] })); //Handle sumbit this.el.closest('form').on('submit', this.handleFormSubmit.bind(this)); } }; QuantityContainer.prototype.handleFormSubmit = function handleFormSubmit(event) { var self = this; var match = this.quantitySelectors.filter(function(element, index) { return !element.isMain && element.isWithinRange(self.mainSelector.el.val()); }).length; if (match) { this.mainSelector.el.attr('disabled', 'disabled'); } }; QuantityContainer.prototype.dispatchQtyUpdate = function dispatchQtyUpdate(event) { var self = this; var qty = event.target.value; //Restrict to limit if selector is virtual if ($(event.target).attr('data-price-type') == 'VIRTUAL' && !isNaN(parseInt(event.target.value, 10))) { var priceRange = this._getMinQtyAndMaxQty(); if (parseInt(event.target.value, 10) < priceRange.min) { qty = priceRange.min; } else if (parseInt(event.target.value, 10) > priceRange.max) { qty = priceRange.max; } event.target.value = qty; } var qtyUpdate = new jQuery.Event('update_qty.js.rezdy', { payload: { productId: event.target.getAttribute('data-product-id'), qty: qty, callback: function() { $('#' + self.mainSelector.el.attr('id')).removeAttr('disabled'); } } }); var qtyReset = new jQuery.Event('reset_selection.js.rezdy', { payload: { productId: event.target.getAttribute('data-product-id'), } }); $.event.trigger(qtyReset); $.event.trigger(qtyUpdate); }; QuantityContainer.prototype._hideGroupSelectors = function _hideGroupSelectors() { this.quantitySelectors.forEach(function(QtySelector, index) { if (QtySelector.el.attr('id') !== this.mainSelector.el.attr('id')) { var hideEvent = new jQuery.Event('hide.js.rezdy', { payload: { element: QtySelector.el, productId: QtySelector.el.attr('data-product-id') } }); $.event.trigger(hideEvent); } }, this); }; QuantityContainer.prototype._unbindAvailabilityCallback = function _unbindAvailabilityCallback() { $(document) .off('change.js.rezdy') .off('change.js.input') .off('blur.js.rezdy'); return this; }; QuantityContainer.prototype.getDistinctSelector = function getDistinctSelector(generateSelector) { var shouldGenerateSelector = generateSelector || false; var distinctSelector = this.quantitySelectors.filter(function(element, index){ return element.isDistinct(); }); if (!distinctSelector.length && shouldGenerateSelector) { return [this.generateMainSelector()]; } if (distinctSelector.length) { $(distinctSelector[0].el).attr('data-matching-qty', true); } return distinctSelector; }; QuantityContainer.prototype._getMinQtyAndMaxQty = function _getMinQtyAndMaxQty() { var self = this; return jQuery.makeArray(self.el.find('[data-range-min-qty]')).reduce(function(acc, current) { var min = parseInt($(current).attr('data-range-min-qty'), 10); var max = parseInt($(current).attr('data-range-max-qty'), 10); if (typeof acc.min == 'undefined' || acc.min > min) { acc.min = min; } if (typeof acc.max == 'undefined' || acc.max < max) { acc.max = max; } return acc; }, {min: undefined, max: undefined}); }; QuantityContainer.prototype.generateMainSelector = function generateMainSelector() { var self = this; var newSelect = $('<select></select>').attr('data-fake-qty-selector', true).addClass('input-quantities-list notranslate'); var rangeValue = this._getMinQtyAndMaxQty(); for (var i = rangeValue.min; i<= rangeValue.max; i++) { if (i > 20) { newSelect.append($('<option>') .text('> 20') .val('more') ); break; } newSelect.append( $('<option>') .text(i) .val(i) ); } newSelect.attr('data-product-id', self.el.find('[data-product-id]').first().attr('data-product-id')); newSelect.attr('data-price-type', 'VIRTUAL'); newSelect.css('width', '50px'); var label = $('<label class="control-label" for="fakeQtySelector"></label>').text(self.el.attr('data-unit-label')); label.append($('<span class="price-unit"></span>')); $('<div class="control-group"></div>') .append(label) .append($('<div class="change-quantity controls price-shown"></div>').append(newSelect)).insertAfter( self.el.find('h4') ); newSelect.find('option[value=' + rangeValue.min + ']').attr('selected', 'selected'); newSelect.val(rangeValue.min); return new QtySelector(newSelect, true, this); }; QuantityContainer.prototype._shouldMergeQuantitySelector = function _shouldMergeQuantitySelector() { return this._getAllQtySelector().length == $(this.quantitySelectors).filter( function(index, element) { return element.el.attr('data-price-type') == 'GROUP'; } ).length; }; QuantityContainer.prototype._getAllQtySelector = function _getAllQtySelector() { return this.el.find('.input-quantities-list'); }; var qtyContainers = []; $('.participants').each(function(index, element) { var children = $(element).find('[class*="input-quantities-list"]'); if (children.length > 1 && !children.find('[data-price-type="VIRTUAL"]').length) { qtyContainers.push(new QuantityContainer('.participants', element)); } }); }); })(jQuery) jQuery('body').on('click','#yt0',function(){jQuery.yii.submitForm(this,'',{'Product_id\x5B285161\x5D':'1'});return false;}); jQuery('#order-item-form').yiiactiveform({'validateOnSubmit':true,'successCssClass':'','attributes':[{'id':'OrderItem_preferredDate','inputID':'OrderItem_preferredDate','errorID':'OrderItem_preferredDate_em_','model':'OrderItem','name':'preferredDate','enableAjaxValidation':false,'clientValidation':function(value, messages, attribute) { if(jQuery.trim(value)=='') { messages.push("Please select a date"); } },'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true},{'summary':true}],'summaryID':'order\x2Ditem\x2Dform_es_','errorCss':'error'}); // Update prices to local currency document.dispatchEvent(new CustomEvent('rezdy-update-prices', {})); /** * Rate exchange for booking product list * * @import * @type {RateExchange} */ var rateExchange = rezdy.RateExchange; rateExchange.init(); rateExchange.applyRates(); }); /*]]>*/ </script> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"fac5ff6a9a","applicationID":"3719020","transactionName":"bwQBMRRWX0UCVBFYXlZOIgYSXl5YTHUKXlpRDwQmCVlFRAxbCVRDFxcKABE=","queueTime":0,"applicationTime":355,"atts":"Q0MCR1xMTEs=","errorBeacon":"bam.nr-data.net","agent":""}</script></body> </html>