En vedette
Spa extérieur privé ouvert toute l'année
Climatisation & chauffage central pour un confort maximal
Foyer extérieur aménagé pour les soirées sous les étoiles
Immense véranda couverte avec éclairage d'ambiance
Barbecue au propane & table de pique-nique
Vue imprenable en hauteur sur la montagne
Plafond cathédrale de 21 pieds & foyer au bois en pierre
Chalet perché sans aucun voisin en vue
Service d'entretien ménager quotidien disponible sur demande ($)
Salle de divertissement avec baby-foot & table d'air hockey
Peut accueillir confortablement jusqu'à 14 invités
Un chalet chaleureux en bois rond canadien niché au cœur des Laurentides, situé à seulement 25 minutes de Mont-Tremblant. Offrant une atmosphère douce et accueillante, idéale pour se ressourcer en famille ou entre amis. Configuration spacieuse répartie sur trois niveaux.
Cuisine ouverte , espace salle à manger convivial , et salon avec vue
Salle familiale avec baby-foot, table de hockey pneumatique, téléviseur et portes françaises ouvrant sur la nature
Deux balcons privés attenants aux chambres de l'étage supérieur
Grande terrasse extérieure de 100 pieds avec barbecue
Spa extérieur 4 saisons idéal pour relaxer après une journée d'aventures
Disposition du Chalet
Étage principal : Cuisine, salle à manger, salon cathédrale, salle de bain, 1 chambre
Étage supérieur : Salle de bain complète, 2 chambres privées
Rez-de-jardin : Salle familiale de divertissement, salle de bain, 2 chambres
Configuration des Lits
1 chambre avec 1 lit KING (2 invités)
2 chambres avec 2 lits QUEEN (4 invités)
1 chambre avec 2 lits superposés (4 invités)
1 chambre avec 1 lit double (2 invités)
1 canapé-lit dans la salle familiale (2 personnes)
1 lit simple d'appoint à l'étage (1 personne)
Ce que nous fournissons
Draps et serviettes d'hôtellerie, articles de toilette essentiels (savon, shampoing, revitalisant, papier hygiénique), essentiels de cuisine de base (sel, poivre, huile, café, filtres, sucre) et produits d'entretien ménager (pastilles pour lave-vaisselle, liquide vaisselle, éponges, sacs poubelle, détergent à lessive).
Ce que nous ne fournissons pas
Essuie-tout jetables (nous fournissons des linges réutilisables dans notre démarche écologique), serviettes en papier, papier d'aluminium et épices spécifiques, et recharge de propane pour le barbecue (saisonnier du 1er mai au 1er novembre ; vous pouvez apporter votre bonbonne ou recharger celle sur place).
Activités à Proximité
Que vous soyez amateur de plein air, de sports de glisse ou en quête de pure relaxation en nature, les Laurentides regorgent d'activités exceptionnelles :
ACTIVITÉS EN TOUTES SAISONS
• Découverte du village de Labelle : Boutiques charmantes, boulangeries et restaurants locaux
• Casino de Mont-Tremblant : Tentez votre chance au casino au pied des pistes
• Marchés locaux : Produits frais du terroir et créations artisanales
• Observation des étoiles : Soirées inoubliables autour du feu crépitant
ACTIVITÉS HIVERNALES
• Ski alpin & Planche à neige : Dévalez les pentes de Mont-Tremblant (25 min) ou Mont-Blanc (20 min)
• Ski de fond : Réseau féerique de pistes laurentiennes pour tous les calibres
• Raquette à neige : Explorez les forêts enneigées à pied
• Traîneau à chiens : Vivez l'expérience nordique magique en sentier boréal
• Patinage sur glace : Patinoires et lacs gelés à proximité
• Motoneige : Accès direct aux sentiers provinciaux de motoneige
• Pêche sur glace : Initiez-vous à la pêche blanche
• Spas scandinaves : Détente absolue dans les bains thermaux réputés de la région
ACTIVITÉS ESTIVALES
• Randonnée pédestre : Sentiers somptueux et belvédères panoramiques
• Équitation : Balades guidées à cheval en pleine forêt
• Plage & Baignade : Plage publique du lac à quelques minutes
• Golf : Parcours de championnat de renommée internationale à Tremblant
• Vélo de route & Le P'tit Train du Nord : Sentier linéaire légendaire
• Barbecues & Repas en plein air : Savourez vos grillades sur la vaste terrasse privée
Avis important d'accès hivernal :
En saison hivernale, les chutes de neige et la glace peuvent rendre l'allée privée montagneuse exigeante en raison de la pente. Nous recommandons vivement d'arriver avec un véhicule 4x4 ou à traction intégrale (AWD) muni de bons pneus d'hiver pour un accès en toute sécurité.
Cuisine & Salle à manger (17)
• Cuisine tout équipée
• Réfrigérateur spacieux
• Congélateur
• Cuisinière
• Four de cuisson
• Four à micro-ondes
• Lave-vaisselle
• Cafetière & Théière
• Café filtre & filtres inclus
• Bouilloire électrique
• Grille-pain
• Mélangeur (blender)
• Verres à vin & coupes
• Grande table à manger
• Ustensiles de cuisine complets
• Plaques de cuisson & moules
• Accessoires de barbecue
Éléments essentiels & Confort de vie (24)
• Climatisation centrale
• Chauffage électrique & d'appoint
• Foyer au bois en pierre
• Ventilateurs de plafond
• Ventilateurs portatifs
• Connexion Internet haute vitesse
• Wi-Fi dans tout le chalet
• Téléviseur à écran plat
• Espace de télétravail convivial
• Laveuse moderne
• Sécheuse performante
• Buanderie sur place
• Literie & draps d'hôtellerie
• Essentiels (Serviettes, savons, papier)
• Shampoing & gel douche
• Sèche-cheveux
• Eau chaude continue
• Cintres dans les penderies
• Rangement pour vêtements
• Entrée privée autonome
• Balcons privés
• Barbecue extérieur
• Terrain boisé privé
• Ingrédients de base en cuisine
Salle de bain & Bien-être (3)
• Spa / Bain tourbillon 4 saisons
• Baignoire de détente
• Produits d'hygiène et savons
Plein air & Aménagement extérieur (2)
• Mobilier extérieur & terrasse couverte
• Rond de feu extérieur avec chaises Adirondack
Sécurité du logement (5)
• Détecteur de fumée connecté
• Détecteur de monoxyde de carbone
• Trousse de premiers soins
• Extincteur d'incendie
• Grillage pare-feu pour le foyer
Stationnement & Borne VE (2)
• Stationnement gratuit sur place (jusqu'à 5 véhicules)
• Borne de recharge pour véhicule électrique (VE)
Politiques & Spécificités du séjour (6)
• Animaux de compagnie acceptés (avec frais)
• Dépôt de bagages autorisé sur entente
• Séjours de longue durée bienvenus
• Nettoyage complet avant chaque arrivée
• Accès aux lacs et plages à proximité
• Livres & jeux pour enfants disponibles
Arrivée & Départ
• L'arrivée débute à 17h00
• Le départ s'effectue avant 11h00
• Entrée autonome sans contact grâce à une serrure numérique avec code sécurisé unique.
Heures de tranquillité & Respect de la nature
• Les heures de tranquillité sont observées de 22h00 à 8h00 pour préserver la quiétude montagnarde et la faune environnante.
• Fêtes bruyantes, rassemblements festifs non autorisés et systèmes sonores puissants à l'extérieur formellement interdits.
Tabac & Animaux de compagnie
• Chalet strictement non-fumeur à l'intérieur.
• Les animaux bien élevés sont acceptés avec enregistrement préalable (80 $ par animal). Merci de ne pas les laisser monter sur les canapés et de ramasser leurs besoins à l'extérieur.
Consignes pour le Foyer & le Spa
• Foyer au bois : Une bûche écologique d'allumage est offerte pour votre première soirée. Du bois supplémentaire est disponible auprès de nous ou à la station locale.
• Foyer extérieur : Fermé en hiver pour des raisons de sécurité et d'accumulation de neige.
• Eau du spa : Professionnellement vidangée, assainie et équilibrée chimiquement avant chaque arrivée. L'eau peut présenter une légère teinte minérale naturelle propre aux puits artésiens des Laurentides.
Avertissement d'accès hivernal : Pendant les mois d'hiver enneigés, un véhicule à 4 roues motrices (4x4 ou AWD) avec bons pneus d'hiver est fortement recommandé en raison de la pente de la montagne.
Cliquez sur les dates pour réserver
Appliquer les dates →
Nombre de voyageurs
Jusqu'à 14 personnes
−
14
+
Hébergement hôte :
Sélectionnez vos dates
Ménage & literie de départ :
280,00 $ CAD
Avantage réservation directe :
Économisez ~15% (0 $ de commission)
Taxe sur l'hébergement du Québec (3,5 %) :
0,00 $ CAD
Taxes de vente applicables (TPS 5% + TVQ 9,975%) :
0,00 $ CAD
Total estimé (CAD) :
Ajoutez vos dates
✦ Transparence 100 % hôte : Tarifs synchronisés en direct avec Hostaway. Zéro surprise au paiement.
Réserver en direct →
Dès 290 $
/ nt
★ 4.8 (0 +)
Ajoutez des dates pour le devis saisonnier
Voir le détail des prix ▾
Choisir les dates →
Chalet MYSA
Photo 1 sur 45
Utilisez les flèches ou la touche Échap
Chalet MYSA • Refuge Scandinave en Montagne • Galerie Haute Résolution (45 Photos)
+ avgRate.toLocaleString(lbvIsFr ? 'fr-CA' : 'en-CA');
if (priceCurrency) priceCurrency.innerText = 'CAD';
if (priceSubtitle) priceSubtitle.innerHTML = '
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ baseVal.toLocaleString(lbvIsFr ? 'fr-CA' : 'en-CA') + ' CAD ' + (lbvIsFr ? 'total pour ' + nights + ' nuits' : 'total for ' + nights + (nights === 1 ? ' night' : ' nights'));
if (priceTaxLine) priceTaxLine.innerText = '+ ' + (lbvIsFr ? (Math.round(totalTax).toLocaleString('fr-CA') + ' $ taxes (TPS/TVQ)') : ('
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ Math.round(totalTax).toLocaleString('en-CA') + ' taxes (GST/QST)'));
if (costPill) costPill.innerText = ' ~
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ Math.round(total / guests) + ' CAD / ' + (lbvIsFr ? 'invité' : 'guest') + ' (' + guests + ' ' + (lbvIsFr ? 'invités' : 'guests') + ')';
if (ctaText) ctaText.innerText = (lbvIsFr ? 'Réserver en direct •
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
: 'Reserve Direct •
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
) + Math.round(total).toLocaleString('en-CA') + ' CAD →';
if (panelRateLabel) panelRateLabel.innerText = '
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ baseVal.toLocaleString(lbvIsFr ? 'fr-CA' : 'en-CA') + ' CAD (
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ avgRate + ' × ' + nights + ' nt)';
if (panelCleaningFee) panelCleaningFee.innerText = '
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ cleaningVal + ' CAD' + (lbvIsFr ? ' / séjour' : ' / stay');
if (extraVal > 0) {
if (panelExtraGuestRow) panelExtraGuestRow.style.display = 'flex';
if (panelExtraGuestVal) panelExtraGuestVal.innerText = '
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ extraVal + ' CAD';
} else {
if (panelExtraGuestRow) panelExtraGuestRow.style.display = 'none';
}
function formatMoney(val) {
return lbvIsFr ? (val.toFixed(2).replace('.', ',') + ' $ CAD') : ('
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ val.toFixed(2) + ' CAD');
}
if (panelSalesTax) panelSalesTax.innerText = formatMoney(salesTaxVal);
if (panelVatTax) panelVatTax.innerText = formatMoney(vatVal);
if (panelLodgingTax) panelLodgingTax.innerText = formatMoney(lodgingTaxVal);
if (panelGrandTotal) panelGrandTotal.innerText = formatMoney(total);
if (panelTotalRow) panelTotalRow.style.display = 'flex';
// Mobile Bottom Bar & Sheet
var mobilePrice = document.getElementById('lbv-mobile-price');
var mobileDatesSummary = document.getElementById('lbv-mobile-dates-summary');
var mobileBreakdownTrigger = document.getElementById('lbv-mobile-breakdown-trigger');
var mobileCtaBtn = document.getElementById('lbv-mobile-cta-btn');
var mbSub = document.getElementById('lbv-mb-sheet-dates-sub');
var mbRateDesc = document.getElementById('lbv-mb-sheet-rate-desc');
var mbRateVal = document.getElementById('lbv-mb-sheet-rate-val');
var mbCleaningVal = document.getElementById('lbv-mb-sheet-cleaning-val');
var mbExtraGuestRow = document.getElementById('lbv-mb-sheet-extraguest-row');
var mbExtraGuestVal = document.getElementById('lbv-mb-sheet-extraguest-val');
var mbLodgingTax = document.getElementById('lbv-mb-sheet-lodging-tax');
var mbSalesTax = document.getElementById('lbv-mb-sheet-sales-tax');
var mbVatTax = document.getElementById('lbv-mb-sheet-vat-tax');
var mbGrandTotal = document.getElementById('lbv-mb-sheet-grand-total');
if (mobilePrice) mobilePrice.innerText = '
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ avgRate;
if (mobileDatesSummary) mobileDatesSummary.innerText = formatDisplayDate(startIso) + ' – ' + formatDisplayDate(endIso) + ' ·
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ Math.round(total).toLocaleString('en-CA') + ' total';
if (mobileBreakdownTrigger) mobileBreakdownTrigger.style.display = 'inline-block';
if (mobileCtaBtn) mobileCtaBtn.innerText = (lbvIsFr ? 'Réserver •
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
: 'Reserve •
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
) + Math.round(total).toLocaleString('en-CA') + ' CAD →';
if (mbSub) mbSub.innerText = formatDisplayDate(startIso) + ' – ' + formatDisplayDate(endIso) + ' (' + nights + (lbvIsFr ? ' nuits · ' : ' nights · ') + guests + (lbvIsFr ? ' invités' : ' guests') + ')';
if (mbRateDesc) mbRateDesc.innerText = (lbvIsFr ? 'Hébergement (
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
: 'Accommodation (
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
) + avgRate + ' × ' + nights + ' nt):';
if (mbRateVal) mbRateVal.innerText = '
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ baseVal.toFixed(2) + ' CAD';
if (mbCleaningVal) mbCleaningVal.innerText = '
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ cleaningVal.toFixed(2) + ' CAD';
if (extraVal > 0) {
if (mbExtraGuestRow) mbExtraGuestRow.style.display = 'flex';
if (mbExtraGuestVal) mbExtraGuestVal.innerText = '
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();
+ extraVal.toFixed(2) + ' CAD';
} else {
if (mbExtraGuestRow) mbExtraGuestRow.style.display = 'none';
}
if (mbSalesTax) mbSalesTax.innerText = formatMoney(salesTaxVal);
if (mbVatTax) mbVatTax.innerText = formatMoney(vatVal);
if (mbLodgingTax) mbLodgingTax.innerText = formatMoney(lodgingTaxVal);
if (mbGrandTotal) mbGrandTotal.innerText = formatMoney(total);
})
.catch(function(err) {
console.warn('Hostaway quote fetch error:', err);
});
}
setInterval(checkAndCalculateDates, 350);
// 12. DIRECT CHECKOUT ROUTING (Guarantees zero drop-off of dates & guests)
window.lbvGoToCheckout = function() {
if (!selectedCheckInIso || !selectedCheckOutIso) {
window.lbvOpenCalendarModal();
updateMinStayNotice('initial');
return;
}
var minStay = getMinStayForCheckIn(selectedCheckInIso);
var dIn = new Date(selectedCheckInIso + 'T12:00:00');
var dOut = new Date(selectedCheckOutIso + 'T12:00:00');
var nights = Math.round((dOut - dIn) / (1000 * 60 * 60 * 24));
if (nights < minStay) {
window.lbvOpenCalendarModal();
updateMinStayNotice('violation', minStay, nights, selectedCheckInIso, selectedCheckOutIso);
return;
}
var checkoutUrl = 'https://book.chaletslabellevie.ca/checkout/' + lbvChaletHostawayId + '?start=' + selectedCheckInIso + '&end=' + selectedCheckOutIso + '&numberOfGuests=' + currentGuests;
window.location.href = checkoutUrl;
};
window.lbvHandleMainCta = function() { window.lbvGoToCheckout(); };
window.lbvHandleMobileCta = function() { window.lbvGoToCheckout(); };
// 13. INTERCEPT HOSTAWAy NATIVE WIDGET BUTTON WITH CAPTURE PHASE
function setupHostawayWidgetInterceptor() {
var calEl = document.getElementById('hostaway-calendar-widget');
if (!calEl) return;
calEl.addEventListener('click', function(e) {
var btn = e.target.closest('button');
if (btn && btn.textContent && /Reserve|Book|Réserver/i.test(btn.textContent)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
checkAndCalculateDates(true);
window.lbvGoToCheckout();
return false;
}
}, true);
}
setupHostawayWidgetInterceptor();
// 14. SMOOTH SCROLL TO INQUIRY CONTACT FORM
window.lbvScrollToInquiryForm = function(e) {
if (e && e.preventDefault) e.preventDefault();
var formSec = document.getElementById('Inquiry') || document.querySelector('.elementor-widget-form');
if (formSec) {
formSec.scrollIntoView({ behavior: 'smooth', block: 'start' });
setTimeout(function() {
var firstInput = formSec.querySelector('input[name*="name"], input[type="text"], input');
if (firstInput) {
firstInput.focus({ preventScroll: true });
}
}, 500);
}
};
// 14. DEDICATED LANGUAGE SWITCHER ENHANCER (Mobile & Desktop)
(function initLanguageSwitcherEnhancer() {
function enhanceSwitcher() {
var isFr = window.location.pathname.indexOf('/fr/') !== -1;
var targetUrl = isFr ? 'https://chaletslabellevie.ca/chalet-mysa-spa-porch-firepit/' : 'https://chaletslabellevie.ca/fr/chalet-mysa-spa-veranda-foyer/';
// A. Direct navigation on header switcher links
var headerLinks = document.querySelectorAll('header.elementor-location-header .cpel-switcher__lang:not(.cpel-switcher__lang--active) a, header.elementor-location-header .elementor-widget-polylang-language-switcher a');
headerLinks.forEach(function(a) {
var txt = (a.textContent || '').trim().toUpperCase();
if ((!isFr && txt.indexOf('FR') !== -1) || (isFr && txt.indexOf('EN') !== -1)) {
a.setAttribute('href', targetUrl);
a.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
});
// B. Inject language switcher into mobile hamburger menu
var mobileMenus = document.querySelectorAll('header.elementor-location-header .elementor-nav-menu--dropdown ul.elementor-nav-menu');
mobileMenus.forEach(function(menu) {
if (!menu.querySelector('.lbv-mobile-lang-item')) {
var li = document.createElement('li');
li.className = 'menu-item lbv-mobile-lang-item';
li.style.cssText = 'border-top: 1px solid rgba(214,169,117,0.3) !important; margin: 12px 14px 6px 14px !important; padding-top: 10px !important; list-style: none !important;';
var badge = isFr ? 'EN' : 'FR';
li.innerHTML = '
' +
'' + (isFr ? '🇬🇧 Switch to English' : ' Passer au Français') + ' ' +
'' + badge + ' ' +
' ';
var link = li.querySelector('a');
if (link) {
link.onclick = function(e) {
e.preventDefault();
window.location.href = targetUrl;
};
}
menu.appendChild(li);
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', enhanceSwitcher);
} else {
enhanceSwitcher();
}
setTimeout(enhanceSwitcher, 500);
setTimeout(enhanceSwitcher, 1500);
setTimeout(enhanceSwitcher, 3000);
})();
})();