3 Days Mahale Chimp Trek Safari
Travelers
on
Select date
Get a Free Quote
Send us a Quote, and we will respond within 24 hours
Age at the end of the tour
This 3-day Mahale chimp trekking safari takes you deep into the remote wilderness of Mahale Mountains National Park, one of Africa’s most exclusive primate destinations. Located along the crystal-clear shores of Lake Tanganyika, Mahale offers an extraordinary combination of chimpanzee tracking, forest hiking, and beach relaxation.
Accessible only by flight and boat, this safari is ideal for travelers seeking off-the-beaten-path Tanzania experiences far from the crowded northern parks. You’ll trek through dense rainforest to observe habituated chimpanzee families, then unwind on pristine lakeshore beaches.
Perfect for short luxury escapes, primate lovers, and unique safari add-ons.
Tour Features
Mid-Range Tour
This mid-range tour uses comfortable lodges and permanent tented camps with private bathrooms.
Private Tour
This tour is organized exclusively for you and will not be shared with other travelers.
Solo Traveler Friendly
Solo travelers can book this tour, subject to a single supplement.
Can Start Any Day
If availability permits, this tour can start on any day of the year.
Fully Customizable
This tour can be completely customized based on your preferences and travel dates.
Starts in Dar es Salaam
This tour starts from Dar es Salaam.
Fly in Safari
This tour is a fly-in to the park, reducing time by road.
Activities & Transportation
Walking Safaris – Explore nature on foot with an armed ranger.
Chimpanzee Trekking – Forest hikes to track wild chimps in Mahale or Gombe.
Mountain Trekking – Kilimanjaro, Meru, or crater rim hikes.
Beach Extensions – Add Zanzibar, Mafia or Pemba for snorkeling and relaxation.
Private Safari Vehicle – Exclusive use of the car for your group.
Airport Transfers – Pick-up and drop-off before and after the safari.
Domestic Flights – Fly-in to the parks .
A transfer from and back to the airport is included
Accommodation & Meals
This tour is priced using Luxury accommodations. Budget and mid-range options are available on request. Similar lodges or camps may be used depending on availability.
Day 1&2
All Meals Included
Rates Per Person
Start dates
Solo (1 room)
2 people (1 room)
3 people (2 rooms)
4 people (2 rooms)
5 people (3 rooms)
6 people (3 rooms)
7+ people
Rates Per Person
$2,750
$2,050
$1,950
$1,850
$1,800
$1,750
Get Quote
Return domestic flights (shared schedule) Park fees and chimp trekking permits Accommodation (2 nights) All meals as per itinerary Boat transfers Professional English-speaking guide Drinking water
International flights Visa fees Travel insurance Tips & personal expenses Optional activities (kayaking, dhow cruise) Alcoholic beverages
This tour starts and ends in Dar es Salaam.
Domestic flights: Scheduled light aircraft to Mahale (included)
Transfers: Boat transfer from airstrip to lodge
Alternative departure from Arusha available on request.
Day 1
Fly to Mahale Mountains National Park
Your journey begins with a morning flight from Dar es Salaam (or Arusha on request) to Mahale via a scheduled light aircraft. Upon arrival at the airstrip, enjoy a scenic boat transfer along Lake Tanganyika to your lodge.
After check-in and lunch, spend the afternoon relaxing on the white sandy beach or take a short guided forest walk. The setting is incredibly peaceful—mountains rising behind you, and one of Africa’s deepest lakes stretching endlessly ahead.
Wildlife in Fly to Mahale Mountains National Park
Meals & Drinks:
Lunch and Dinner
After an early breakfast, depart with expert guides for your chimpanzee trekking adventure in the Mahale rainforest. Trekking can take anywhere from 1 to 4 hours depending on chimpanzee movement.
Once located, you’ll spend one unforgettable hour observing the chimpanzees—watching their social interactions, grooming, feeding, and playful behavior in their natural habitat.
Return to camp for lunch, followed by leisure time. Optional activities include kayaking, swimming, or a sunset dhow cruise on Lake Tanganyika.
Wildlife in Chimpanzee Trekking Experience
Meals & Drinks:
All Meals Included
Enjoy a relaxed morning by the lake before your boat transfer back to the airstrip. Board your scheduled flight returning to Dar es Salaam.
Optional extension: combine with Katavi or Zanzibar.
Wildlife in Return Flight to Dar es Salaam
Meals & Drinks:
Next: Day by Day
Interested in This Tour?
Get a Free Quote
Send us a Quote, and we will respond within 24 hours
document.addEventListener('DOMContentLoaded', function() {
// Heart icon toggle
const heartBtn = document.querySelector('.btn-heart-hero');
if (heartBtn) {
heartBtn.addEventListener('click', function() {
const icon = this.querySelector('i');
if (this.classList.contains('favorited')) {
this.classList.remove('favorited');
icon.classList.remove('fa-solid');
icon.classList.add('fa-regular');
} else {
this.classList.add('favorited');
icon.classList.remove('fa-regular');
icon.classList.add('fa-solid');
}
});
}
// Tab switching functionality
const navLinks = document.querySelectorAll('.tour-nav-tabs .nav-link');
const overviewSections = document.querySelectorAll('.content-section:not(.day-by-day-content):not(.rates-content):not(.inclusions-content):not(.getting-there-content):not(.faq-content):not(.always-visible)');
const dayByDaySection = document.querySelector('.day-by-day-content');
const ratesSection = document.querySelector('.rates-content');
const inclusionsSection = document.querySelector('.inclusions-content');
const gettingThereSection = document.querySelector('.getting-there-content');
const faqSection = document.querySelector('.faq-content');
const alwaysVisibleSections = document.querySelectorAll('.always-visible');
// Ensure always-visible sections are always shown
function ensureAlwaysVisible() {
alwaysVisibleSections.forEach(section => {
section.style.display = 'block';
});
}
function showOverview() {
overviewSections.forEach(section => {
section.style.display = 'block';
});
if (dayByDaySection) {
dayByDaySection.style.display = 'none';
}
if (ratesSection) {
ratesSection.style.display = 'none';
}
if (inclusionsSection) {
inclusionsSection.style.display = 'none';
}
if (gettingThereSection) {
gettingThereSection.style.display = 'none';
}
ensureAlwaysVisible();
}
function showDayByDay() {
overviewSections.forEach(section => {
section.style.display = 'none';
});
if (dayByDaySection) {
dayByDaySection.style.display = 'block';
}
if (ratesSection) {
ratesSection.style.display = 'none';
}
if (inclusionsSection) {
inclusionsSection.style.display = 'none';
}
if (gettingThereSection) {
gettingThereSection.style.display = 'none';
}
if (faqSection) {
faqSection.style.display = 'none';
}
ensureAlwaysVisible();
}
function showRates() {
overviewSections.forEach(section => {
section.style.display = 'none';
});
if (dayByDaySection) {
dayByDaySection.style.display = 'none';
}
if (ratesSection) {
ratesSection.style.display = 'block';
}
if (inclusionsSection) {
inclusionsSection.style.display = 'none';
}
if (gettingThereSection) {
gettingThereSection.style.display = 'none';
}
ensureAlwaysVisible();
}
function showInclusions() {
overviewSections.forEach(section => {
section.style.display = 'none';
});
if (dayByDaySection) {
dayByDaySection.style.display = 'none';
}
if (ratesSection) {
ratesSection.style.display = 'none';
}
if (inclusionsSection) {
inclusionsSection.style.display = 'block';
}
if (gettingThereSection) {
gettingThereSection.style.display = 'none';
}
if (faqSection) {
faqSection.style.display = 'none';
}
ensureAlwaysVisible();
}
function showGettingThere() {
overviewSections.forEach(section => {
section.style.display = 'none';
});
if (dayByDaySection) {
dayByDaySection.style.display = 'none';
}
if (ratesSection) {
ratesSection.style.display = 'none';
}
if (inclusionsSection) {
inclusionsSection.style.display = 'none';
}
if (gettingThereSection) {
gettingThereSection.style.display = 'block';
}
ensureAlwaysVisible();
}
navLinks.forEach(link => {
link.addEventListener('click', function(e) {
e.preventDefault();
// Remove active class from all links
navLinks.forEach(l => l.classList.remove('active'));
// Add active class to clicked link
this.classList.add('active');
// Show/hide content based on tab
const href = this.getAttribute('href');
if (href === '#day-by-day') {
showDayByDay();
} else if (href === '#rates') {
showRates();
} else if (href === '#inclusions') {
showInclusions();
} else if (href === '#getting-there') {
showGettingThere();
} else if (href === '#faqs') {
showFAQs();
} else {
showOverview();
}
});
});
});
// Mobile menu toggle
document.addEventListener('DOMContentLoaded', function() {
const navbarToggle = document.getElementById('navbarToggle');
const navbarMenu = document.querySelector('.navbar-menu');
if (navbarToggle && navbarMenu) {
navbarToggle.addEventListener('click', function() {
navbarMenu.classList.toggle('active');
const icon = this.querySelector('i');
if (navbarMenu.classList.contains('active')) {
icon.classList.remove('fa-bars');
icon.classList.add('fa-times');
} else {
icon.classList.remove('fa-times');
icon.classList.add('fa-bars');
}
});
}
});
// Calendar and Travelers functionality for tour detail page
document.addEventListener('DOMContentLoaded', function() {
// Get URL parameters
const urlParams = new URLSearchParams(window.location.search);
const startDateParam = urlParams.get('start_date');
const adultsParam = urlParams.get('adults');
const childrenParam = urlParams.get('children');
// Travelers state (declare early to avoid temporal dead zone)
let adultsCount = 0;
let childrenCount = 0;
const childAgesSelectedDetail = [];
// Calendar elements
const dateField = document.querySelector('.quote-form-section-new .date-field');
const dateInput = dateField ? dateField.querySelector('.quote-input') : null;
const calendarPanel = dateField ? dateField.querySelector('.calendar-panel') : null;
const calendarCloseBtn = calendarPanel ? calendarPanel.querySelector('.calendar-close-btn') : null;
const calendarDays = calendarPanel ? calendarPanel.querySelector('.calendar-days') : null;
const calendarMonthYear = calendarPanel ? calendarPanel.querySelector('.calendar-month-year') : null;
const prevMonthBtn = calendarPanel ? calendarPanel.querySelector('.prev-month') : null;
const nextMonthBtn = calendarPanel ? calendarPanel.querySelector('.next-month') : null;
const dateFieldContent = dateField ? dateField.querySelector('.date-field-content') : null;
// Travelers elements
const travelersField = document.querySelector('.quote-form-section-new .travelers-field');
const travelersInput = travelersField ? travelersField.querySelector('.travelers-display-input') : null;
const travelersPanel = travelersField ? travelersField.querySelector('.travelers-panel') : null;
const travelersCloseBtn = travelersPanel ? travelersPanel.querySelector('.travelers-close-btn') : null;
const travelersDoneBtn = travelersPanel ? travelersPanel.querySelector('.travelers-done-btn') : null;
const travelersFieldContent = travelersField ? travelersField.querySelector('.travelers-field-content') : null;
const adultsCountInput = document.getElementById('adults-count-detail');
const childrenCountInput = document.getElementById('children-count-detail');
const childrenAgesContainer = document.getElementById('children-ages-detail');
const counterButtons = travelersPanel ? travelersPanel.querySelectorAll('.counter-btn') : [];
// Mobile meta elements
const mobileTravelersText = document.getElementById('mobile-travelers-text');
const mobileDateText = document.getElementById('mobile-date-text');
// Function to close all panels
function closeAllPanels() {
// Close calendar panel
if (dateField) {
dateField.classList.remove('active');
}
if (calendarPanel) {
calendarPanel.style.display = 'none';
calendarPanel.classList.remove('mobile-float');
calendarPanel.style.opacity = '';
calendarPanel.style.pointerEvents = '';
}
// Close travelers panel
if (travelersField) {
travelersField.classList.remove('active');
}
if (travelersPanel) {
travelersPanel.style.display = 'none';
travelersPanel.classList.remove('mobile-float');
}
}
// Calendar functionality
let currentDate = new Date();
let selectedDate = null;
let currentMonth = currentDate.getMonth();
let currentYear = currentDate.getFullYear();
// Parse date from URL parameter
function parseDateFromURL(dateString) {
if (!dateString) return null;
// Decode URL encoding
dateString = decodeURIComponent(dateString);
// Try different date formats
let date = new Date(dateString);
if (isNaN(date.getTime())) {
// Try format like "Dec 7, 2025" or "Dec 5, 2025"
const months = {
'Jan': 0, 'Feb': 1, 'Mar': 2, 'Apr': 3, 'May': 4, 'Jun': 5,
'Jul': 6, 'Aug': 7, 'Sep': 8, 'Oct': 9, 'Nov': 10, 'Dec': 11
};
const parts = dateString.trim().split(/\s+/);
if (parts.length >= 3) {
const month = months[parts[0]];
const day = parseInt(parts[1].replace(',', ''));
const year = parseInt(parts[2]);
if (month !== undefined && !isNaN(day) && !isNaN(year)) {
date = new Date(year, month, day);
}
}
}
if (isNaN(date.getTime())) {
return null;
}
return date;
}
// Pre-fill date from URL if provided (BEFORE rendering calendar)
if (startDateParam && dateInput) {
const parsedDate = parseDateFromURL(startDateParam);
if (parsedDate && !isNaN(parsedDate.getTime())) {
selectedDate = parsedDate;
const formattedDate = formatDate(selectedDate);
dateInput.value = formattedDate;
// Set calendar to show the selected date's month
currentMonth = parsedDate.getMonth();
currentYear = parsedDate.getFullYear();
if (typeof updateMobileMeta === 'function') {
updateMobileMeta();
}
}
}
function formatDate(date) {
if (!date) return '';
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
return `${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;
}
function renderCalendar() {
if (!calendarDays || !calendarMonthYear) return;
const firstDay = new Date(currentYear, currentMonth, 1);
const lastDay = new Date(currentYear, currentMonth + 1, 0);
const daysInMonth = lastDay.getDate();
const startingDayOfWeek = (firstDay.getDay() + 6) % 7;
const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
calendarMonthYear.textContent = `${monthNames[currentMonth]} ${currentYear}`;
calendarDays.innerHTML = '';
for (let i = 0; i < startingDayOfWeek; i++) {
const emptyDay = document.createElement('div');
emptyDay.className = 'calendar-day empty';
calendarDays.appendChild(emptyDay);
}
const today = new Date();
today.setHours(0, 0, 0, 0);
for (let day = 1; day <= daysInMonth; day++) {
const dayElement = document.createElement('div');
dayElement.className = 'calendar-day';
dayElement.textContent = day;
const cellDate = new Date(currentYear, currentMonth, day);
cellDate.setHours(0, 0, 0, 0);
if (cellDate < today) {
dayElement.classList.add('past');
} else {
dayElement.classList.add('available');
if (selectedDate && cellDate.getTime() === selectedDate.getTime()) {
dayElement.classList.add('selected');
}
dayElement.addEventListener('click', function(e) {
e.stopPropagation();
e.preventDefault();
selectedDate = new Date(currentYear, currentMonth, day);
const formattedDate = formatDate(selectedDate);
if (dateInput) {
dateInput.value = formattedDate;
}
if (typeof updateMobileMeta === 'function') {
updateMobileMeta();
}
closeCalendar();
// If mobile flyout is open, close it and restore panel
if (mobileCalPanel && mobileCalPanel.getAttribute('aria-hidden') === 'false') {
closeMobileCalendarFly();
}
});
}
calendarDays.appendChild(dayElement);
}
}
function openCalendar() {
closeAllPanels(); // Close other panels first
// Reset to current month when opening
currentMonth = currentDate.getMonth();
currentYear = currentDate.getFullYear();
renderCalendar();
if (dateField) {
dateField.classList.add('active');
}
if (calendarPanel) {
calendarPanel.style.display = 'block';
calendarPanel.style.opacity = '1';
calendarPanel.style.pointerEvents = 'auto';
}
}
function closeCalendar() {
if (dateField) dateField.classList.remove('active');
if (calendarPanel) {
calendarPanel.style.display = 'none';
calendarPanel.style.opacity = '';
calendarPanel.style.pointerEvents = '';
}
}
if (dateField && calendarPanel) {
// Use current month and year (or from URL if date was set)
if (!selectedDate) {
currentMonth = currentDate.getMonth();
currentYear = currentDate.getFullYear();
}
renderCalendar();
if (dateFieldContent) {
dateFieldContent.addEventListener('click', function(e) {
e.stopPropagation();
openCalendar();
});
}
dateField.addEventListener('click', function(e) {
openCalendar();
});
if (calendarCloseBtn) {
calendarCloseBtn.addEventListener('click', function(e) {
e.stopPropagation();
closeCalendar();
});
}
if (prevMonthBtn) {
prevMonthBtn.addEventListener('click', function(e) {
e.stopPropagation();
currentMonth--;
if (currentMonth < 0) {
currentMonth = 11;
currentYear--;
}
renderCalendar();
});
}
if (nextMonthBtn) {
nextMonthBtn.addEventListener('click', function(e) {
e.stopPropagation();
currentMonth++;
if (currentMonth > 11) {
currentMonth = 0;
currentYear++;
}
renderCalendar();
});
}
document.addEventListener('click', function(e) {
if (dateField && !dateField.contains(e.target)) {
closeCalendar();
}
});
}
// Pre-fill travelers from URL parameters (BEFORE updateTravelersDisplay is called)
if (adultsParam) {
adultsCount = parseInt(adultsParam) || 0;
}
if (childrenParam) {
childrenCount = parseInt(childrenParam) || 0;
}
function updateTravelersDisplay() {
let displayText = '';
if (adultsCount > 0) {
displayText = `${adultsCount} Adult${adultsCount > 1 ? 's' : ''}`;
}
if (childrenCount > 0) {
if (displayText) displayText += ', ';
displayText += `${childrenCount} Child${childrenCount > 1 ? 'ren' : ''}`;
}
if (!displayText) {
displayText = '2 travelers';
}
if (travelersInput) travelersInput.value = displayText;
// Also update the input fields
if (adultsCountInput) {
adultsCountInput.value = adultsCount;
}
if (childrenCountInput) {
childrenCountInput.value = childrenCount;
}
if (typeof updateMobileMeta === 'function') {
updateMobileMeta();
}
}
function attachAgeSelectListenersDetail(container) {
if (!container) return;
container.querySelectorAll('select.age-select').forEach((sel, idx) => {
sel.addEventListener('change', () => {
childAgesSelectedDetail[idx] = sel.value || '';
});
});
}
function updateChildrenAges() {
if (!childrenAgesContainer) return;
const previousValues = Array.from(childrenAgesContainer.querySelectorAll('select.age-select')).map(sel => sel.value || '');
childrenAgesContainer.innerHTML = '';
for (let i = 1; i <= childrenCount; i++) {
const ageGroup = document.createElement('div');
ageGroup.className = 'child-age-group';
const prevVal = previousValues[i - 1] || childAgesSelectedDetail[i - 1] || '';
ageGroup.innerHTML = `
<label class="child-label">Child ${i}:</label>
<select class="age-select" data-child="${i}">
<option value="">- Age -</option>
${Array.from({length: 18}, (_, j) => {
const val = j.toString();
const selected = prevVal === val ? 'selected' : '';
return `<option value="${val}" ${selected}>${j}</option>`;
}).join('')}
</select>
`;
childrenAgesContainer.appendChild(ageGroup);
}
attachAgeSelectListenersDetail(childrenAgesContainer);
}
function openTravelersPanel() {
closeAllPanels(); // Close other panels first
if (travelersField) {
travelersField.classList.add('active');
}
if (travelersPanel) {
travelersPanel.style.display = 'block';
travelersPanel.style.opacity = '1';
travelersPanel.style.pointerEvents = 'auto';
}
}
function closeTravelersPanel() {
if (travelersField) travelersField.classList.remove('active');
if (travelersPanel) {
travelersPanel.style.display = 'none';
travelersPanel.style.opacity = '';
travelersPanel.style.pointerEvents = '';
}
}
if (travelersField && travelersPanel) {
// Update display and children ages (will use pre-filled values from URL)
updateTravelersDisplay();
updateChildrenAges();
if (travelersFieldContent) {
travelersFieldContent.addEventListener('click', function(e) {
e.stopPropagation();
openTravelersPanel();
});
}
travelersField.addEventListener('click', function(e) {
openTravelersPanel();
});
if (travelersCloseBtn) {
travelersCloseBtn.addEventListener('click', function(e) {
e.stopPropagation();
closeTravelersPanel();
});
}
counterButtons.forEach(btn => {
btn.addEventListener('click', function(e) {
e.stopPropagation();
const type = this.getAttribute('data-type');
const isIncrease = this.classList.contains('counter-increase');
if (type === 'adults') {
if (isIncrease) {
adultsCount++;
} else {
if (adultsCount > 0) adultsCount--;
}
if (adultsCountInput) adultsCountInput.value = adultsCount;
} else if (type === 'children') {
if (isIncrease) {
childrenCount++;
} else {
if (childrenCount > 0) childrenCount--;
}
if (childrenCountInput) childrenCountInput.value = childrenCount;
updateChildrenAges();
}
const decreaseBtn = this.parentElement.querySelector('.counter-decrease');
if (type === 'adults') {
decreaseBtn.disabled = adultsCount <= 0;
} else {
decreaseBtn.disabled = childrenCount <= 0;
}
});
});
document.querySelectorAll('.counter-decrease').forEach(btn => {
const type = btn.getAttribute('data-type');
if (type === 'adults') {
btn.disabled = adultsCount <= 0;
} else {
btn.disabled = childrenCount <= 0;
}
});
if (travelersDoneBtn) {
travelersDoneBtn.addEventListener('click', function(e) {
e.stopPropagation();
updateTravelersDisplay();
closeTravelersPanel();
});
}
document.addEventListener('click', function(e) {
const clickedInsidePanel = travelersPanel && travelersPanel.contains(e.target);
const clickedInsideField = travelersField && travelersField.contains(e.target);
const mobileQuoteMeta = document.querySelector('.mobile-hero-quote .mobile-quote-meta');
const clickedInsideMobileMeta = mobileQuoteMeta && mobileQuoteMeta.contains(e.target);
if (!clickedInsideField && !clickedInsidePanel && !clickedInsideMobileMeta) {
closeTravelersPanel();
}
});
}
function updateMobileMeta() {
if (mobileTravelersText) {
const totalTravelers = (adultsCount || 0) + (childrenCount || 0);
mobileTravelersText.textContent = totalTravelers > 0 ? `${totalTravelers} traveler${totalTravelers > 1 ? 's' : ''}` : 'Travelers';
}
if (mobileDateText) {
mobileDateText.textContent = selectedDate ? formatDate(selectedDate) : 'Select date';
}
}
updateMobileMeta();
// Mobile meta click handlers: open mobile fly panels
const mobileTravelersItem = mobileTravelersText ? mobileTravelersText.closest('.meta-item') : null;
const mobileDateItem = mobileDateText ? mobileDateText.closest('.meta-item') : null;
const mobileTravPanel = document.getElementById('mobile-travelers-panel');
const mobileCalPanel = document.getElementById('mobile-calendar-panel');
const mobileTravBody = mobileTravPanel ? mobileTravPanel.querySelector('.mobile-fly-panel__body') : null;
const mobileCalBody = mobileCalPanel ? mobileCalPanel.querySelector('.mobile-fly-panel__body') : null;
const mobileTravClose = document.getElementById('mobile-travelers-close');
const mobileTravDone = document.getElementById('mobile-travelers-done');
const mobileCalClose = document.getElementById('mobile-calendar-close');
// Store original locations for moving panels into mobile overlays
const travOrigin = { parent: null, next: null };
const calOrigin = { parent: null, next: null };
function moveNodeInto(node, container, origin) {
if (!node || !container) return;
if (!origin.parent) {
origin.parent = node.parentNode;
origin.next = node.nextSibling;
}
container.innerHTML = '';
container.appendChild(node);
}
function restoreNode(node, origin) {
if (!node || !origin.parent) return;
if (origin.next) {
origin.parent.insertBefore(node, origin.next);
} else {
origin.parent.appendChild(node);
}
}
function openMobileFly(panel) {
if (!panel) return;
panel.style.display = 'flex';
panel.setAttribute('aria-hidden', 'false');
}
function closeMobileFly(panel) {
if (!panel) return;
panel.style.display = 'none';
panel.setAttribute('aria-hidden', 'true');
}
function bindMobileMetaClick(target, handler) {
if (!target || typeof handler !== 'function') return;
const invoke = (e) => {
e.preventDefault();
e.stopPropagation();
handler();
};
target.addEventListener('click', invoke);
target.addEventListener('touchstart', invoke, { passive: false });
}
function syncCountsFromInputs() {
adultsCount = parseInt((adultsCountInput && adultsCountInput.value) ? adultsCountInput.value : '0') || 0;
childrenCount = parseInt((childrenCountInput && childrenCountInput.value) ? childrenCountInput.value : '0') || 0;
}
function openMobileTravelersFly() {
if (!mobileTravPanel) return;
closeAllPanels();
console.log('Mobile travelers flyout open');
syncCountsFromInputs();
if (travelersPanel && mobileTravBody) {
moveNodeInto(travelersPanel, mobileTravBody, travOrigin);
travelersPanel.style.display = 'block';
travelersPanel.style.opacity = '1';
travelersPanel.style.pointerEvents = 'auto';
travelersPanel.classList.add('active');
// ensure age dropdowns reflect current children count
updateChildrenAges();
}
openMobileFly(mobileTravPanel);
}
function closeMobileTravelersFly() {
if (travelersPanel) {
console.log('Mobile travelers flyout close');
travelersPanel.style.display = 'none';
travelersPanel.style.opacity = '';
travelersPanel.style.pointerEvents = '';
travelersPanel.classList.remove('active');
restoreNode(travelersPanel, travOrigin);
}
closeMobileFly(mobileTravPanel);
}
function openMobileCalendarFly() {
if (!mobileCalPanel) return;
closeAllPanels();
console.log('Mobile calendar flyout open');
if (calendarPanel && mobileCalBody) {
moveNodeInto(calendarPanel, mobileCalBody, calOrigin);
calendarPanel.style.display = 'block';
calendarPanel.style.opacity = '1';
calendarPanel.style.pointerEvents = 'auto';
}
openMobileFly(mobileCalPanel);
}
function closeMobileCalendarFly() {
if (calendarPanel) {
console.log('Mobile calendar flyout close');
calendarPanel.style.display = 'none';
calendarPanel.style.opacity = '';
calendarPanel.style.pointerEvents = '';
restoreNode(calendarPanel, calOrigin);
}
closeMobileFly(mobileCalPanel);
}
bindMobileMetaClick(mobileTravelersText, openMobileTravelersFly);
bindMobileMetaClick(mobileTravelersItem, openMobileTravelersFly);
bindMobileMetaClick(mobileDateText, openMobileCalendarFly);
bindMobileMetaClick(mobileDateItem, openMobileCalendarFly);
if (mobileTravClose) {
mobileTravClose.addEventListener('click', (e) => {
e.preventDefault();
closeMobileTravelersFly();
});
}
if (mobileTravDone) {
mobileTravDone.addEventListener('click', (e) => {
e.preventDefault();
closeMobileTravelersFly();
// Sync to desktop counts
if (adultsCountInput) adultsCountInput.value = adultsCount;
if (childrenCountInput) childrenCountInput.value = childrenCount;
updateTravelersDisplay();
});
}
if (mobileCalClose) {
mobileCalClose.addEventListener('click', (e) => {
e.preventDefault();
closeMobileCalendarFly();
});
}
[mobileTravPanel, mobileCalPanel].forEach(panel => {
if (panel) {
panel.addEventListener('click', (e) => {
if (e.target === panel) {
closeMobileFly(panel);
}
});
}
});
// Next tab button handler
const tabNextBtn = document.querySelector('.tab-next-btn');
function updateNextButtonLabel() {
if (!tabNextBtn) return;
const tabs = Array.from(document.querySelectorAll('.tour-nav-tabs .nav-link'));
if (tabs.length === 0) return;
const activeIndex = tabs.findIndex(t => t.classList.contains('active'));
const nextIndex = activeIndex >= 0 ? (activeIndex + 1) % tabs.length : 1 % tabs.length;
const nextLabel = tabs[nextIndex].textContent.trim();
tabNextBtn.innerHTML = `Next: ${nextLabel} <i class="fa-solid fa-chevron-right ms-2"></i>`;
tabNextBtn.setAttribute('data-next-tab', tabs[nextIndex].getAttribute('href'));
}
function goToNextTab() {
const tabs = Array.from(document.querySelectorAll('.tour-nav-tabs .nav-link'));
if (tabs.length === 0) return;
const activeIndex = tabs.findIndex(t => t.classList.contains('active'));
const nextIndex = activeIndex >= 0 ? (activeIndex + 1) % tabs.length : 0;
const tabLink = tabs[nextIndex];
const targetId = tabLink.getAttribute('href');
if (tabLink) {
tabLink.click();
}
setTimeout(function() {
const targetContent = document.querySelector(targetId);
if (targetContent) {
targetContent.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
updateNextButtonLabel();
}, 50);
}
if (tabNextBtn) {
tabNextBtn.addEventListener('click', function(e) {
e.preventDefault();
goToNextTab();
});
}
// Update label on load and when tabs change
updateNextButtonLabel();
document.querySelectorAll('.tour-nav-tabs .nav-link').forEach(link => {
link.addEventListener('click', () => {
setTimeout(updateNextButtonLabel, 50);
});
});
// FAQ two-column: switch active Q&A on nav link click
document.querySelectorAll('.faq-nav-link').forEach(link => {
link.addEventListener('click', function(e) {
e.preventDefault();
var idx = this.getAttribute('data-faq-index');
if (idx == null) return;
document.querySelectorAll('.faq-nav-col .faq-nav-link').forEach(function(l) { l.classList.remove('active'); });
this.classList.add('active');
document.querySelectorAll('.faq-detail-col .faq-item').forEach(function(item) {
item.classList.toggle('active', item.getAttribute('data-faq-index') === idx);
});
});
});
// Mobile floating quote button on scroll (show when hero section is out of view)
const mobileQuoteSection = document.querySelector('.mobile-hero-quote');
const mobileQuoteBtn = document.getElementById('get-quote-btn-mobile');
const mobileViewport = window.matchMedia('(max-width: 767.98px)');
function setFloatingQuoteBtn(isSectionVisible) {
if (!mobileQuoteBtn) return;
if (!mobileViewport.matches) {
mobileQuoteBtn.classList.remove('is-floating', 'hide');
return;
}
if (isSectionVisible) {
mobileQuoteBtn.classList.remove('is-floating');
} else {
mobileQuoteBtn.classList.add('is-floating');
mobileQuoteBtn.classList.remove('hide');
}
}
if (mobileQuoteSection && mobileQuoteBtn && 'IntersectionObserver' in window) {
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
setFloatingQuoteBtn(entry.isIntersecting);
});
}, { threshold: 0.1 });
observer.observe(mobileQuoteSection);
mobileViewport.addEventListener('change', () => setFloatingQuoteBtn(true));
}
// Handle "Get a Free Quote" button click
const quoteButtons = document.querySelectorAll('#get-quote-btn-detail, #get-quote-btn-mobile, #get-quote-btn-interested');
const checkoutBaseUrlPHP = "https:\/\/ottosafariguide.com\/tours-checkout\/?tour_id=16204";
if (quoteButtons.length > 0) {
quoteButtons.forEach(btn => {
btn.addEventListener('click', function(e) {
e.preventDefault();
// Get tour ID from URL or PHP variable
const tourId = 16204;
// Build checkout URL with parameters
const checkoutParams = {};
if (tourId) {
checkoutParams.tour_id = tourId;
}
if (selectedDate) {
checkoutParams.start_date = formatDate(selectedDate);
}
if (adultsCount > 0) {
checkoutParams.adults = adultsCount;
}
if (childrenCount > 0) {
checkoutParams.children = childrenCount;
}
// Build URL (prefer data attribute, fallback to PHP value, then origin)
const baseFromData = (btn.dataset.checkoutBase || '').trim();
let checkoutBaseUrl = baseFromData || (checkoutBaseUrlPHP || '').trim();
if (!checkoutBaseUrl) {
console.warn('Checkout base URL missing; aborting navigation.');
return;
}
let url;
try {
url = new URL(checkoutBaseUrl, window.location.origin);
} catch (err) {
console.warn('Invalid checkout URL, falling back to origin:', checkoutBaseUrl);
url = new URL(window.location.origin);
}
// Add parameters to URL
Object.keys(checkoutParams).forEach(key => {
url.searchParams.set(key, checkoutParams[key]);
});
const finalUrl = url.toString();
console.log('Navigating to checkout:', finalUrl);
// Navigate to checkout
window.location.assign(finalUrl);
});
});
}
});
// Gallery Modal Functionality
document.addEventListener('DOMContentLoaded', function() {
const galleryTriggers = document.querySelectorAll('[data-gallery-trigger]');
const galleryModal = document.getElementById('gallery-modal');
const galleryImages = ["https:\/\/ottosafariguide.com\/wp-content\/uploads\/2023\/12\/mahale-mountains-ftp.webp","https:\/\/ottosafariguide.com\/wp-content\/uploads\/2023\/12\/mahale-chimps-e1702577830706.webp","https:\/\/ottosafariguide.com\/wp-content\/uploads\/2023\/11\/mahale2-1.jpg","https:\/\/ottosafariguide.com\/wp-content\/uploads\/2023\/11\/mahale-mauntain.jpg","https:\/\/ottosafariguide.com\/wp-content\/uploads\/2026\/04\/Mbali-Mbali-Mahale-1.jpg"];
let currentImageIndex = 0;
if (!galleryModal || galleryImages.length === 0) return;
const galleryClose = galleryModal.querySelector('.gallery-modal-close');
const galleryOverlay = galleryModal.querySelector('.gallery-modal-overlay');
const galleryPrev = galleryModal.querySelector('.gallery-modal-prev');
const galleryNext = galleryModal.querySelector('.gallery-modal-next');
const galleryImage = galleryModal.querySelector('.gallery-modal-image');
const galleryThumbnails = galleryModal.querySelectorAll('.gallery-thumbnail');
const galleryCurrent = galleryModal.querySelector('.gallery-current');
function openGallery(index) {
currentImageIndex = index || 0;
updateGalleryImage();
galleryModal.classList.add('active');
document.body.style.overflow = 'hidden';
}
function closeGallery() {
galleryModal.classList.remove('active');
document.body.style.overflow = '';
}
function updateGalleryImage() {
if (galleryImages[currentImageIndex]) {
galleryImage.src = galleryImages[currentImageIndex];
galleryImage.alt = 'Gallery Image ' + (currentImageIndex + 1);
}
if (galleryCurrent) {
galleryCurrent.textContent = currentImageIndex + 1;
}
// Update thumbnails
galleryThumbnails.forEach((thumb, index) => {
if (index === currentImageIndex) {
thumb.classList.add('active');
} else {
thumb.classList.remove('active');
}
});
}
function showNextImage() {
if (currentImageIndex < galleryImages.length - 1) {
currentImageIndex++;
} else {
currentImageIndex = 0;
}
updateGalleryImage();
}
function showPrevImage() {
if (currentImageIndex > 0) {
currentImageIndex--;
} else {
currentImageIndex = galleryImages.length - 1;
}
updateGalleryImage();
}
// Open gallery on trigger click
galleryTriggers.forEach(trigger => {
trigger.addEventListener('click', function(e) {
e.preventDefault();
openGallery(0);
});
});
// Close gallery
if (galleryClose) {
galleryClose.addEventListener('click', function(e) {
e.preventDefault();
closeGallery();
});
}
if (galleryOverlay) {
galleryOverlay.addEventListener('click', function() {
closeGallery();
});
}
// Navigation
if (galleryNext) {
galleryNext.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
showNextImage();
});
}
if (galleryPrev) {
galleryPrev.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
showPrevImage();
});
}
// Thumbnail click
galleryThumbnails.forEach((thumb, index) => {
thumb.addEventListener('click', function() {
currentImageIndex = index;
updateGalleryImage();
});
});
// Keyboard navigation
document.addEventListener('keydown', function(e) {
if (!galleryModal.classList.contains('active')) return;
if (e.key === 'Escape') {
closeGallery();
} else if (e.key === 'ArrowRight') {
showNextImage();
} else if (e.key === 'ArrowLeft') {
showPrevImage();
}
});
});
// Force Font Awesome 6 on icons (fix for Elementor Font Awesome 4 conflict)
jQuery(document).ready(function($) {
function forceFontAwesome6() {
$('[class*="fa-"], [class^="fa-"]').each(function() {
var $icon = $(this);
var classes = $icon.attr('class') || '';
var hasFA6 = classes.indexOf('fa-solid') !== -1 || classes.indexOf('fa-regular') !== -1 || classes.indexOf('fa-brands') !== -1;
if (hasFA6) {
var existingStyle = $icon.attr('style') || '';
if (existingStyle.indexOf('font-family') === -1) {
$icon.attr('style', existingStyle + '; font-family: "Font Awesome 6 Free" !important; font-weight: 900 !important; font-style: normal !important;');
}
}
});
}
// Apply immediately and after delay
forceFontAwesome6();
setTimeout(forceFontAwesome6, 500);
setTimeout(forceFontAwesome6, 1500);
// Accommodation Gallery Popup
let currentGalleryImages = [];
let currentGalleryIndex = 0;
let currentGalleryName = '';
const galleryBackdrop = document.getElementById('accommodation-gallery-backdrop');
const galleryPopup = document.getElementById('accommodation-gallery-popup');
const galleryMainImg = document.getElementById('gallery-main-image');
const galleryName = document.getElementById('gallery-accommodation-name');
const galleryCounter = document.getElementById('gallery-counter');
const galleryThumbnails = document.getElementById('gallery-thumbnails');
const galleryClose = document.getElementById('gallery-close');
const galleryPrev = document.getElementById('gallery-prev');
const galleryNext = document.getElementById('gallery-next');
function openGallery(images, name, startIndex) {
currentGalleryImages = images;
currentGalleryIndex = startIndex || 0;
currentGalleryName = name;
updateGalleryDisplay();
if (galleryBackdrop) {
galleryBackdrop.style.display = 'block';
}
if (galleryPopup) {
galleryPopup.style.display = 'flex';
document.body.style.overflow = 'hidden';
}
}
function closeGallery() {
if (galleryBackdrop) {
galleryBackdrop.style.display = 'none';
}
if (galleryPopup) {
galleryPopup.style.display = 'none';
document.body.style.overflow = '';
}
}
function updateGalleryDisplay() {
if (currentGalleryImages.length === 0) return;
if (galleryMainImg) {
galleryMainImg.src = currentGalleryImages[currentGalleryIndex];
galleryMainImg.alt = currentGalleryName;
}
if (galleryName) {
galleryName.textContent = currentGalleryName;
}
if (galleryCounter) {
galleryCounter.textContent = (currentGalleryIndex + 1) + '/' + currentGalleryImages.length;
}
if (galleryThumbnails) {
galleryThumbnails.innerHTML = '';
currentGalleryImages.forEach((img, index) => {
const thumb = document.createElement('img');
thumb.src = img;
thumb.alt = currentGalleryName;
thumb.className = 'gallery-thumbnail' + (index === currentGalleryIndex ? ' active' : '');
thumb.addEventListener('click', () => {
currentGalleryIndex = index;
updateGalleryDisplay();
});
galleryThumbnails.appendChild(thumb);
});
}
// Update arrow visibility
if (galleryPrev) {
galleryPrev.style.display = currentGalleryImages.length > 1 ? 'flex' : 'none';
}
if (galleryNext) {
galleryNext.style.display = currentGalleryImages.length > 1 ? 'flex' : 'none';
}
}
function nextImage() {
if (currentGalleryIndex < currentGalleryImages.length - 1) {
currentGalleryIndex++;
} else {
currentGalleryIndex = 0;
}
updateGalleryDisplay();
}
function prevImage() {
if (currentGalleryIndex > 0) {
currentGalleryIndex--;
} else {
currentGalleryIndex = currentGalleryImages.length - 1;
}
updateGalleryDisplay();
}
// Event listeners
document.addEventListener('click', function(e) {
// Click on accommodation gallery images
if (e.target.classList.contains('accommodation-gallery-img')) {
const photosContainer = e.target.closest('.accommodation-photos');
if (photosContainer) {
const images = JSON.parse(photosContainer.getAttribute('data-images') || '[]');
const name = photosContainer.getAttribute('data-name') || '';
const index = parseInt(e.target.getAttribute('data-index') || '0');
openGallery(images, name, index);
}
}
// Click on photo link overlay
if (e.target.classList.contains('accommodation-gallery-trigger')) {
e.preventDefault();
const photosContainer = e.target.closest('.accommodation-photos');
if (photosContainer) {
const images = JSON.parse(photosContainer.getAttribute('data-images') || '[]');
const name = photosContainer.getAttribute('data-name') || '';
const index = parseInt(e.target.getAttribute('data-index') || '3');
openGallery(images, name, index);
}
}
});
if (galleryClose) {
galleryClose.addEventListener('click', closeGallery);
}
if (galleryPrev) {
galleryPrev.addEventListener('click', prevImage);
}
if (galleryNext) {
galleryNext.addEventListener('click', nextImage);
}
// Close on backdrop click
if (galleryBackdrop) {
galleryBackdrop.addEventListener('click', function(e) {
closeGallery();
});
}
// Keyboard navigation
document.addEventListener('keydown', function(e) {
if (galleryPopup && galleryPopup.style.display === 'flex' && galleryBackdrop && galleryBackdrop.style.display === 'block') {
if (e.key === 'Escape') {
closeGallery();
} else if (e.key === 'ArrowLeft') {
prevImage();
} else if (e.key === 'ArrowRight') {
nextImage();
}
}
});
});
const lazyloadRunObserver = () => {
const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` );
const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => {
entries.forEach( ( entry ) => {
if ( entry.isIntersecting ) {
let lazyloadBackground = entry.target;
if( lazyloadBackground ) {
lazyloadBackground.classList.add( 'e-lazyloaded' );
}
lazyloadBackgroundObserver.unobserve( entry.target );
}
});
}, { rootMargin: '200px 0px 200px 0px' } );
lazyloadBackgrounds.forEach( ( lazyloadBackground ) => {
lazyloadBackgroundObserver.observe( lazyloadBackground );
} );
};
const events = [
'DOMContentLoaded',
'elementor/lazyload/observe',
];
events.forEach( ( event ) => {
document.addEventListener( event, lazyloadRunObserver );
} );
https://ottosafariguide.com/wp-content/plugins/business-reviews-wp/assets/js/app.min.js
https://ottosafariguide.com/wp-content/plugins/elementskit-lite/widgets/init/assets/js/widget-scripts.js
https://ottosafariguide.com/wp-content/plugins/wp-travel-engine/assets/lib/owl-carousel-2.3.4/owl.carousel.js
https://ottosafariguide.com/wp-content/plugins/wp-travel-engine/assets/lib/dropzone/dropzone.min.js
https://ottosafariguide.com/wp-content/plugins/wte-elementor-widgets/dist/js/wte-offcanvas.js
https://ottosafariguide.com/wp-content/plugins/wte-elementor-widgets/dist/js/wpte-animation.js
https://ottosafariguide.com/wp-content/plugins/wp-travel-engine/assets/lib/flatpickr-4.6.9/fpickr.js
https://ottosafariguide.com/wp-content/plugins/wp-travel-engine/assets/lib/flatpickr-4.6.9/l10n/en.js
https://ottosafariguide.com/wp-includes/js/dist/hooks.min.js
https://ottosafariguide.com/wp-includes/js/dist/i18n.min.js
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
//# sourceURL=wp-i18n-js-after
;(function(){
var wte = window[wte] || {};
if(! window.wte){
window.wte = {"personFormat":"\/person","bookNow":"Book Now","totaltxt":"Total:","currency":{"code":"USD","symbol":"$"},"payments":[],"single_showtabs":false,"pax_labels":[],"booking_cutoff":{"enable":false,"cutoff":0,"unit":"days"}};
}
})();
;(function(){
var wte_account_page = window[wte_account_page] || {};
if(! window.wte_account_page){
window.wte_account_page = {"ajax_url":"https:\/\/ottosafariguide.com\/wp-admin\/admin-ajax.php","change_user_profile_msg":"Click here or Drop new image to update your profile picture"};
}
})();
;(function(){
var rtl = window[rtl] || {};
if(! window.rtl){
window.rtl = [];
}
})();
;(function(){
var wtePreFetch = window[wtePreFetch] || {};
if(! window.wtePreFetch){
window.wtePreFetch = {"tripID":13636,"wpapi":{"root":"https:\/\/ottosafariguide.com\/wp-json\/","nonce":"a226094e53","versionString":"wp\/v2\/"},"iframe_url":""};
}
})();
;(function(){
var WTEAjaxData = window[WTEAjaxData] || {};
if(! window.WTEAjaxData){
window.WTEAjaxData = {"ajaxurl":"https:\/\/ottosafariguide.com\/wp-admin\/admin-ajax.php","nonce":"a226094e53"};
}
})();
;(function(){
var wteL10n = window[wteL10n] || {};
if(! window.wteL10n){
window.wteL10n = {"version":"6.8.0","baseCurrency":"USD","baseCurrencySymbol":"$","currency":"USD","currencySymbol":"$","home_url":"https:\/\/ottosafariguide.com","_nonces":{"addtocart":"e68561baf3","downloadSystemInfo":"1c2d79a237"},"wpapi":{"root":"https:\/\/ottosafariguide.com\/wp-json\/","nonce":"a226094e53","versionString":"wp\/v2\/"},"wpxhr":{"root":"https:\/\/ottosafariguide.com\/wp-admin\/admin-ajax.php","nonce":"f1fc79624c"},"format":{"number":{"decimal":"default","decimalSeparator":".","thousandSeparator":","},"price":"%CURRENCY_SYMBOL%%FORMATED_AMOUNT%","date":"F j, Y","time":"g:i a","datetime":{"date":"F j, Y","time":"g:i a","GMTOffset":"+00:00","timezone":""},"enableRound":false},"extensions":[],"locale":"en_US","l10n":{"invalidCartTraveler":"No. of Travellers' should be at least %s","availableSeatsExceed":"The number of pax can not exceed more than %s","invalidCartExtraReq":"%s selection is essential. Please specify a number.","invalidCartExtra":"Extra Services marked with * is essential. Please specify a number.","extraServicesTitle":"","checkout.submitButtonText":"Book Now","checkout.bookingSummary":"Booking Summary","checkout.totalPayable":"Total Payable Now"},"layout":{"showFeaturedTripsOnTop":true,"showoptionfilter":true},"rtl":false};
}
})();
//# sourceURL=wp-travel-engine-js-before
https://ottosafariguide.com/wp-content/plugins/wp-travel-engine/dist/public/wte-public.js
https://ottosafariguide.com/wp-content/plugins/wp-travel-engine/dist/public/trip-search/widgets-dropdown.js
https://ottosafariguide.com/wp-content/plugins/wp-travel-engine/dist/public/trip-search/widgets-slider.js
https://ottosafariguide.com/wp-content/plugins/contact-form-7/includes/swv/js/index.js
var wpcf7 = {
"api": {
"root": "https:\/\/ottosafariguide.com\/wp-json\/",
"namespace": "contact-form-7\/v1"
},
"cached": 1
};
//# sourceURL=contact-form-7-js-before
https://ottosafariguide.com/wp-content/plugins/contact-form-7/includes/js/index.js
https://ottosafariguide.com/wp-content/plugins/travel-booking-toolkit/public/js/travel-booking-toolkit-public.min.js
https://ottosafariguide.com/wp-content/plugins/travel-booking-toolkit/public/js/fontawesome/all.min.js
https://ottosafariguide.com/wp-content/plugins/travel-booking-toolkit/public/js/fontawesome/v4-shims.min.js
console.log("=== Custom Booking Debug Info ===");
console.log("Is Tour Detail Page: true");
console.log("Has Tour Query: true");
console.log("Tour Slug: 3-days-mahale-chimp-trek-safari");
console.log("Tour ID: 16204");
console.log("Queried Object: WP_Post (ID: 13636, Type: page, Name: tour-detail)");
console.log("First post in query (what template uses): ID 13636, Type: page, Name: tour-detail");
console.log("query_vars.pagename: tour-detail");
console.log("Request URI path: tour-detail/western-tanzania-safaris/mahale/3-days-mahale-chimp-trek-safari");
console.log("Is checkout URL by path: false");
console.log("Shortcode [custom_booking_checkout] in queried post content: NO");
console.log("Is 404: false");
console.log("Post Count: 1");
console.log("Global Tour ID: 16204");
console.log("Current URL: " + window.location.href);
console.log("--- Why checkout may not work ---");
console.log("N/A");
console.log("=== End Debug Info ===");
//# sourceURL=bootstrap-js-after
window.nfdPerformance = window.nfdPerformance || {};
window.nfdPerformance.imageOptimization = window.nfdPerformance.imageOptimization || {};
window.nfdPerformance.imageOptimization.lazyLoading = {"classes":["nfd-performance-not-lazy","a3-notlazy","disable-lazyload","no-lazy","no-lazyload","skip-lazy"],"attributes":["data-lazy-src","data-crazy-lazy=\"exclude\"","data-no-lazy","data-no-lazy=\"1\""]};
//# sourceURL=nfd-performance-lazy-loader-js-before
https://ottosafariguide.com/wp-content/plugins/mojo-marketplace-wp-plugin//vendor/newfold-labs/wp-module-performance/build/image-lazy-loader.min.js
var travel_monster_custom = {"url":"https://ottosafariguide.com/wp-admin/admin-ajax.php","rtl":"","sticky_widget":"1","ed_sticky_header":""};
//# sourceURL=travel-monster-custom-js-extra
https://ottosafariguide.com/wp-content/themes/travel-monster/js/custom.min.js