function alterContent() {
/// This function is used in separate pages. When the package is undefined,
/// the plans are retrieved from the session storage.
let tempPlans = (typeof package != 'undefined') ? package.plans : plans;
try {
populateGeneral(document.getElementById(`generalCardSlider`), true, tempPlans);
populateFoodDrink(tempPlans);
populateFashion(tempPlans);
populateElements(tempPlans);
}
catch (e) { console.log(e); }
}
/// Populates general display of offers; element is passed
/// since [populateGeneral] could populate different elements
function populateGeneral(element, carousel, tempPlans) {
if(!element) return;
try {
/// At least one offer could be listed
let atleastOne = false;
if (typeof general_offers !== 'undefined' && general_offers && general_offers.length > 0) {
var content = ``;
for (let generalOffer of general_offers) {
// If the offer does not include the plan listed from the current package
if (!(generalOffer.plans.some(plan => tempPlans.includes(plan)))) continue;
atleastOne = true;
let fromTo;
if (generalOffer.from && generalOffer.to) {
fromTo = `
From €${generalOffer.from}
Now €${generalOffer.to}
`;
}
let general_offer = `
${generalOffer.tag || ""}
${generalOffer.title || ""}
${fromTo || ""}
`;
if (carousel) content +=
``;
else content += general_offer;
}
if(atleastOne) {
element.innerHTML = content;
var generalDivs = document.getElementsByClassName("general");
for (let div of generalDivs) {
if (div != null) div.style.display="block";
}
if(carousel) initiateSliders("general");
}
}
}
catch (e) { console.log(e); }
}
function populateFoodDrink(tempPlans) {
/// Displays food-and-drink brand cards
var food_drinkSlider = document.getElementById(`food-and-drink-card-slider`);
if (food_drinkSlider) {
try {
/// At least one offer could be listed
let atleastOne = false;
if (food_drink_brands && food_drink_brands.length > 0) {
var content = ``;
for (let foodDrinkBrand of food_drink_brands) {
// If the offer does not include the plan listed from the current package
if (!(foodDrinkBrand.plans.some(plan => tempPlans.includes(plan)))) continue;
let tags = foodDrinkBrand.tags.filter((tag) => tag.plans.some((t)=> package.plans.includes(t))).slice(0,3).map(tag => tag.value);
atleastOne = true;
let food_drink_brand =
``;
content += food_drink_brand;
}
if(atleastOne) {
food_drinkSlider.innerHTML = content;
var foodDivs = document.getElementsByClassName("food");
for (let div of foodDivs) {
if (div != null) div.style.display="block";
}
initiateSliders("food_drink");
}
}
}
catch (e) { console.log(e); }
}
}
function populateFashion(tempPlans) {
/// Displays fashion brand logos
var fashionSlider = document.getElementById(`fashionLogoSlider`);
if (fashionSlider) {
try {
/// At least one offer could be listed
let atleastOne = false;
if (fashion_brands && fashion_brands.length > 0) {
var content = ``;
for (fashionBrand of fashion_brands) {
// If the offer does not include the plan listed from the current package
if (!(fashionBrand.plans.some(plan => tempPlans.includes(plan)))) continue;
atleastOne = true;
let fashion_brand = ``;
content += fashion_brand;
}
if(atleastOne) {
fashionSlider.innerHTML = content;
var fashionDivs = document.getElementsByClassName("fashion");
for (let div of fashionDivs) {
if (div != null) div.style.display="block";
}
initiateSliders("fashion");
}
}
}
catch (e) { console.log(e); }
}
}
function populateElements(tempPlans) {
if(!package) return;
var cardTitle = document.getElementById('cardTitle');
if (cardTitle != null) cardTitle.innerText = package.name;
var priceElement = document.getElementById('price');
if (priceElement) priceElement.innerText = priceElement.innerText + package.price;
packageLogo(package.logo);
if (package.plans.find(element => element.includes('tourist_activities')) != undefined) {
var cloudigoDivs = document.getElementsByClassName("cloudigo");
for (let div of cloudigoDivs) {
if (div != null) div.classList.remove('cloudigo');
}
var quoteTitle = document.getElementById('quoteTitle');
if (quoteTitle)
{
if (package.slug == "valletta_pass") quoteTitle.innerText = `“I saved around €50 by visiting a heritage site in Valletta, shopping and dining with the cloudigo app in just one day”`;
else quoteTitle.innerText = `“I got my money back by just booking an excursion for my family using cloudigo!”`;
}
var appImg = document.getElementById('appImg');
if (appImg)
appImg.src = "assets/app_image_1.webp";
}
var upgradeBtns = document.getElementsByClassName("upgradeBtn");
for (upgradeBtn of upgradeBtns) {
if(package.upgradePkg) upgradeBtn.href = `index.html?package=${package.upgradePkg}`;
else upgradeBtn.style.display = 'none';
}
excursionsDisplay(null, true, null, tempPlans, package.slug);
}
/// Functions to display dynamically are split for each file generated
/// from the script, each representing a different API call.
/// filter is when a specific category is required.
function excursionsDisplay(elementToPopulate, carousel, filter, tempPlans, slug) {
try {
if (excursions_data && excursions_data.length > 0) {
var element = elementToPopulate;
/// Amount of elements to be populated and displayed
var iterations = filter ? filter.length : excursions_data.length;
for (let i = 0; i < iterations; i++) {
// if(excursions_data[i].carousel == "valletta" && !slug.includes("valletta")
// || (slug.includes("valletta") && excursions_data[i].carousel != "valletta")) continue;
if(carousel && (slug.includes("valletta") != (excursions_data[i].carousel == "valletta"))) continue;
/// At least one offer could be listed
let atleastOne = false;
let excursions = [];
// If an element wasn't passed, it is assumed that it's a carousel
if (!elementToPopulate) {
element = document.getElementById(`${excursions_data[i].carousel}CardSlider`);
excursions = excursions_data[i].excursions || [];
}
else excursions = excursions_data
.find((c) => c.carousel == filter[i]).excursions;
if (element) {
var content = ``;
for (let excursion of excursions) {
// If the offer does not include the plan listed from the current package
if (!(excursion.plans.some(p => tempPlans.includes(p)))) continue;
atleastOne = true;
let fromTo;
if (excursion.from && excursion.to) {
fromTo = `
From €${excursion.from}
Now €${excursion.to}
`;
}
let offer = `
${excursion.tag || ""}
${excursion.title || ""}
${fromTo || ""}
`;
if (carousel) {
content +=
``;
}
else content += offer;
}
if(atleastOne) {
element.innerHTML = content;
var excursionDivs = document.getElementsByClassName(excursions_data[i].carousel);
for (let div of excursionDivs) {
if (div != null) div.style.display="block";
}
if(carousel) initiateSliders(excursions_data[i].carousel);
}
}
}
}
}
catch (e) { console.log(e); }
}
/// Configures cookie, dismisses the cookie modal
function handleCookie(choice) {
document.body.classList.remove("modal-open-cookie");
gtag('event', choice ? 'cookie_accept' : 'cookie_deny');
var current = new Date();
var future = new Date(current.setDate(current.getDate() + 7)).toUTCString();
if (choice) {
document.cookie = `preference=allow; expires=${future}; path=/;`;
document.cookie = `utm=${utmParams}; expires=${future}; path=/;`;
document.cookie = `pap=${papHash}; expires=${future}; path=/;`;
}
else document.cookie = `preference=deny; expires=${future}; path=/;`;
setTags(choice);
}
/// Utilised in faqs page to alternate beween active and inactive questions
function changeStatus(id) {
var element = document.getElementById('a_' + id);
if (element) {
if (element.classList.contains('inactive')) element.classList.remove('inactive');
else element.classList.add('inactive');
}
}
/// Reveals or hides the navbar menu
function showMenu() {
var navOptions = document.getElementById('navOptions');
if (navOptions) {
if (navOptions.classList.contains('nav-options-hide')) {
navOptions.classList.remove('nav-options-hide');
navOptions.classList.add('nav-options-show');
}
else {
navOptions.classList.remove('nav-options-show');
navOptions.classList.add('nav-options-hide');
}
}
}
/// Displays the package logo next to the cloudigo logo
function packageLogo(logo_url) {
var logoDesktop = document.getElementById('logoDesktop');
var logoMob = document.getElementById('logoMob');
if (logo_url == '') logo_url = sessionStorage.getItem('packageLogo') || '';
else sessionStorage.setItem('packageLogo', logo_url);
var packageImgsDesktop = document.getElementsByClassName('packageImgDesktop');
var packageImgMob = document.getElementById('packageImgMob');
var creditImg = document.getElementById('creditPkgLogo');
var creditSection = document.getElementById('creditSection');
/// If a partner logo image is available
if (logo_url != '') {
/// Populate navbar logo with thinner logos to fit 2 logos
if (logoDesktop) logoDesktop.src = "assets/cloudigo.webp";
if (logoMob) logoMob.src = "assets/cloudigo.webp";
var bookmark = document.getElementById('bookmark');
if (packageImgsDesktop && packageImgsDesktop.length > 0) {
for (image of packageImgsDesktop) {
image.src = 'https://images.cloudigo.app' + logo_url;
image.alt = "cloudigo Partner";
image.style.display = 'block';
}
var packageLogo = document.getElementById('packageLogoDesktop');
if(packageLogo) packageLogo.style.display = 'block';
if (bookmark) bookmark.classList.add('active');
}
if (packageImgMob) {
packageImgMob.src = 'https://images.cloudigo.app' + logo_url;
document.getElementById('packageLogoMob').style.display = 'block';
}
if (creditImg) {
creditImg.src = 'https://images.cloudigo.app' + logo_url;
creditImg.alt = "cloudigo Partner";
if(creditSection) creditSection.classList.add('active');
}
}
else {
/// Populate navbar logo with a wider logo
if (logoDesktop) {
logoDesktop.src = "assets/cloudigo_logo_black.webp";
logoDesktop.style.height = "40px";
}
if (logoMob) {
logoMob.src = "assets/cloudigo_logo_black.webp";
logoMob.style.height = "35px";
}
if (packageImgsDesktop && packageImgsDesktop.length > 0) {
for (image of packageImgsDesktop) { image.style.display = 'none'; }
if (bookmark) bookmark.classList.remove('active');
}
if (packageImgMob) document.getElementById('packageLogoMob').style.display = 'none';
if(creditSection) creditSection.classList.remove('active');
}
}
/// Retrieves operating system of the mobile phone to direct the user to the correct
/// link to download the app. Default is android.
function getMobileOperatingSystem() {
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
if(userAgent && (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream))
window.open("https://apps.apple.com/mt/app/cloudigo/id1440612925", '_blank');
else window.open("https://play.google.com/store/apps/details?id=app.cloudigo.cloudigo&pli=1", '_blank');
}
// function feedbackForm(allowedCookie) {
// if ((allowedCookie &&
// decodedCookie &&
// (!decodedCookie.includes('feedback=') ||
// !(decodedCookie.substring(decodedCookie.indexOf("feedback=")+9, decodedCookie.indexOf(";",decodedCookie.indexOf("feedback=")))).includes(package.slug))
// )
// || (sessionStorage.getItem('feedback') == null || !(sessionStorage.getItem('feedback')).includes(package.slug))) {
// var feedbackModalContent = document.getElementById('feedbackModalContent');
// var feedbackQ = document.getElementById("feedbackQ");
// if(feedbackQ)
// feedbackQ.innerText = `What do you think about ${(package && package.name) ? 'the ' + package.name : 'this plan'} ?`;
// if (feedbackModalContent)
// setTimeout(() => document.body.classList.add("modal-open-feedback"), 10000);
// }
// }
// function handleFeedback(submit) {
// document.body.classList.remove("modal-open-feedback");
// var localPkgs = sessionStorage.getItem('feedback');
// if(localPkgs) sessionStorage.setItem('feedback', `${sessionStorage.getItem('feedback')}, ${package.slug}`);
// else sessionStorage.setItem('feedback', package.slug);
// if(decodedCookie && decodedCookie.includes('preference=allow')) {
// var current = new Date();
// var future = new Date(current.setDate(current.getDate() + 7)).toUTCString();
// var cookiePkgs = decodedCookie.includes("feedback=") ? decodedCookie.substring(decodedCookie.indexOf("feedback=")+9, decodedCookie.indexOf(";",decodedCookie.indexOf("feedback="))) : "";
// document.cookie = `feedback=${cookiePkgs != "" ? cookiePkgs + ',' + package.slug : package.slug}; expires=${future}`;
// }
// if(submit) {
// var feedbackQ = document.getElementById("feedbackQ");
// var feedbackA = document.getElementById("feedbackA");
// if (feedbackA && feedbackA.value) {
// var comment = feedbackA.value.trim();
// if (comment != "")
// sendFeedback(feedbackQ.innerText || "", comment, package.slug);
// }
// }
// }