/*! * Tourgy Tourz mobile navigation (phones and tablets under 992px). * One file for the whole site: add * * before on every page. Edit the MENU list below to change the menu * everywhere at once. Desktop menus are not touched. */ (function () { 'use strict'; if (window.__ttMobileNav) return; window.__ttMobileNav = true; var PHONE = '+27603118040'; var PHONE_LABEL = '+27 60 311 8040'; /* WhatsApp message changes with the page, so we know where the enquiry came from */ var WA_TOPICS = [ [/muslim|halal/, 'I am a Muslim traveller and would like help planning a halal-friendly trip (halal meals and prayer times).'], [/honeymoon/, 'I would like help planning our honeymoon.'], [/kruger-victoria-falls/, 'I would like help planning a Kruger and Victoria Falls safari.'], [/cape-town-to-kruger|garden-route-and-kruger/, 'I would like help planning a Cape Town and Kruger trip.'], [/gondwana/, 'I would like help planning a Gondwana safari near Cape Town.'], [/aquila|inverdoorn|cape-town-safari/, 'I would like help planning a safari from Cape Town.'], [/kruger/, 'I would like help planning my Kruger safari.'], [/johannesburg|expljohan/, 'I would like to book a Johannesburg day tour.'], [/explcap|cape-town|garden-route/, 'I would like help planning my Cape Town trip.'], [/fish-river/, 'I would like help planning a Fish River Canyon trip.'], [/luxury-namibia/, 'I would like help planning a luxury Namibia safari.'], [/stargazing/, 'I would like help planning a stargazing trip in Namibia.'], [/namib|etosha|sossus|namtour|rundreisen|rondreizen|viajes|viaggi|viagens|wycieczki|zajezdy|tury-v/, 'I would like help planning my Namibia trip.'], [/victoria-falls|vicfall|chobe|hwange|livingstone|vfa/, 'I would like help planning my Victoria Falls trip.'], [/okavango|botswana|moremi|savuti|linyanti/, 'I would like help planning a Botswana safari.'], [/zanzibar/, 'I would like help planning a Zanzibar holiday.'], [/seychelles/, 'I would like help planning a Seychelles holiday.'], [/mauritius/, 'I would like help planning a Mauritius holiday.'], [/reunion/, 'I would like help planning a Reunion Island holiday.'], [/serengeti|tanzania/, 'I would like help planning a Tanzania safari.'], [/kenya|masai-mara/, 'I would like help planning a Kenya safari.'], [/uganda/, 'I would like help planning a Uganda safari.'], [/east-africa/, 'I would like help planning an East Africa safari.'], [/family/, 'I would like help planning a family safari.'], [/accessible/, 'I would like help planning an accessible safari.'], [/school/, 'I would like help planning a school trip to Africa.'], [/corporate|incentive/, 'I would like help planning a corporate or incentive trip.'], [/missionary/, 'I would like help planning a mission trip to Africa.'], [/birding/, 'I would like help planning a birding safari.'], [/best-time-to-visit-africa-([a-z]+)/, 'MONTH'], [/safari-beach/, 'I would like help planning a safari and beach holiday.'], [/south-africa/, 'I would like help planning a South Africa trip.'] ]; function waText() { var path = (location.pathname || '/').toLowerCase(); var msg = ''; for (var i = 0; i < WA_TOPICS.length; i++) { var m = path.match(WA_TOPICS[i][0]); if (m) { msg = WA_TOPICS[i][1]; if (msg === 'MONTH') { msg = 'I would like help planning a trip to Africa in ' + m[1].charAt(0).toUpperCase() + m[1].slice(1) + '.'; } break; } } if (!msg) { var h1 = document.querySelector('h1'); var title = h1 ? h1.textContent.replace(/\s+/g, ' ').trim() : ''; msg = (path === '/' || path === '/index.html' || !title) ? 'I would like help planning a trip.' : 'I would like help with: ' + title + '.'; } var page = 'tourgytourz.com' + (location.pathname || '/'); return 'Hi Tourgy Tourz, ' + msg + '\nMy dates: ____\nNumber of travellers: ____\n(Page: ' + page + ')'; } var WA = 'https://wa.me/27603118040?text=' + encodeURIComponent(waText()); var BOOK = [ { t: '3 Day Kruger Safari', s: 'From Johannesburg', u: '/3-days-kruger-safari-from-johannesburg/' }, { t: 'Namibia Short Safaris', s: 'Sossusvlei & Etosha ยท book online', u: '/namibia-short-safari-packages/' }, { t: '4 Day Victoria Falls', s: 'Falls, river cruise & Chobe', u: '/4-days-victoria-falls-package/' } ]; var MENU = [ { t: 'South Africa', i: 'bi-geo-alt', links: [ ['Kruger Safari Packages', '/kruger-safari-packages/'], ['2 Day Kruger Safari', '/2-day-kruger-safari-from-johannesburg/'], ['3 Day Kruger Safari', '/3-days-kruger-safari-from-johannesburg/'], ['4 Day Kruger Safari', '/4-days-kruger-safari-from-johannesburg/'], ['5 Day Kruger Safari', '/5-days-kruger-safari-from-johannesburg/'], ['Fly-In & Private Kruger', '/fly-in-kruger-safari/'], ['Cape Town Tours', '/cape-town-tours/'], ['Cape Town Safari Day Tours', '/cape-town-safari-day-tours/'], ['Garden Route Tours', '/6-days-garden-route/'], ['Johannesburg Tours', '/johannesburg-tours/'] ], all: ['All South Africa tours', '/south-africa-tours/'] }, { t: 'Namibia', i: 'bi-brightness-high', links: [ ['Short Safaris (book online)', '/namibia-short-safari-packages/'], ['Namibia Safari Tours', '/namibia-safari-tours/'], ['7 Day Namibia Highlights', '/7-day-northern-namibia-adventure-tour/'], ['Luxury Namibia Safaris', '/luxury-namibia-safaris/'], ['Fish River Canyon', '/fish-river-canyon/'], ['Stargazing in Namibia', '/stargazing-in-namibia/'], ['Self-Drive Safaris', '/namibia-self-drive-safaris/'], ['Fly-In Safaris', '/namibia-fly-in-safari/'] ], all: ['Namibia safari guide', '/namibia-safari/'] }, { t: 'Victoria Falls', i: 'bi-water', links: [ ['4 Days Victoria Falls', '/4-days-victoria-falls-package/'], ['5 Days Victoria Falls', '/5-days-victoria-falls-package/'], ['6 Days Victoria Falls', '/6-days-victoria-falls-package/'], ['Victoria Falls Honeymoon', '/victoria-falls-honeymoon-packages/'], ['Chobe Day Trip', '/chobe-safari-day-trip-from-victoria-falls/'], ['Kruger & Victoria Falls', '/kruger-victoria-falls-safari/'] ], all: ['All Victoria Falls tours', '/victoria-falls-tours/'] }, { t: 'Botswana', i: 'bi-binoculars', links: [ ['Botswana Safari Tours', '/botswana-safari-tours/'], ['Luxury Okavango Delta', '/luxury-okavango-delta-safaris/'], ['Victoria Falls & Okavango', '/victoria-falls-okavango-delta-safari/'], ['Moremi Game Reserve', '/moremi-game-reserve-safari/'], ['Hwange Fly-In Safaris', '/hwange-safari/'] ], all: ['All Botswana safaris', '/botswana-safari-tours/'] }, { t: 'East Africa', i: 'bi-globe-africa', links: [ ['Kenya Safaris', '/kenya-safaris/'], ['Tanzania Safaris', '/tanzania-safaris/'], ['Uganda Gorilla Safaris', '/uganda-safaris/'], ['Serengeti Safari Guide', '/serengeti-safari-guide/'], ['Serengeti Migration', '/serengeti-migration/'] ], all: ['East Africa overview', '/east-africa-safaris/'] }, { t: 'Islands & Beach', i: 'bi-umbrella', links: [ ['Zanzibar Holidays', '/zanzibar-holidays/'], ['Mauritius Holidays', '/mauritius-holidays/'], ['Seychelles Holidays', '/seychelles-holidays/'], ['Reunion Island', '/reunion-island-holidays/'], ['Safari & Beach Holidays', '/safari-beach-holiday/'] ] }, { t: 'Travel Styles', i: 'bi-heart', links: [ ['Honeymoon Safaris', '/honeymoon-safaris/'], ['Family Safaris', '/family-safari-destinations/'], ['Muslim-Friendly Travel', '/muslim-friendly-africa-travel/'], ['Accessible Safaris', '/accessible-africa-safaris/'], ['Birding Safaris', '/birding-safaris-africa/'], ['Corporate & Incentive Travel', '/corporate-incentive-travel-africa/'], ['School Trips', '/school-trips-africa/'] ] }, { t: 'Plan Your Trip', i: 'bi-compass', links: [ ['Best Time to Visit Africa', '/best-time-to-visit-africa/'], ['Africa Travel Guide', '/africa-travel-guide/'], ['Multi-Country Safaris', '/multi-country-africa-safari-tours/'], ['Travel Blog', 'https://blog.tourgytourz.com/'], ['About Us', '/about/'], ['Contact Us', '/contact/'] ] } ]; var css = [ '@media (max-width:991px){', '#header .mobile-nav-toggle,#navbar>ul,#navbar .mobile-nav-toggle{display:none!important}', '#topbar{display:none!important}', '#header{position:sticky!important;top:0;z-index:9990}', '.wa-float{display:none!important}', '.back-to-top{bottom:84px!important}', 'body{padding-bottom:calc(66px + env(safe-area-inset-bottom))}', '.ttm-btn{display:inline-flex!important}', '.ttm-bar{display:grid!important}', '}', '.ttm-btn,.ttm-bar{display:none}', '.ttm-btn{align-items:center;gap:6px;background:#182414;color:#fff;border:0;border-radius:999px;padding:9px 15px;font:800 14px/1 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;cursor:pointer;margin-left:auto}', '.ttm-btn i{font-size:18px;line-height:1}', '.ttm-bar{position:fixed;left:0;right:0;bottom:0;z-index:9991;grid-template-columns:1.25fr 1fr 1fr;gap:8px;padding:9px 10px calc(9px + env(safe-area-inset-bottom));background:#fff;border-top:1px solid rgba(18,23,18,.12);box-shadow:0 -8px 24px rgba(18,23,18,.08)}', '.ttm-bar a{display:flex;align-items:center;justify-content:center;gap:7px;min-height:46px;border-radius:12px;font:800 14px/1.1 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;text-decoration:none}', '.ttm-bar a i{font-size:17px}', '.ttm-bar .ttm-enq{background:#c96b1d;color:#fff}', '.ttm-bar .ttm-wa{background:#00a65a;color:#fff}', '.ttm-bar .ttm-call{background:#f4f1ea;color:#182414}', '.ttm-ov{position:fixed;inset:0;z-index:10040;background:rgba(7,14,10,.55);opacity:0;visibility:hidden;transition:opacity .2s}', '.ttm-ov.open{opacity:1;visibility:visible}', '.ttm-drawer{position:fixed;top:0;right:0;bottom:0;z-index:10041;width:min(420px,100%);background:#fbfaf6;transform:translateX(100%);transition:transform .25s ease;display:flex;flex-direction:column;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:#121712}', '.ttm-drawer.open{transform:none}', '.ttm-top{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid rgba(18,23,18,.1);background:#fff}', '.ttm-top strong{font-size:18px;font-weight:900;color:#182414}', '.ttm-x{width:42px;height:42px;border-radius:999px;border:1px solid rgba(18,23,18,.15);background:#fff;font-size:22px;line-height:1;color:#182414;cursor:pointer}', '.ttm-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding:14px 16px 28px}', '.ttm-quick{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px}', '.ttm-quick a{display:flex;align-items:center;justify-content:center;gap:7px;min-height:48px;border-radius:12px;font-weight:800;font-size:14px;text-decoration:none}', '.ttm-quick .ttm-enq{grid-column:1 / -1;background:#c96b1d;color:#fff}', '.ttm-quick .ttm-wa{background:#00a65a;color:#fff}', '.ttm-quick .ttm-call{background:#fff;color:#182414;border:1px solid rgba(18,23,18,.15)}', '.ttm-label{font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase;color:#9f4f14;margin:6px 0 8px}', '.ttm-book{display:grid;gap:8px;margin-bottom:18px}', '.ttm-book a{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;background:#fff;border:1px solid rgba(18,23,18,.1);border-radius:12px;text-decoration:none;color:#121712}', '.ttm-book b{display:block;font-size:15px;font-weight:800}', '.ttm-book small{display:block;color:#5f665c;font-size:12.5px;margin-top:2px}', '.ttm-book i{color:#c96b1d;font-size:18px}', '.ttm-home{display:block;padding:14px 4px;font-weight:800;font-size:16px;color:#121712;text-decoration:none;border-top:1px solid rgba(18,23,18,.1)}', '.ttm-sec{border-top:1px solid rgba(18,23,18,.1)}', '.ttm-sec:last-child{border-bottom:1px solid rgba(18,23,18,.1)}', '.ttm-sec>button{width:100%;display:flex;align-items:center;gap:10px;background:none;border:0;padding:15px 4px;font-family:inherit;font-size:16px;font-weight:800;line-height:1.2;color:#121712;text-align:left;cursor:pointer}', '.ttm-sec>button>i:first-child{color:#c96b1d;font-size:18px;width:22px}', '.ttm-sec>button .ttm-chev{margin-left:auto;transition:transform .2s;color:#5f665c}', '.ttm-sec.open>button .ttm-chev{transform:rotate(180deg)}', '.ttm-sec ul{list-style:none;margin:0;padding:0 0 10px 32px;display:none}', '.ttm-sec.open ul{display:block}', '.ttm-sec li a{display:block;padding:10px 4px;font-size:15px;color:#121712;text-decoration:none;border-radius:8px}', '.ttm-sec li a:active{background:#f4f1ea}', '.ttm-sec li a.ttm-cur{color:#9f4f14;font-weight:800}', '.ttm-sec li.ttm-all a{color:#9f4f14;font-weight:800}', '.ttm-foot{margin-top:18px;font-size:13px;color:#5f665c;line-height:1.6}', '.ttm-foot a{color:#9f4f14;font-weight:700}', 'html.ttm-lock,html.ttm-lock body{overflow:hidden}' ].join(''); function el(tag, attrs, html) { var e = document.createElement(tag); if (attrs) for (var k in attrs) e.setAttribute(k, attrs[k]); if (html != null) e.innerHTML = html; return e; } function esc(s) { return String(s).replace(/[&<>"]/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"' }[c]; }); } function norm(p) { return (p || '/').replace(/\.html$/, '').replace(/\/?$/, '/'); } function build() { var style = el('style', { id: 'ttm-style' }); style.textContent = css; document.head.appendChild(style); var here = norm(location.pathname); var header = document.querySelector('#header .container') || document.querySelector('#header'); var btn = el('button', { type: 'button', 'class': 'ttm-btn', 'aria-label': 'Open menu', 'aria-expanded': 'false', 'aria-controls': 'ttm-drawer' }, 'Menu'); if (header) header.appendChild(btn); else document.body.appendChild(btn); var bar = el('nav', { 'class': 'ttm-bar', 'aria-label': 'Quick contact' }, 'Enquire' + 'WhatsApp' + 'Call'); document.body.appendChild(bar); var ov = el('div', { 'class': 'ttm-ov' }); var dr = el('div', { id: 'ttm-drawer', 'class': 'ttm-drawer', role: 'dialog', 'aria-modal': 'true', 'aria-label': 'Site menu' }); var h = '
Tourgy Tourz
'; h += '
Enquire or check availability' + '' + 'Call us
'; h += '
Book online
'; BOOK.forEach(function (b) { h += '' + esc(b.t) + '' + esc(b.s) + ''; }); h += '
Home'; MENU.forEach(function (sec, i) { var open = false, items = ''; sec.links.concat(sec.all ? [sec.all] : []).forEach(function (l, j) { var cur = norm(l[1]) === here; if (cur) open = true; var isAll = sec.all && j === sec.links.length; items += '' + esc(l[0]) + (isAll ? ' →' : '') + ''; }); h += '
    ' + items + '
'; }); h += '

Travel, A Love Story. Call ' + PHONE_LABEL + ' or email info@tourgytourz.com.

'; dr.innerHTML = h; document.body.appendChild(ov); document.body.appendChild(dr); function setOpen(o) { dr.classList.toggle('open', o); ov.classList.toggle('open', o); document.documentElement.classList.toggle('ttm-lock', o); btn.setAttribute('aria-expanded', o ? 'true' : 'false'); if (o) { var x = dr.querySelector('.ttm-x'); if (x) x.focus(); } else { btn.focus(); } } btn.addEventListener('click', function () { setOpen(true); }); ov.addEventListener('click', function () { setOpen(false); }); dr.querySelector('.ttm-x').addEventListener('click', function () { setOpen(false); }); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && dr.classList.contains('open')) setOpen(false); }); dr.addEventListener('click', function (e) { var b = e.target.closest('.ttm-sec > button'); if (b) { var s = b.parentNode, o = !s.classList.contains('open'); s.classList.toggle('open', o); b.setAttribute('aria-expanded', o ? 'true' : 'false'); return; } var a = e.target.closest('a[href^="#"]'); if (a) setOpen(false); }); window.addEventListener('resize', function () { if (window.innerWidth > 991 && dr.classList.contains('open')) setOpen(false); }); } if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', build); else build(); })(); /* * Lead tracking for Google Tag Manager / Google Analytics 4. * Every click on WhatsApp, Call, Email, Book or Enquire sends one event * called "tt_lead" with: * lead_type whatsapp | call | email | book_online | enquiry * lead_page the page the visitor was on * lead_label the button text * Works on phones and computers, on every page that loads this file. */ (function () { 'use strict'; if (window.__ttLeadTracking) return; window.__ttLeadTracking = true; window.dataLayer = window.dataLayer || []; function typeFor(href) { var h = (href || '').toLowerCase(); if (h.indexOf('wa.me/') > -1 || h.indexOf('whatsapp.com/') > -1) return 'whatsapp'; if (h.indexOf('tel:') === 0) return 'call'; if (h.indexOf('mailto:') === 0) return 'email'; if (/\/(book-[a-z-]+|pay-[a-z-]+|vfa-pay)\.php/.test(h)) return 'book_online'; if (/request-availability|request-luxury|\/contact\/?(#|\?|$)|#enquiry|#luxury-quote|#honeymoon-planner|#plan-your-trip/.test(h)) return 'enquiry'; return ''; } document.addEventListener('click', function (e) { var a = e.target && e.target.closest ? e.target.closest('a[href]') : null; if (!a) return; var t = typeFor(a.getAttribute('href')); if (!t) return; window.dataLayer.push({ event: 'tt_lead', lead_type: t, lead_page: location.pathname || '/', lead_label: (a.textContent || '').replace(/\s+/g, ' ').trim().slice(0, 80) }); }, true); document.addEventListener('submit', function (e) { var f = e.target; if (!f || !f.tagName || f.tagName !== 'FORM') return; var act = (f.getAttribute('action') || location.pathname).toLowerCase(); var t = /book-|pay-/.test(act) ? 'book_online_submit' : 'enquiry_submit'; window.dataLayer.push({ event: 'tt_lead', lead_type: t, lead_page: location.pathname || '/', lead_label: 'form' }); }, true); })();