(function(){var embedId=+(new Date())+'-'+Math.random().toString().substr(2);var CARTFRAME_EMBED_ID='fareharbor-cartframe-iframe';var LIGHTFRAME_EMBED_ID='fareharbor-lightframe-iframe';var initialHeight="";var staticHeight="";var embedSrc="";var fallbackEmbedSrc="";var lightframeFallback="";var lightframePath="https://fareharbor.com/embeds/book";var cartframeSrc="https://fareharbor.com/embeds/cart/";var originPath="https://fareharbor.com";var backUrl="";var embedLanguage="";var isWrapped=false;var isLightframed=true;var isAlwaysLightframed=false;var isAutolightframe=false;var lightframeShade="";var isFallback=!(window.JSON&&window.JSON.stringify)||!window.addEventListener;var isScriptInBody=document.body!==null;var isScriptInIframe=window.top!==window.self;var width=Math.max(document.documentElement.clientWidth,window.innerWidth||0);var isTouchEnabled=('ontouchstart'in window)||navigator.msMaxTouchPoints||navigator.maxTouchPoints;var isTouchUsed=false;var shouldLightframe=function(){if(!isLightframed){return false;} if(!isScriptInBody){return false;} if(isScriptInIframe){return false;} if(isFallback){return false;} if(isAlwaysLightframed){return true;} if(isTouchEnabled&&width<1100){return false;} if(isTouchUsed){return false;} return true;};var shouldCartframe=function(){if(!isScriptInBody){return false;} if(isScriptInIframe){return false;} if(isFallback){return false;} return true;};var hasClass=function(element,className){return(' '+element.className+' ').replace(/[\t\r\n\f]/g,' ').indexOf(' '+className+' ')>-1;};var toggleClass=function(element,className,add){if(add){if(hasClass(element,className)){return;} element.className=element.className+' '+className;return;} var elementClassName=(' '+element.className+' ').replace(/[\t\r\n\f]/g,' ');element.className=elementClassName.replace(' '+className+' ',' ');};var ignore=function(){};var console=window.console||{};console.log=console.log||ignore;console.warn=console.warn||ignore;console.error=console.error||ignore;var pageState=(function(){var state=window.FH?window.FH._:{};return function(key,value){if(!key){return state;} if(typeof value==='undefined'){return state[key];} state[key]=value;};})();var ANALYTICS_PAGE_STATE_KEY='analytics';var analyticsPageState=pageState(ANALYTICS_PAGE_STATE_KEY);if(typeof analyticsPageState!=='object'){analyticsPageState={isProviderCallbackSet:false,callbacks:[],ga4TagClientMap:{},isGa4ClientIdsLoading:false,ga4ClientIdsCallbacks:[]};pageState(ANALYTICS_PAGE_STATE_KEY,analyticsPageState);} var hostPageHasGA4=function(){return Boolean(window.google_tag_manager||window.google_tag_data||window.dataLayer||window.gTag);} function composeUrl(url,query,avoidDuplicates=false){const shouldReturnRelativeUrl=!/^https?:\/\//i.test(url);const newUrl=new URL(url,originPath);Object.keys(query).forEach(function(param){const paramValue=query[param];if(avoidDuplicates&&newUrl.searchParams.getAll(param).length>0){return;} if(paramValue===undefined||paramValue===null){return;} const valuesToSet=(Array.isArray(paramValue)?paramValue:[paramValue]);valuesToSet.forEach(function(value){newUrl.searchParams.append(param,value);});});if(shouldReturnRelativeUrl){return newUrl.toString().substring(newUrl.origin.length);} return newUrl.toString();} var getShortnameFromUrl=function(url){var regex=new RegExp('/embeds/[^/]+/([a-zA-Z0-9-_]+)/[^/]*.*$');var match=url.split('?')[0].match(regex);var shortname=match&&match[1];return shortname};var extractLightframePath=(function(){var ligthframePathPattern=new RegExp('^'+originPath+'/embeds/book/(\\w+.*)');return function(url){var matches=ligthframePathPattern.exec(url);if(matches&&matches.length===2){return'/'+matches[1];} return false;};})();var closest=function(element,tagName,container){while(element.tagName.toLowerCase()!==tagName){if(container&&element===container){return;} element=element.parentElement;if(!element){return;}} return element;};const storage={get(key){const storedValue=window.localStorage.getItem(key);try{return JSON.parse(storedValue);}catch(e){return storedValue;}},set(key,value){try{window.localStorage.setItem(key,JSON.stringify(value));} catch(e){}},};var getHref=function(){var href='';try{href=window.top.location.href;} catch(e){} return href;};function getHostQueryParam(name){try{const searchParams=new URLSearchParams(window.top.location.search);const values=searchParams.getAll(name);if(values.length===0){return null;} if(values.length===1){return values[0];} return values;} catch{return null;}} var generateUuid=function(){return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c){var r=Math.random()*16|0;var v=c==='x'?r:(r&0x3|0x8);return v.toString(16);});};var isValidUuid=(function(){var UUID_REGEX=/^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;return function(uuid){return uuid&&UUID_REGEX.test(uuid);};})();var persistentGetter=function(storageKey,queryKey,options){options=options||{};var value=pageState(storageKey)||getHostQueryParam(queryKey)||storage.get(storageKey)||'';if(options.validator&&!options.validator(value)){value='';} if(!value&&options.generator){value=options.generator();} if(value){storage.set(storageKey,value);pageState(storageKey,value);} return value;};var userIdentifier=persistentGetter('fareharbor-uuid','fh-u',{validator:isValidUuid,generator:generateUuid});const marketingParameters={onlineBookingReferences:persistentGetter('fareharbor-refs','ref'),};var appendPropertiesToUrl=(function(){var yesNo=function(bool){return bool?'yes':'no';};var keyValue=function(k,v){return k+','+v+';';};var query={u:userIdentifier,'from-ssl':yesNo(window.location.protocol==='https:')};var includesAny=function(dictionary,keys){keys=typeof keys==='string'?[keys]:keys;for(var i=0,len=keys.length;i!existingRefs.includes(ref));return composeUrl(url,{ref:refsToSet,},false,);};var addBackUrl=function(){query['back']=window.location.href;} const addLanguage=function(url){const shortname=getShortnameFromUrl(url);if(embedLanguage){query.language=embedLanguage;}else if(shortname){const language=storage.get('fareharbor-language-'+shortname);if(language){query.language=language;}}};return function(url){url=addOnlineBookingReferences(url);linkGoogleAnalytics();linkGoogleAnalytics4();linkGoogleAds();linkFacebook();linkAdroll();addTags();addConsentFlag();copyNecessaryUrlParametersFromHostPage();if(!(new RegExp('[&\\?]back=').test(url))){addBackUrl();} addLanguage(url);return composeUrl(url,query,true);};})();var createStyles=function(){var styles=document.getElementById('fareharbor-styles');if(styles){return;} var css='';if(isScriptInBody){var styleContainer=document.createElement('div');styleContainer.style.setProperty('display','none','important');styleContainer.innerHTML=css;document.body.insertBefore(styleContainer,document.body.firstChild);} else{document.write(css);}};var createdCartframe=false;var createCartframe=function(){if(!shouldCartframe()){return;} var cartframe=document.getElementById('fareharbor-cartframe');if(cartframe){return;} createdCartframe=true;var container=document.createElement('div');container.id='fareharbor-cartframe';var name=embedName(CARTFRAME_EMBED_ID);var src=appendPropertiesToUrl(cartframeSrc);container.innerHTML='';createStyles();document.body.insertBefore(container,document.body.firstChild);};var showCartframe=function(){if(!createdCartframe){return;} var cartframe=document.getElementById('fareharbor-cartframe');if(!cartframe){return;} createStyles();toggleClass(document.documentElement,'fareharbor-showing-cartframe',true);cartframe.className='fareharbor-cart-is-showing';};var hideCartframe=function(){if(!createdCartframe){return;} var cartframe=document.getElementById('fareharbor-cartframe');if(!cartframe){return;} toggleClass(document.documentElement,'fareharbor-showing-cartframe',false);cartframe.className='';};var notifyFrame=function(frameId,type,data){var iframe=document.getElementById(frameId);if(!iframe){return;} var messageObject={type:type};if(data){messageObject.data=data;} var message=window.JSON.stringify(messageObject);iframe.contentWindow.postMessage(message,'*');};var createLightframe=function(){var lightframe=document.getElementById('fareharbor-lightframe');if(lightframe){return;} var container=document.createElement('div');container.id='fareharbor-lightframe';if(lightframeShade){document.documentElement.classList.add('fareharbor-lightframe-shade--'+lightframeShade);} container.innerHTML='
'+'
';document.body.insertBefore(container,document.body.firstChild);};var openLightframe=function(url,lightframeFallbackOption,isLightframeDisabled){lightframeFallbackOption=lightframeFallbackOption||lightframeFallback;url=appendPropertiesToUrl(url);var lightframe=document.getElementById('fareharbor-lightframe');if(!lightframe||!shouldLightframe()||isLightframeDisabled){var fullUrl=originPath+url;if(lightframeFallbackOption!=='classic'){fullUrl=lightframePath+url;if(backUrl){fullUrl=composeUrl(fullUrl,{back:backUrl},true);}} window.top.location.href=fullUrl;return true;} createStyles();var iframe=document.getElementById(LIGHTFRAME_EMBED_ID);var lightframeLoading=document.getElementById('fareharbor-lightframe-loading');lightframeLoading.className='fareharbor-is-loading';lightframe.className='fareharbor-is-showing';var lightframeData={parentUrl:backUrl||getHref()};lightframeData=window.JSON.stringify(lightframeData);lightframeData=encodeURIComponent(lightframeData);if(!iframe){window.FH=window.FH||{};window.FH._bodyOverflow=document.body.style.overflow;window.FH._documentOverflow=document.documentElement.style.overflow;document.body.style.overflow='hidden';document.documentElement.style.overflow='hidden';iframe=document.createElement('iframe');iframe.id=LIGHTFRAME_EMBED_ID;iframe.name='fareharbor-lightframe:'+lightframeData;iframe.title='FareHarbor';iframe.frameBorder='0';iframe.border='0';iframe.width='100%';iframe.style.opacity='0';iframe.allow="payment *";iframe.src=lightframePath+url;lightframe.appendChild(iframe);} else{iframe.style.opacity='0';iframe.allow="payment *";iframe.src=lightframePath+url;} toggleClass(document.documentElement,'fareharbor-showing-lightframe',true);var lightframeClickToOpenTime=new Date();iframe.addEventListener('load',function(){var lightframeFinishedLoadingTime=new Date();this.focus();notifyFrame(LIGHTFRAME_EMBED_ID,'fareharbor-lightframe-created',{lightframeClickToOpenTime:lightframeClickToOpenTime,lightframeFinishedLoadingTime:lightframeFinishedLoadingTime})});return true;};var closeLightframe=function(){toggleClass(document.documentElement,'fareharbor-showing-lightframe',false);var lightframe=document.getElementById('fareharbor-lightframe');var iframe=document.getElementById(LIGHTFRAME_EMBED_ID);if(!lightframe){return false;} lightframe.className='';var wasRemoved=false;if(iframe){lightframe.removeChild(iframe);wasRemoved=true;} document.body.style.overflow=window.FH._bodyOverflow;document.documentElement.style.overflow=window.FH._documentOverflow;return true;};var createFallback=function(fallbackSrc){if(!fallbackSrc){return;} var fallbackOptions='{"embedId":"'+embedId+'"}';fallbackOptions=encodeURIComponent(fallbackOptions);document.write('');var fallback=document.getElementById(embedId);fallback.style.height="";return fallback;};var embedName=function(id){var options={isLightframed:shouldLightframe(),parentUrl:getHref(),embedId:id};return'fareharbor-embed:'+encodeURIComponent(window.JSON.stringify(options));};var createEmbedHtml=function(src){if(!src){return;} src=appendPropertiesToUrl(src);var name=embedName(embedId);var iframeHtml='';if(isWrapped){iframeHtml='
'+iframeHtml+'
';} return iframeHtml;};var createEmbed=function(){var iframeHtml=createEmbedHtml(embedSrc);if(!iframeHtml){return;} document.write(iframeHtml);var iframe=document.getElementById(embedId);iframe.style.height=initialHeight;if(staticHeight){iframe.style.height=staticHeight;}};var isReady=false;if(!window.FH){isReady=true;(function(){var QUERY_KEYS={asn:'asn',asnRef:'asn-ref',ref:'ref',items:'selected-items',fullItems:'full-items',kiosk:'kiosk',sheet:'sheet',sheetUuid:'sheet-uuid',schedule:'schedule',scheduleUuid:'schedule-uuid',back:'back',buttonTags:'button-tags',flow:'flow',language:'language',branding:'branding',bookableOnly:'bookable-only',};var DEFAULTS={fullItems:'no'};var zipQuery=function(options){var query={};for(var key in QUERY_KEYS){if(QUERY_KEYS.hasOwnProperty(key)){query[QUERY_KEYS[key]]=options[key]||DEFAULTS[key];}} return query;};window.FH={version:"",_:pageState(),open:function(options){try{options=options||{};if(!options.shortname){return false;} var lightframeFallback;if(options.fallback){lightframeFallback=options.fallback;delete options.fallback;} var isLightframeDisabled=false;if(options.lightframe){isLightframeDisabled=options.lightframe==='no';delete options.lightframe;} var path='/'+options.shortname+'/';if(options.view){if(options.view==='items'){} else if(options.view==='all-availability'){path+='items/calendar/';} else if(options.view.item){path+='items/'+options.view.item.toString()+'/';if(options.view.availability){path+='availability/'+options.view.availability.toString()+'/book/';} else{path+='calendar/';}}} options.items=options.items?options.items.join(','):null;path=composeUrl(path,zipQuery(options));return openLightframe(path,lightframeFallback,isLightframeDisabled);}catch(e){return false;}},close:function(){return closeLightframe();},autoLightframe:function(options){if(isFallback){return;} if(typeof options==='string'){options={className:options};} else if(options instanceof HTMLElement){options={container:options};} else if(!options||typeof options!=='object'){options={};} options.container=options.container instanceof HTMLElement?options.container:window.document;options.callback=typeof options.callback==='function'?options.callback:ignore;options.container.addEventListener('click',function(event){var link=closest(event.target,'a',options.container);if(!link){return;} var onclick=link.getAttribute('onclick');var isOverride=onclick&&options.overrideOnclick!=='all';if(isOverride&&(!options.overrideOnclick||onclick.indexOf('FH.open(')!==-1)){return;} var path=extractLightframePath(link.href);if(!path){return;} if(options.className&&!hasClass(link,options.className)){return;} try{options.callback(link);} catch(e){console.error('FareHarbor AutoLightframe: error in callback function:',e);} var isLightframeDisabled=path.indexOf('lightframe=no')!==-1;var didOpen=openLightframe(path,'simple',isLightframeDisabled);if(didOpen){event.preventDefault();event.stopPropagation();}},true);}};})();} if(isAutolightframe){window.FH.autoLightframe();} var isOneTrustScriptIncluded=function(){var regex=new RegExp('^https://(cookie-cdn\.cookiepro\.com)|(cdn.cookielaw.org)/.*/otSDKStub.js$');for(var i=0,len=document.scripts.length;i