BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
PRODID:-//WordPress - MECv7.34.2//EN
X-ORIGINAL-URL:https://sailon.no/
X-WR-CALNAME:Sailon.no
X-WR-CALDESC:Kunnskap til dine sjøopplevelser!
X-WR-TIMEZONE:Europe/Oslo
BEGIN:VTIMEZONE
TZID:Europe/Oslo
X-LIC-LOCATION:Europe/Oslo
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:20260329T030000
RRULE:FREQ=YEARLY;BYMONTH=03;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:20261025T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU
END:STANDARD
END:VTIMEZONE
REFRESH-INTERVAL;VALUE=DURATION:PT1H
X-PUBLISHED-TTL:PT1H
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
CLASS:PUBLIC
UID:MEC-34f9a343f945196b66f807e0eb6249fd@sailon.no
DTSTART;TZID=Europe/Oslo:20260522T080000
DTEND;TZID=Europe/Oslo:20260522T180000
DTSTAMP:20260522T202342Z
RDATE;TZID=Europe/Oslo:20260522T080000,20260625T120000,20260626T120000,20260627T120000,20260702T120000,20260703T120000,20260704T120000,20260709T120000,20260710T120000,20260711T120000,20260716T120000,20260717T120000,20260718T120000,20260723T120000,20260724T120000,20260725T120000,20260730T120000,20260731T120000,20260801T120000
CREATED:20260522
LAST-MODIFIED:20260613
PRIORITY:5
SEQUENCE:21
TRANSP:OPAQUE
SUMMARY:Fyrtårn-Safari fra Havna Hotel & Sjøbad
DESCRIPTION:\n\n\n\n\nNorsk\nCa. 60 minutter – Tur til Færder Fyr\nBli med på en spektakulær RiB-tur gjennom skjærgården mot det ikoniske Færder fyr. Underveis passerer vi vakre kystområder, åpne havstrekk og kjente landemerker som Verdens Ende og det karakteristiske vippefyret.\nDenne turen passer perfekt for deg som ønsker en kortere, men innholdsrik opplevelse med både fart, natur og historie.\n \nCa. 90 minutter – Færder Fyr og Fuglehuk\nOpplev to av Oslofjordens mest kjente fyr på én og samme tur. Denne utvidede RiB-opplevelsen tar deg fra fyr til fyr, med stoppunkter og spektakulære utsikter underveis.\nTuren inkluderer både Færder fyr og Fuglehuk fyr, ofte omtalt som portvokterne til Oslofjorden. Her møter du dramatisk natur, åpent hav og en del av norsk kysthistorie som må oppleves fra sjøen.\n \nViktig informasjon\nDet er viktig for oss at du skal ha en fantastisk opplevelse, og vi kjenner så altfor godt til hvordan dagsplaner kan bli litt flytende i ferier. Derfor tilbyr vi deg:\n\n24 timers åpent kjøp\nMuligheten til å flytte turen frem til 48 timer før avgang.\n\nVi forbeholder oss retten til å avlyse, eller flytte turer ved mindre enn 6 påmeldte, ved hendelser utenfor vår kontroll eller ved sykdom. Flytting av tur vil skje i samråd med deg, og ved avlysning vil hele beløpet refunderes.\nAvgjørelsen om gjennomføring av turen vil bli tatt 16.00 dagen før.\n \nØnsker du en mer privat opplevelse? Vi tilbyr også skreddersydde turer for private grupper og bedrifter.\nDette er inkludert\n\nRedningsvest\nBeskyttelsesbriller til bruk under turen\nTermodresser ved kjølige forhold\nLuer og votter ved behov\n\n \nPraktisk informasjon\nVi anbefaler oppmøte minimum 15 minutter før avgang utenfor resepsjonen på Havna Hotel & Sjøbad.\nSelv på varme sommerdager kan det bli kjølig ute på sjøen ved høy fart. Vi anbefaler derfor:\n\nVindjakke eller ekstra ytterlag\nVarm genser\nKomfortable sko med godt grep\n\nVed dårlig vær eller lave temperaturer stiller vi med ekstra varme klær slik at opplevelsen blir komfortabel for alle.\nTuren har moderat fysisk belastning. Gravide og personer med rygg- eller nakkeproblemer bør selv vurdere om aktiviteten passer.\n\n\n\n\nDet er av sikkerhetsgrunner satt minstehøyde på 140 cm.\n\n\n\n\n\n\n\nEnglish\nApprox. 60 minutes – Tour to Færder Lighthouse\nJoin us for a spectacular RIB tour through the archipelago towards the iconic Færder Lighthouse. Along the way, we pass beautiful coastal landscapes, open sea stretches, and famous landmarks such as Verdens Ende and the characteristic rocking beacon.\nThis tour is perfect for those who want a shorter but content-rich experience with speed, nature, and history.\n\nApprox. 90 minutes – Færder Lighthouse and Fulehuk\nExperience two of the Oslo Fjord’s most famous lighthouses on the same tour. This extended RIB adventure takes you from lighthouse to lighthouse, with stops and spectacular views along the way.\nThe tour includes both Færder Lighthouse and Fulehuk Lighthouse, often referred to as the guardians of the Oslo Fjord. Here, you will encounter dramatic nature, the open sea, and a part of Norwegian coastal history that must be experienced from the water.\n\nImportant Information\nIt is important to us that you have a fantastic experience, and we know all too well how holiday plans can become a little flexible. Therefore, we offer you:\n\n24-hour open purchase\nThe possibility to reschedule your tour up to 48 hours before departure\n\nWe reserve the right to cancel or reschedule tours if there are fewer than 6 participants, due to circumstances beyond our control, or in the case of illness. Any rescheduling will be done in consultation with you, and in the event of cancellation, the full amount will be refunded.\nThe decision on whether the tour will proceed will be made at 16:00 on the day before departure.\n\nWould you like a more private experience? We also offer tailor-made tours for private groups and companies.\nThis is included\n\nLife jacket\nProtective goggles for use during the tour\nThermal suits in cold conditions\nHats and mittens if needed\n\nPractical Information\nWe recommend arriving at least 15 minutes before departure outside the reception area at Havna Hotel & Sjøbad.\nEven on warm summer days, it can become chilly out at sea at high speeds. We therefore recommend:\n\nWindproof jacket or an extra outer layer\nWarm sweater\nComfortable shoes with good grip\n\nIn poor weather or low temperatures, we provide additional warm clothing to ensure the experience is comfortable for everyone.\nThe tour involves moderate physical activity. Pregnant women and people with back or neck problems should consider whether the activity is suitable for them.\nFor safety reasons, there is a minimum height requirement of 140 cm.\n\n\n\n\n\n\n\n    \n\n        \n            \n                60 Minutter            \n            \n        \n\n        \n            0 påmeldt\n        \n\n        \n            \n            \n        \n        \n            ▲ Minimum 6 for gjennomføring\n        \n\n        \n            ⚠️ Trenger 6 til for gjennomføring        \n    \n\n    \n    (function() {\n        const widget   = document.getElementById('boat-status-widget-60');\n        const bookedEl = widget.querySelector('.boat-booked');\n        const barEl    = widget.querySelector('.boat-progress-bar');\n        const labelEl  = widget.querySelector('.boat-status-label');\n        const dateEl   = widget.querySelector('.boat-selected-date');\n        const minimum  = parseInt(widget.dataset.minimum);\n        const ticketId = widget.dataset.ticketId;\n        const ajaxUrl  = 'https://sailon.no/wp-admin/admin-ajax.php';\n        const nonce    = 'df98733d69';\n        const visualMax = 12;\n\n        function updateWidget(booked, displayDate) {\n            const pct         = Math.min(100, (booked / visualMax) * 100);\n            const stillNeeded = minimum - booked;\n            bookedEl.textContent = booked;\n            barEl.style.width    = pct + '%';\n\n            // Show the selected date nicely formatted (2026-06-25 → 25.06.2026)\n            if (dateEl && displayDate) {\n                const parts = displayDate.split('-');\n                dateEl.textContent = parts[2] + '.' + parts[1] + '.' + parts[0];\n            }\n\n            if (booked >= minimum) {\n                barEl.style.background = '#27ae60';\n                labelEl.innerHTML = '✅ Turen gjennomføres!';\n            } else {\n                barEl.style.background = '#e67e22';\n                labelEl.innerHTML = '⚠️ Trenger ' + stillNeeded + ' til for gjennomføring';\n            }\n        }\n\n        function fetchCount(date) {\n            if (!date) return;\n            fetch(ajaxUrl, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n                body: new URLSearchParams({\n                    action: 'boat_status_get_count',\n                    nonce,\n                    date,\n                    ticket_id: ticketId\n                })\n            })\n            .then(r => r.json())\n            .then(data => {\n                if (data.success) updateWidget(data.data.booked, date);\n            })\n            .catch(err => console.error('[BoatStatus] AJAX error:', err));\n        }\n\n        // MEC value format: "1782378000:1782385200" (start:end unix timestamps)\n        function parseDate(val) {\n            const m = val.match(/^(\d+):/);\n            if (!m) return null;\n            const d = new Date(parseInt(m[1]) * 1000);\n            return d.getFullYear() + '-'\n                + String(d.getMonth() + 1).padStart(2, '0') + '-'\n                + String(d.getDate()).padStart(2, '0');\n        }\n\n        function attachToMecSelect() {\n            const sel = document.querySelector(\n                'select.mec-custom-nice-select, ' +\n                'select[name="book[date]"], ' +\n                'select[id^="mec_book_form_date"]'\n            );\n            if (!sel) return false;\n\n            sel.addEventListener('change', function() {\n                const date = parseDate(this.value);\n                if (date) fetchCount(date);\n            });\n\n            const date = parseDate(sel.value);\n            if (date) fetchCount(date);\n            return true;\n        }\n\n        let attempts = 0;\n        const iv = setInterval(() => {\n            if (attachToMecSelect() || ++attempts >= 10) clearInterval(iv);\n        }, 500);\n\n        updateWidget(0, '2026-07-25');\n    })();\n    \n        \n\n        \n            \n                90 Minutter            \n            \n        \n\n        \n            0 påmeldt\n        \n\n        \n            \n            \n        \n        \n            ▲ Minimum 6 for gjennomføring\n        \n\n        \n            ⚠️ Trenger 6 til for gjennomføring        \n    \n\n    \n    (function() {\n        const widget   = document.getElementById('boat-status-widget-90');\n        const bookedEl = widget.querySelector('.boat-booked');\n        const barEl    = widget.querySelector('.boat-progress-bar');\n        const labelEl  = widget.querySelector('.boat-status-label');\n        const dateEl   = widget.querySelector('.boat-selected-date');\n        const minimum  = parseInt(widget.dataset.minimum);\n        const ticketId = widget.dataset.ticketId;\n        const ajaxUrl  = 'https://sailon.no/wp-admin/admin-ajax.php';\n        const nonce    = 'df98733d69';\n        const visualMax = 12;\n\n        function updateWidget(booked, displayDate) {\n            const pct         = Math.min(100, (booked / visualMax) * 100);\n            const stillNeeded = minimum - booked;\n            bookedEl.textContent = booked;\n            barEl.style.width    = pct + '%';\n\n            // Show the selected date nicely formatted (2026-06-25 → 25.06.2026)\n            if (dateEl && displayDate) {\n                const parts = displayDate.split('-');\n                dateEl.textContent = parts[2] + '.' + parts[1] + '.' + parts[0];\n            }\n\n            if (booked >= minimum) {\n                barEl.style.background = '#27ae60';\n                labelEl.innerHTML = '✅ Turen gjennomføres!';\n            } else {\n                barEl.style.background = '#e67e22';\n                labelEl.innerHTML = '⚠️ Trenger ' + stillNeeded + ' til for gjennomføring';\n            }\n        }\n\n        function fetchCount(date) {\n            if (!date) return;\n            fetch(ajaxUrl, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n                body: new URLSearchParams({\n                    action: 'boat_status_get_count',\n                    nonce,\n                    date,\n                    ticket_id: ticketId\n                })\n            })\n            .then(r => r.json())\n            .then(data => {\n                if (data.success) updateWidget(data.data.booked, date);\n            })\n            .catch(err => console.error('[BoatStatus] AJAX error:', err));\n        }\n\n        // MEC value format: "1782378000:1782385200" (start:end unix timestamps)\n        function parseDate(val) {\n            const m = val.match(/^(\d+):/);\n            if (!m) return null;\n            const d = new Date(parseInt(m[1]) * 1000);\n            return d.getFullYear() + '-'\n                + String(d.getMonth() + 1).padStart(2, '0') + '-'\n                + String(d.getDate()).padStart(2, '0');\n        }\n\n        function attachToMecSelect() {\n            const sel = document.querySelector(\n                'select.mec-custom-nice-select, ' +\n                'select[name="book[date]"], ' +\n                'select[id^="mec_book_form_date"]'\n            );\n            if (!sel) return false;\n\n            sel.addEventListener('change', function() {\n                const date = parseDate(this.value);\n                if (date) fetchCount(date);\n            });\n\n            const date = parseDate(sel.value);\n            if (date) fetchCount(date);\n            return true;\n        }\n\n        let attempts = 0;\n        const iv = setInterval(() => {\n            if (attachToMecSelect() || ++attempts >= 10) clearInterval(iv);\n        }, 500);\n\n        updateWidget(0, '2026-07-25');\n    })();\n    \n    \n\n\n\n\n\n\n\n\n
URL:https://sailon.no/events/sel-safari-fra-havna-tjome-hotell/
ORGANIZER;CN=Sail On AS:MAILTO:kurs@sailon.no
CATEGORIES:Rib Sommer Eventyr
LOCATION:Havnaveien 50 3145 Tjøme, Norge
ATTACH;FMTTYPE=image/jpeg:https://sailon.no/wp-content/uploads/2026/05/292226973.jpg
END:VEVENT
END:VCALENDAR
