const carouselHome=(()=>{if(typeof bootstrap==='undefined'){return;} const slides=document.querySelectorAll(".js-hero-carousel");if(!slides.length)return const toggleAutoplay=()=>{slides.forEach(slide=>{const btn=slide.querySelector(".js-hero-carousel-toggle") if(!btn)return;const carouselId=btn.getAttribute("data-carousel-id");const carouselElement=document.getElementById(carouselId);const carousel=bootstrap.Carousel.getInstance(carouselElement)||new bootstrap.Carousel(carouselElement);let isPlaying=true;btn.addEventListener("click",()=>{if(isPlaying){btn.setAttribute("aria-label","Play");carousel.pause();}else{btn.setAttribute("aria-label","Pause");carousel.cycle();} btn.classList.toggle("pause");isPlaying=!isPlaying;});})} document.addEventListener("DOMContentLoaded",toggleAutoplay)})() const certificateHome=(()=>{const container=document.querySelector(".js-certificate-home");if(!container)return;const trainingCourse=container.querySelector("#training-course");const course=document.querySelector("#training-course-filter");const updateFilterForm=container.querySelector("#filterForm");const dateFromEl=document.getElementById("dateFrom");const dateToEl=document.getElementById("dateTo");const searchEl=document.getElementById("studentSearch");const pendingCheckbox=document.getElementById("pending");const toast=document.querySelector(".js-certification-toast");const courseUrl="/certificate-hub";const courseEndpoint=`${courseUrl}/filters`;const courseApiPath="/umbraco/surface/StudentCourse/";const changeSelectText=(selectElement,selectedIndex=0)=>{const selectedOption=selectElement.options[selectedIndex];const selectedTrainingCentreName=selectedOption?.text;if(selectedTrainingCentreName){document.getElementById("selectedTrainingCentreName").innerText=selectedTrainingCentreName;}};const updateFormField=(element,value)=>{if(element){element.value=value;}};const updateCheckboxField=(checkbox,value)=>{if(checkbox){checkbox.checked=value;}};const addNoStudentsEl=()=>{return`
Unable to load exam information at this time.
";}} const handleDropdown=()=>{examDropdown.addEventListener('change',function(){const selectedValue=this.value;if(selectedValue==="select"){contentContainer.innerHTML="";return;} const sku=selectedValue.split('~')[0];getData(sku)});} document.addEventListener('DOMContentLoaded',()=>{handleDropdown();});})();document.addEventListener("DOMContentLoaded",function(){const WatercraftNumber=document.querySelector(".js-watercraft-identification-number");const form=document.querySelector(".js-submit-sail-numbers-form");const LengthDecimalInput=document.querySelector(".js-boatlength");const BeamDecimalInput=document.querySelector(".js-beam");const handleFormSubmit=(e)=>{e.preventDefault();const areRequiredFieldsValid=validation.validateGenericRequiredFields();const AreDropdownsValid=validation.validateDropdownFields();if(areRequiredFieldsValid&&AreDropdownsValid){form.submit();}};function validateInput(input,regex,maxLength){input.addEventListener("input",function(){let value=input.value.slice(0,maxLength);if(value.length>=2&&!regex.test(value)){value=value.slice(0,-1);} if(value.length===1&&!/^[A-Za-z]$/.test(value)){value="";} input.value=value;});} function limitDecimalNumbers(input){input.addEventListener("input",function({target}){target.value=target.value.replace(/[^\d.]/g,'').replace(/^(\d*\.\d{0,2}).*$/,'$1').replace(/\.{2,}/g,'.').replace(/^0+(\d)/,'$1').replace(/^(\d+)\./,'$1.');});} if(LengthDecimalInput){limitDecimalNumbers(LengthDecimalInput);} if(BeamDecimalInput){limitDecimalNumbers(BeamDecimalInput);} if(WatercraftNumber){validateInput(WatercraftNumber,/^[A-Za-z]{2}[A-Za-z0-9\-]*$/,18);} form?.addEventListener("submit",handleFormSubmit);});document.addEventListener("DOMContentLoaded",function(){const trainingHubResultsDiv=document.getElementById("trainingHubResultsDiv");const dropDownTrainingHub=document.getElementById("training-course");const filterDropDown=document.getElementById("filter-dropdown");const filterInputs=document.getElementById("filter-inputs-container");const dateTo=document.getElementById("dateTo");const dateFrom=document.getElementById("dateFrom");if(dateTo&&dateFrom){dateTo.addEventListener("change",()=>{dateFrom.setAttribute("max",dateTo.value);});dateFrom.addEventListener("change",()=>{dateTo.setAttribute("min",dateFrom.value);});} if(filterInputs&&filterDropDown){if(window.innerWidth<768){filterInputs.classList.add("hidden");} filterDropDown.addEventListener("click",()=>{if(window.innerWidth<768){filterInputs.classList.toggle("hidden");}});} if(trainingHubResultsDiv&&dropDownTrainingHub){dropDownTrainingHub.addEventListener("change",(e)=>{const selectedCourse=e.target.value;selectedCourse==="select"?trainingHubResultsDiv.classList.add("hidden"):trainingHubResultsDiv.classList.remove("hidden");});}});const addStudent=(()=>{const container=document.querySelector('.js-add-new-student');if(!container)return;const newStudentForm=container.querySelector('.js-add-student-to-course');const dayInput=newStudentForm.querySelector('.js-add-student-day');const monthInput=newStudentForm.querySelector('.js-add-student-month');const yearInput=newStudentForm.querySelector('.js-add-student-year');const dateErrorEl=newStudentForm.querySelector('.js-error-year-validation');const emailInput=newStudentForm.querySelector(".js-add-student-email");const errorEmail=newStudentForm.querySelector(".js-add-student-email-error");const submitButton=container.querySelector(".add-a-student-to-course__btn");const errorMessageActiveClass="error-message--active";const day31=dayInput?.querySelector('option[value="31"]');const day30=dayInput?.querySelector('option[value="30"]');const day29=dayInput?.querySelector('option[value="29"]');const addEvents=()=>{validation.enforceMaxLength(yearInput,4);yearInput?.addEventListener("input",({target})=>{validation.handleYearInput(target);});monthInput?.addEventListener("change",(e)=>{validation.handleMonthInput(e,day31,day30,day29)});};const addNewStudent=()=>{newStudentForm.addEventListener('submit',(e)=>{e.preventDefault();const errorDay=newStudentForm.querySelector(".js-error-day");const errorMonth=newStudentForm.querySelector(".js-error-month");const errorYear=newStudentForm.querySelector(".js-error-year");const errorFuture=newStudentForm.querySelector('.js-error-future-date');const areRequiredFieldsValid=validation.validateGenericRequiredFields();const isYearValid=!dateErrorEl.classList.contains(errorMessageActiveClass);const isEmailValid=validation.validateReferEmail(emailInput,errorEmail);const areDropdownsValid=validation.validateDropdownFields();const isDOBValid=validation.validateDateOfBirthMembership(dayInput,monthInput,yearInput,errorDay,errorMonth,errorYear);const isDateInFuture=validation.validateFutureDateOfBirth(dayInput,monthInput,yearInput,errorFuture,errorDay,errorMonth,errorYear);if(isDOBValid&&areRequiredFieldsValid&&isYearValid&&isEmailValid&&areDropdownsValid&&isDateInFuture){submitButton.disabled=true;newStudentForm.submit();}});};document.addEventListener('DOMContentLoaded',()=>{addEvents();addNewStudent();});})();const audioPlayer=(()=>{const audioEl=document.querySelector('.js-product-audio');if(!audioEl)return;const player=()=>{const player=new Plyr(audioEl,{controls:['play','progress'],settings:[]});player.on('loadedmetadata',()=>{playerReady(player);});player.on('timeupdate',()=>{playerUpdate(player);updateGradient();});};const playerReady=(player)=>{const duration=player.duration;const formattedDuration=formatTime(duration);const progress=audioEl.parentElement.querySelector('.plyr__progress__container');progress.insertAdjacentHTML('beforeBegin',timeElement(formattedDuration));};const playerUpdate=(player)=>{const currentTimeElement=audioEl.parentElement.querySelector('.js-audio-time-current');const currentTime=player.currentTime;const formattedTime=formatTime(currentTime);currentTimeElement.innerHTML=formattedTime;};const formatTime=(input)=>{const minutes=Math.floor(input/60);const seconds=Math.floor(input%60);return`${minutes}:${seconds.toString().padStart(2, '0')}`;};const timeElement=(duration)=>{return`