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 = ``; 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 = ``; 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); // } // } // }