{"version":3,"sources":["node_modules/browser-pack/_prelude.js","site.min.js","wwwroot/resources/js/MembershipCenterPopupControl.ts","wwwroot/resources/js/ProductPricingFindACentreControl.ts","wwwroot/resources/js/accordionControl.ts","wwwroot/resources/js/carouselControl.ts","wwwroot/resources/js/cmsContentControl.ts","wwwroot/resources/js/filterControl.ts","wwwroot/resources/js/findCenterControl.ts","wwwroot/resources/js/findSchoolControl.ts","wwwroot/resources/js/googleMapControl.ts","wwwroot/resources/js/helpers/controller.js","wwwroot/resources/js/helpers/controller.ts","wwwroot/resources/js/helpers/resize.ts","wwwroot/resources/js/helpers/shim.ts","wwwroot/resources/js/init.ts","wwwroot/resources/js/linkListControl.ts","wwwroot/resources/js/lottieAnimation.ts","wwwroot/resources/js/marqueeControl.ts","wwwroot/resources/js/memberSignupReturningCustomer.ts","wwwroot/resources/js/memberSignupSession.ts","wwwroot/resources/js/memberSignupSlotSelection.ts","wwwroot/resources/js/passwordDisplayControl.ts","wwwroot/resources/js/popupControl.ts","wwwroot/resources/js/readMoreControl.ts","wwwroot/resources/js/readingTime.ts","wwwroot/resources/js/resourcesControl.ts","wwwroot/resources/js/sharePage.ts","wwwroot/resources/js/siteNavControl.ts","wwwroot/resources/js/spinnerControl.ts","wwwroot/resources/js/tabControl.ts","wwwroot/resources/js/trialReturningCustomer.ts","wwwroot/resources/js/trialSignupSession.ts","wwwroot/resources/js/trialSlotSelection.ts","wwwroot/resources/js/utils/loadFlickity.ts","wwwroot/resources/js/utils/showLoader.ts","wwwroot/resources/js/videoBoxControl.ts"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","module","Object","defineProperty","value","MembershipCenterPopupControl","controller_1","findCenterControl_1","Controller","constructor","element","super","this","centreSelectForm","$","centerSelect","center","centerListing","findCenter","close","find","val","centerId","name","submit","onlineSelect","prop","findCenterControl","ProductPricingFindACentreControl","tabControl_1","carouselControl_1","carouselControls","updateDisplayOfSessionMonthlyPrices","checkbox","rootElement","productCards","productIndex","productCardVariants","productVariantIndex","productCardVariant","monthly","monthlyCost","monthlyCostValue","text","monthlyOldCost","monthlyOldCostValue","session","sessionCost","sessionCostValue","sessionOldCost","sessionOldCostValue","checked","show","hide","updateCentreId","centreId","centreContainer","attr","updateDisplayOfCentreName","updateDisplayOfCentreSelector","updateDisplayOfMonthlySessionToggleSwitch","updateDisplayOfPriceCarousel","hasCentreBeenSet","updateCentrePricesFromApi","getCentreId","productId","getProductId","get","data","productData","productIdToUpdate","priceData","variants","price","Math","round","currentPrice","toFixed","usualPrice","sessionCurrentPrice","sessionUsualPrice","centreNameContainer","priceCarousel","forEach","carousel","reloadFlickity","monthlySessionSwitch","is","undefined","click","findForm","each","index","push","CarouselControl","TabControl","tabSelectedClass","selectedDiv","callback","addEventListener","changeEvent","on","preventDefault","currentTarget","getAttribute","centre","variant","document","location","href","AccordionControl","accordionToggleElementMobOnly","window","className","includes","matchMedia","matches","currentElement","toggleClass","next","toggle","correctDesktopShowState","resize","addClass","removeClass","shim_1","resize_1","loadFlickity_1","title","windowWidth","flickity","Flickity","onWindowResize","innerWidth","loadFlickity","shim","showPageDots","_element","hasAttribute","showPrevNextButons","carouselElement","carouselItems","children","width","first","flickityInstance","cellAlign","contain","pageDots","prevNextButtons","destroy","loadScript","onResize","CmsContentControl","last","FilterControl","popupControl_1","filterModule","filterCloseButton","pageWrap","html","filterPill","currentURL","openCallback","pageHeight","innerHeight","css","scrollBackTo","config","popupElement","scrollTo","defaultEvents","PopupControl","target","innerHTML","toLowerCase","category","id","replace","categoryUpdated","substring","filterUpdated","split","join","googleMapControl_1","findCenterSelectors","findCenterModule","centerList","centerListCards","centerListCard","noResults","mapView","listView","tabs","postcodeValidation","switchToOnline","exploreOnline","searchForms","redirectOnSelect","selectCallback","linkCallback","hideFromHistory","findCenterHtml","form","centerListHtml","centerMapPopupHtml","postcode","distance","resultsToShow","setupLink","switchToOnlineSection","event","getUrlParameter","sParam","sParameterName","sURLVariables","search","decodeURIComponent","replaceQueryParam","param","newval","regex","RegExp","query","replaceTokens","source","replaceAll","loadGoogleMaps","script","createElement","src","async","head","appendChild","open","str","history","replaceState","pathname","validPostcode","displayCenters","popupControl","invalidPostcode","_this","toString","googleMapsLoad","setInterval","google","maps","clearInterval","Geocoder","geocode","address","results","status","GeocoderStatus","OK","geometry","getCenters","then","centers","getDistanceFromLatLonInMiles","lat","lng","renderCenters","noResultsCenters","noResultsCenter","centerLat","centerLon","dLat","deg2rad","dLon","sin","cos","atan2","sqrt","deg","PI","showNoResults","centerHtml","remove","slice","renderCenterListing","renderMap","createElementFromHTML","htmlString","div","trim","firstChild","sort","b","centerCardHtml","image","url","description","centreElement","selectCenter","append","markers","contactNumber","content","parseHTML","marker","map","selectedCenter","GoogleMapControl","outerHTML","FormData","urlPostcode","findSchoolControl","findSchoolSelectors","findSchoolModule","schoolList","schoolListCards","schoolListCard","findSchoolHtml","schoolListHtml","schoolMapPopupHtml","displaySchools","getSchools","schools","school","renderSchools","noResultsSchools","noResultsSchool","schoolLat","schoolLon","schoolHtml","renderSchoolListing","schoolCardHtml","schoolElement","selectSchool","selectedSchool","hasMapsAttribute","startlat","startlng","gMarkersTracker","timer","clearTimeout","setTimeout","querySelectorAll","tag","firstScriptTag","getElementsByTagName","parentNode","insertBefore","Map","zoom","streetViewControl","fullscreenControl","mapTypeControl","setCenter","removeAllMarkers","addMarker","gMarker","Marker","position","LatLng","icon","infowindow","InfoWindow","ariaLabel","addListener","currentInfoWindow","anchor","setMap","selector","Element","toLocaleLowerCase","PARSE_ID_ATTRIBUTE","setAttribute","floor","random","Date","now","func","time","debounce","videoBoxControl_1","readingTime_1","sharePage_1","siteNavControl_1","resourcesControl_1","linkListControl_1","accordionControl_1","filterControl_1","MembershipCenterPopupControl_1","ProductPricingFindACentreControl_1","spinnerControl_1","cmsContentControl_1","trialSignupSession_1","trialSlotSelection_1","trialReturningCustomer_1","memberSignupSession_1","memberSignupReturningCustomer_1","memberSignupSlotSelection_1","findSchoolControl_1","lottieAnimation_1","marqueeControl_1","passwordDisplayControl_1","readMoreControl_1","InitSiteJs","body","videoControls","readingTimeControls","sharePageControls","filterControls","accordionControls","popupControls","spinnerControls","findCenterControls","findSchoolControls","tabControls","googleMapControls","membershipControls","productPricingFindACentreControls","lottieAnimationControls","marqueeControls","passwordDisplayControl","readMoreControl","trialSignupSession","trialSlotSelection","trialReturningCustomer","memberSignupSession","memberSignupReturningCustomer","memberSignupSlotSelection","lottieAnimationControl","VideoBoxControl","MarqueeControl","PasswordDisplayControl","ReadMoreControl","ReadingTimeControl","SharePageControl","SpinnerControl","TrialSignupSession","TrialSlotSelection","TrialReturningCustomer","MemberSignupSession","MemberSignupReturningCustomer","MemberSignupSlotSelection","SiteNavControl","ResourcesControl","LinkListControl","listContainerItemsLeft","listContainerItemsRight","elementForConstruction","selectedItem","hasClass","mobileCutoffQuery","lottieHtml","animationPath","loadCompleted","playAnimation","newAnimationPath","animationName","animationContainer","empty","loadAnimation","container","renderer","loop","autoplay","path","loadLottie","prepend","resizeContent","animation","lerp","current","interpolationFactor","speed","direction","calcLerp","factor","animate","x","style","transform","render","requestAnimationFrame","cssText","controller_js_1","showLoader_1","btnForwardWelcomeBack","welcomeBack","navButtonsFull","navButtonsBackOnly","smsSelection","emailSelection","btnSendAccessCode","commsChoiceIsEmail","lnkResendAccessCode","rdoReturningCustomer","loader","handleWelcomeBackChoice","handleSubmitForm","handleReturningCustomerSelected","isReturningCustomer","ch","selectCommsChoice","isEmail","formId","getElementById","submitForm","handleSendAccessCode","handleResendAccessCode","dataset","ShowLoader","btnForwardStandard","btnBackStandard","inCentre","chooseCentre","selectedDetailsJson","selectedTypeCost","selectedTypeFrequency","selectedTypeSessionType","selectedTypeSessionIds","rdoProductVariant","btnMembershipCost","btnGetStarted","btnEditCentre","btnEditProduct","btnEditMembershipType","btnEditSlot1","btnEditSlot2","btnEditYourDetails","btnEditChildDetails","btnEditDirectDebitDetails","addressChoiceIsSame","addressTypeSelection","txtAddressLine1","txtAddressLine2","txtAddressLine3","txtAddressTownCity","txtAddressPostcode","noGetStartedNext","getStartedNext","rdoIsFreeTrial","inpNumericInputs","loadAddressAutocomplete","autocomplete","places","Autocomplete","componentRestrictions","country","fields","types","fillInAddress","place","getPlace","address1","address2","address3","townCity","address_components","component","long_name","submitMainForm","dob","handleProductVariantSelected","selectedVariantCost","selectedVariantFrequency","selectedVariantSessionType","selectedVariantSessionIds","handleEditSelected","payload","input","handleGetStarted","action","handleAddressTypeSelected","selected","handleGetStartedComplete","blur","BookingSlotsData","bookingSlotDays","bookingSlots","bookingSlotsCurrentData","daySlot","timeSelection","slotSelectedMessage","noSlotMessage","noGoNext","goNext","noSlotsAvailableMessageAM","noSlotsAvailableMessagePM","formChooseSlot","correlationId","variantSku","tuitionYear","desiredSchools","sessionId","productName","SlideChangedListener","HandleSlideChanged","flkty","dateCarousel","selectedIndex","slides","GetAvailableSlotsData","RepaintAvailableDays","additionalCell","thisDate","availableDate","stringDate","getFullYear","getMonth","getDate","slotCount","toDateString","toLocaleString","weekday","day","month","CreateNewSlide","off","newIndex","max","SelectDay","skipDays","dataUrl","getJSON","concat","SelectFirstDayAndMeridiem","fail","jqXHR","console","log","responseText","HandleGetSlotDataIssue","ResetDay","firstDay","startTime","parseInt","selectedDayParts","selectedDate","selectedDateStartTime","getTime","selectedDateEndTime","filter","d","bookingSlotTime","RepaintAvailableTimeSlots","slots","pmSlotsHtml","amSlotsHtml","slot","slotTime","toLocaleTimeString","timeZone","hour","minute","slotTimeEnd","endTime","slotTimeString","slotHtml","getHours","SelectTimeSlot","RepaintSelectedMessage","selectedTime","selectedTimeEnd","message","toLocaleDateString","newTarget","prev","PopupControlConfig","popupSelector","popupModule","popupCloseButton","scrollTop","checkPopupCloseExist","popupClose","closeCallback","popup","readMoreText","switchElement","targetCover","articleSelector","readingtime","words","innerText","ceil","linkCards","loadMore","showLess","listSize","noToShow","cardChunk","parent","sharepage","navigator","share","openNavButton","closeNavButton","openSearchButton","initialMenuContent","searchContent","siteNav","overlayCover","mainBody","videoHolder","video","filters","tempScrollTop","outerHeight","navMinHeightAttribute","formModule","options","targetTab","settings","handleClickEvent","parentElementClicked","divToShow","getTheElementToShow","showHideContentEvent","extend","hideContent","initialView","addClickEvents","numberOfTabbedContent","count","clickableElements","numberOfClickableElements","fullURL","tabHrefID","exec","elementToShow","tabClicked","lnkSubmit","lnkCancel","lnkWithSpinner","handleSimpleBack","back","btnForwardAlternate","btnBackAlternate","initialChildIndex","RequiredChildCount","firstChildTabWithErrors","childrenFirstNameSelector","errorsOnCurrentChildrenTabOrNoTabs","firstChildtabWithErrors","handleChildEditSelected","childNumber","handleInitialChildDisplay","Number","offset","top","classList","contains","timeSlot","bookingSlotsData","JSON","parse","userAgent","match","clearQueue","playerReady","initPlayer","createVideoHtmlElement","YT","insertAdjacentHTML","loadYoutubeVideo","toReplaceElement","REPLACE_ELEMENT_SELECTOR","videoId","youtubeid","player","Player","height","origin","events","onReady","onPlayerReady","h","attributes","sandbox","playVideo","checkVideoSize","videoHeight","PADDING_BOTTOM_VIDEO","viewportHeight","widthControlElement"],"mappings":"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","file":"site.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i{\r\n this.centerListing = center;\r\n this.findCenter.close();\r\n\r\n // Store the centre details we need\r\n this.centreSelectForm.find('#inCentre').val(this.centerListing.centerId);\r\n this.centreSelectForm.find('#centreName').val(this.centerListing.name);\r\n\r\n // Submit the form\r\n this.centreSelectForm.submit();\r\n }\r\n\r\n\r\n onlineSelect = () => {\r\n this.findCenter.close();\r\n\r\n // Select online and store the centre details we need\r\n this.centreSelectForm.find('#online').prop(\"checked\", true);\r\n this.centreSelectForm.find('#centreName').val('Online');\r\n\r\n // Submit the form\r\n this.centreSelectForm.submit();\r\n }\r\n}","import {Controller} from \"./helpers/controller\";\nimport {centerListing, findCenterControl} from \"./findCenterControl\";\nimport {TabControl as tabControl} from \"./tabControl\";\nimport {shim} from \"./helpers/shim\";\nimport {CarouselControl} from \"./carouselControl\";\n\nexport class ProductPricingFindACentreControl extends Controller {\n private centerListing?: centerListing;\n private findCenter?: findCenterControl;\n private rootElement: JQuery;\n public carouselControls: Array = [];\n private centreContainer: JQuery;\n \n constructor(element: HTMLElement) {\n super(element);\n\n this.rootElement = $(element);\n this.centreContainer = this.rootElement.find('#inCentre');\n \n // attach find a centre form\n if (this.rootElement.find('[data-product-pricing-find-a-centre-form]').length > 0) {\n let findForm = this.rootElement.find('[data-product-pricing-find-a-centre-form]')[0];\n this.findCenter = new findCenterControl(findForm, false, this.centerSelect, this.onlineSelect);\n }\n\n // carousels\n this.rootElement.find('[data-carousel-pricing]').each((index: number, element: Element) => {\n this.carouselControls.push(new CarouselControl(element as HTMLElement));\n })\n \n // online / centre tabs\n this.rootElement.find('[data-tabs-pricing]').each((index: number, element: Element) => {\n new tabControl(element as HTMLElement,\n {\n tabSelectedClass: 'selected',\n selectedDiv: '',\n callback: () => {\n this.carouselControls.forEach((carousel) => {\n carousel.reloadFlickity();\n });\n \n this.updateDisplayOfMonthlySessionToggleSwitch();\n }\n });\n });\n \n // monthly / session toggle\n this.rootElement.find(\"#pricing-session-monthly\").each((index: number, element: Element) => {\n (element as HTMLInputElement).addEventListener(\"change\", (changeEvent) => {\n this.updateDisplayOfSessionMonthlyPrices();\n });\n })\n\n // edit centre button\n this.rootElement.find('[data-pricing-edit-centre]').on('click', (element: any) => {\n this.updateCentreId(\"\");\n \n element.preventDefault();\n })\n\n if (($($('[data-pricing-centre-locked]')[0]).attr('data-pricing-centre-locked') == 'true')) {\n this.rootElement.find(\"#centreTab\")[0].click()\n }\n\n this.rootElement.find('[data-pricing-book-button]').on('click', (element: any) => {\n element.preventDefault();\n\n let productId = element.currentTarget.getAttribute('data-pricing-book-button-product-id');\n let centre = this.centreContainer.attr(\"data-pricing-centre-id\");\n let productIndex = element.currentTarget.getAttribute('data-pricing-book-button-product');\n let variant = $(`input[name = \"product${productIndex}\"]:checked`).val();\n\n document.location.href = `/membership/signup/getstarted?c=${centre ?? ''}&p=${productId}&v=${variant}`;\n });\n }\n \n updateDisplayOfSessionMonthlyPrices = () => {\n let checkbox = (this.rootElement.find(\"#pricing-session-monthly\")[0] as HTMLInputElement);\n \n // all pricing cards\n let productCards = this.rootElement.find('[data-pricing-card-product-id]');\n for (let productIndex: number = 0; productIndex < productCards.length; productIndex++) {\n let productCard = $(productCards[productIndex]);\n let productCardVariants = productCard.find('label.priceRadio');\n for (let productVariantIndex: number = 0; productVariantIndex < productCardVariants.length; productVariantIndex++) {\n let productCardVariant = $(productCardVariants[productVariantIndex]);\n \n let monthly = productCardVariant.find('[data-pricing-monthly]');\n \n let monthlyCost = $(monthly[1]);\n let monthlyCostValue = monthlyCost.find('.costPrice').text();\n \n let monthlyOldCost = $(monthly[0]);\n let monthlyOldCostValue = monthlyOldCost.find('.costPrice').text();\n \n let session = productCardVariant.find('[data-pricing-session]');\n \n let sessionCost = $(session[1]);\n let sessionCostValue = sessionCost.find('.costPrice').text();\n \n let sessionOldCost = $(session[0]);\n let sessionOldCostValue = sessionOldCost.find('.costPrice').text();\n\n if (checkbox.checked) {\n sessionCost.show();\n if (sessionCostValue == sessionOldCostValue) {\n sessionOldCost.hide();\n } else {\n sessionOldCost.show();\n }\n \n monthlyCost.hide();\n monthlyOldCost.hide();\n } else {\n sessionCost.hide();\n sessionOldCost.hide();\n monthlyCost.show();\n if (monthlyCostValue == monthlyOldCostValue) {\n monthlyOldCost.hide();\n } else {\n monthlyOldCost.show();\n }\n }\n }\n }\n \n }\n\n updateCentreId = (centreId: string) => {\n this.centreContainer.attr(\"data-pricing-centre-id\", centreId);\n\n this.updateDisplayOfCentreName();\n \n this.updateDisplayOfCentreSelector();\n\n this.updateDisplayOfMonthlySessionToggleSwitch();\n \n this.updateDisplayOfPriceCarousel();\n \n if (this.hasCentreBeenSet()) {\n this.updateCentrePricesFromApi();\n }\n }\n \n updateCentrePricesFromApi = () => {\n let centreId = this.getCentreId();\n \n let productId = this.getProductId();\n \n $.get( \"/api/pricingapi/centre/?centreId=\" + centreId + \"&productId=\" + productId, ( data: Array ) => {\n for (let productIndex: number = 0; productIndex < data.length; productIndex++) {\n let productData = data[productIndex];\n let productIdToUpdate = productData.productId;\n\n let productCard = this.centreContainer.find('[data-pricing-card-product-id=\"' + productIdToUpdate + '\"]');\n let productCardVariants = productCard.find('label.priceRadio');\n for (let productVariantIndex: number = 0; productVariantIndex < productCardVariants.length; productVariantIndex++)\n {\n let productCardVariant = $(productCardVariants[productVariantIndex]);\n\n let monthly = productCardVariant.find('[data-pricing-monthly]');\n let session = productCardVariant.find('[data-pricing-session]');\n\n let priceData = productData.variants[productVariantIndex].price;\n \n let monthlyCost = $(monthly[1]);\n monthlyCost.find('.costPrice').text((Math.round(priceData.currentPrice * 100) / 100).toFixed(2));\n \n let monthlyOldCost = $(monthly[0]);\n monthlyOldCost.find('.costPrice').text((Math.round(priceData.usualPrice * 100) / 100).toFixed(2));\n \n let sessionCost = $(session[1]);\n sessionCost.find('.costPrice').text((Math.round(priceData.sessionCurrentPrice * 100) / 100).toFixed(2));\n \n let sessionOldCost = $(session[0]);\n sessionOldCost.find('.costPrice').text((Math.round(priceData.sessionUsualPrice * 100) / 100).toFixed(2));\n\n this.updateDisplayOfSessionMonthlyPrices();\n }\n }\n });\n }\n\n getCentreId = () => {\n return this.centreContainer.attr(\"data-pricing-centre-id\");\n }\n \n getProductId = () => {\n return this.rootElement.attr(\"data-pricing-product-id\");\n }\n \n hasCentreBeenSet = () => {\n return this.getCentreId().length > 0;\n }\n \n updateDisplayOfCentreName = () => {\n let centreNameContainer = this.centreContainer.find(\"#centreNameContainer\");\n if (this.hasCentreBeenSet()) {\n centreNameContainer.show();\n } else {\n centreNameContainer.hide();\n }\n }\n \n updateDisplayOfPriceCarousel = () => {\n let priceCarousel = this.centreContainer.find(\".priceCarousel\");\n if (this.hasCentreBeenSet()) {\n priceCarousel.show();\n } else {\n priceCarousel.hide();\n }\n\n this.carouselControls.forEach((carousel) => {\n carousel.reloadFlickity();\n });\n }\n\n updateDisplayOfCentreSelector = () => {\n let centreNameContainer = this.centreContainer.find(\"#centreSelectorContainer\");\n if (this.hasCentreBeenSet()) {\n centreNameContainer.hide();\n } else {\n centreNameContainer.show();\n }\n }\n \n updateDisplayOfMonthlySessionToggleSwitch = () => {\n let monthlySessionSwitch = this.rootElement.find(\"label.switch\");\n \n if (!this.centreContainer.is(':visible')) {\n monthlySessionSwitch.show();\n } else {\n if (this.hasCentreBeenSet()) {\n monthlySessionSwitch.show();\n } else {\n // hide the session toggle if we haven't got a centre yet\n monthlySessionSwitch.hide();\n }\n }\n }\n \n centerSelect = (center: centerListing) =>{\n this.centerListing = center;\n if (this.findCenter == undefined) {\n return;\n }\n \n this.findCenter.close();\n\n this.updateCentreId(center.centerId);\n\n this.centreContainer.find(\"p.centrePicked\").find(\"strong\").text(center.name);\n }\n\n onlineSelect = () => {\n if (this.findCenter == undefined) {\n return;\n }\n \n this.findCenter.close(); \n \n this.rootElement.find(\"#onlineTab\")[0].click()\n }\n}","/// \n\nimport {Controller} from \"./helpers/controller\";\n\nexport class AccordionControl extends Controller{\n \n private accordionToggleElementMobOnly: JQuery = $('.accordionToggleMobOnly');\n private window: JQuery = $(window);\n \n constructor(element: HTMLElement) {\n super(element);\n\n $(element).on('click', (e)=>{\n \n if (element.className.includes(\"accordionToggleMobOnly\") \n && window.matchMedia(\"(min-width: 1024px)\").matches) {\n return;\n }\n else {\n let currentElement = $(e.currentTarget);\n currentElement.toggleClass(\"open\");\n currentElement.next().toggle();\n }\n });\n \n this.correctDesktopShowState();\n \n this.window.resize(() => {\n this.correctDesktopShowState();\n });\n \n }\n \n correctDesktopShowState() {\n if (window.matchMedia(\"(min-width: 1024px)\").matches) {\n this.accordionToggleElementMobOnly.next().show();\n this.accordionToggleElementMobOnly.addClass(\"open\");\n } else {\n this.accordionToggleElementMobOnly.next().hide();\n this.accordionToggleElementMobOnly.removeClass(\"open\");\n }\n }\n}","import {Controller} from \"./helpers/controller\";\r\nimport {shim} from \"./helpers/shim\";\r\nimport {onResize} from \"./helpers/resize\";\r\nimport {centerListing} from \"./findCenterControl\";\r\nimport {Flickity} from \"./utils/loadFlickity\";\r\n\r\nexport class CarouselControl extends Controller {\r\n\r\n private timer: number | undefined;\r\n private title: string = '';\r\n private flickityInstance: any;\r\n private windowWidth: number = 0;\r\n private flickity: Flickity = new Flickity();\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n this.flickity.loadScript(this.loadFlickity);\r\n\r\n onResize(this.onWindowResize, 200);\r\n }\r\n \r\n onWindowResize = () => {\r\n if (this.windowWidth == window.innerWidth) {\r\n return;\r\n }\r\n this.windowWidth = window.innerWidth;\r\n this.reloadFlickity();\r\n }\r\n\r\n \r\n loadFlickity = () => {\r\n let flickity = shim('Flickity');\r\n let showPageDots = this._element.hasAttribute('data-carousel-dots');\r\n let showPrevNextButons = showPageDots ? false : !this._element.hasAttribute('data-carousel-clean');\r\n\r\n var carouselElement = this.$();\r\n var carouselItems = carouselElement.children();\r\n if (carouselElement.width() < (carouselItems.first().innerWidth() * (carouselItems.length))) {\r\n this.flickityInstance = new flickity(this._element, {\r\n cellAlign: 'left',\r\n contain: true,\r\n pageDots: showPageDots,\r\n prevNextButtons: showPrevNextButons\r\n });\r\n }\r\n }\r\n \r\n reloadFlickity = () => {\r\n if (this.flickityInstance) {\r\n this.flickityInstance.destroy();\r\n }\r\n this.loadFlickity();\r\n }\r\n}\r\n\r\n","/// \n\n\nexport class CmsContentControl {\n\n constructor() {\n \n $('main').children('.contentHolder').last().addClass(\"last-element\");\n }\n}","/// \n\nimport {Controller} from \"./helpers/controller\";\nimport {PopupControl, PopupControlConfig} from \"./popupControl\";\n\nexport class FilterControl extends Controller {\n \n private filterModule = () => $('#filterModule');\n private filterCloseButton = () => this.filterModule().find('[data-filterclose]');\n private pageWrap: JQuery = $('.pageWrap');\n private scrollBackTo: number;\n private html: JQuery = $('html');\n private filterPill: JQuery = $('.filterPills li');\n private currentURL = window.location.href;\n \n constructor(element: HTMLElement) {\n super(element);\n \n this.scrollBackTo = 0\n\n let config: PopupControlConfig = {\n popupElement: this.filterModule().get()[0],\n openCallback: this.openCallback,\n scrollTo: this.scrollBackTo,\n defaultEvents: true\n }\n let filterPopup = new PopupControl(element,config);\n\n this.filterPill.on('click',(e) => {\n e.preventDefault();\n \n if (e.target.innerHTML.toLowerCase() == \"clear all\")\n {\n window.location.href = \"/free-resources/\"\n }\n \n let category = e.target.id.replace(' ','');\n let categoryUpdated = category[0].toLowerCase() + category.substring(1);\n\n let filter = e.target.innerHTML.toLowerCase().replace(',', '').replace(' & ', ' ').replace('(', '').replace(')', '').replace('+', '')\n let filterUpdated = filter.split(' ').join('-')\n\n window.location.href = this.currentURL.replace( \"&filters%5B\"+ categoryUpdated + \"%5D=\" + filterUpdated,\"\").replace(\"filters%5B\"+ categoryUpdated + \"%5D=\" + filterUpdated,\"\");\n });\n }\n \n openCallback = () => {\n let pageHeight = this.pageWrap.innerHeight() + \"px\";\n this.filterModule().css(\"min-height\", pageHeight);\n }\n}\n\n","/// \r\n/// \r\nimport {Controller} from \"./helpers/controller\";\r\nimport {PopupControl, PopupControlConfig} from \"./popupControl\";\r\nimport {GoogleMapControl, Marker} from \"./googleMapControl\";\r\n\r\ninterface image {\r\n title: string,\r\n description: string,\r\n url: string\r\n}\r\n\r\nexport interface centerListing {\r\n name: string,\r\n centerId: string,\r\n contactNumber: string,\r\n address: string,\r\n image: image,\r\n lat: number,\r\n lng: number,\r\n distance: number,\r\n url: string,\r\n}\r\n\r\nclass findCenterSelectors {\r\n public static findCenterModule: string = '#centrePopup';\r\n public static centerList: string = '#centerList';\r\n public static centerListCards: string = '#centerList .linkCard';\r\n public static centerListCard: string = '[data-centerCard]';\r\n public static noResults: string = '[data-centerResults]';\r\n public static mapView: string = '#mapView';\r\n public static listView: string = '#listView';\r\n public static tabs: string = '[data-tabs=\"centerFinder\"]';\r\n public static postcodeValidation: string = '[data-findCenter-validation]';\r\n public static switchToOnline: string = '.cantFind';\r\n public static exploreOnline: string = '.exploreOnline';\r\n public static searchForms: string = '[data-findCenter-form]';\r\n}\r\n\r\nexport class findCenterControl extends Controller {\r\n\r\n private findCenterModule = () => $(findCenterSelectors.findCenterModule);\r\n private readonly findCenterHtml = this.findCenterModule().html();\r\n private centerCardHtml: string;\r\n private centerList = () => $(findCenterSelectors.centerList);\r\n private form = () => $(this._element);\r\n\r\n private centerListHtml: string = this.centerList().html();\r\n\r\n private readonly centerMapPopupHtml: string = `
\r\n

{{name}}

\r\n

{{address}}

\r\n

{{contactNumber}}

\r\n \r\n
`\r\n private popupControl?: PopupControl;\r\n\r\n private postcode: string = '';\r\n private distance: number = 50;\r\n private resultsToShow: number = 3;\r\n private redirectOnSelect: boolean;\r\n private hideFromHistory: boolean ;\r\n public selectedCenter?: centerListing;\r\n public selectCallback?: (center: centerListing) => void;\r\n public linkCallback?: () => void;\r\n\r\n private map?: GoogleMapControl\r\n\r\n constructor(element: HTMLElement, redirectOnSelect: boolean = true, selectCallback?: (center: centerListing) => void, linkCallback?: () => void, hideFromHistory: boolean = false) {\r\n super(element);\r\n\r\n this.map = new GoogleMapControl($(findCenterSelectors.mapView).get()[0] as HTMLElement);\r\n\r\n this.redirectOnSelect = redirectOnSelect;\r\n this.hideFromHistory = hideFromHistory;\r\n this.selectCallback = selectCallback;\r\n this.linkCallback = linkCallback;\r\n\r\n this.centerCardHtml = this.findCenterModule().find(findCenterSelectors.centerListCard)[0].outerHTML;\r\n this.findCenterModule().find(findCenterSelectors.centerListCard).remove();\r\n this.centerListHtml = this.centerList().html();\r\n\r\n let config: PopupControlConfig = {\r\n popupElement: this.findCenterModule().get()[0],\r\n defaultEvents: false,\r\n scrollTo: 0\r\n }\r\n this.popupControl = new PopupControl(element, config);\r\n\r\n let formButtons = this.form()\r\n formButtons.submit((event) => {\r\n event.preventDefault();\r\n const formData = new FormData(event.currentTarget as HTMLFormElement);\r\n\r\n let postcode = formData.get('postcode') ?? '';\r\n if (postcode === '')\r\n {\r\n this.invalidPostcode();\r\n }\r\n else\r\n {\r\n this.open(postcode.toString());\r\n }\r\n })\r\n\r\n let searchAgainFormButtons = $(findCenterSelectors.searchForms);\r\n searchAgainFormButtons.submit((event) => {\r\n event.preventDefault();\r\n const formData = new FormData(event.currentTarget as HTMLFormElement);\r\n\r\n let postcode = formData.get('postcode') ?? '';\r\n if (postcode === '')\r\n {\r\n this.invalidPostcode();\r\n }\r\n else\r\n {\r\n this.open(postcode.toString());\r\n }\r\n })\r\n\r\n\r\n let urlPostcode = this.getUrlParameter('postcode')\r\n if (urlPostcode) {\r\n this.open(urlPostcode);\r\n }\r\n\r\n if (this.linkCallback != null) {\r\n this.setupLink();\r\n }\r\n }\r\n\r\n setupLink = () => {\r\n let switchToOnlineSection = $(findCenterSelectors.switchToOnline)\r\n switchToOnlineSection.find('a').click((event) => {\r\n if (this.linkCallback != null) {\r\n this.linkCallback();\r\n event.preventDefault();\r\n }\r\n });\r\n\r\n switchToOnlineSection.show();\r\n $(findCenterSelectors.exploreOnline).hide();\r\n }\r\n\r\n\r\n getUrlParameter = (sParam: string) => {\r\n var sPageURL = window.location.search.substring(1),\r\n sURLVariables = sPageURL.split('&'),\r\n sParameterName,\r\n i;\r\n\r\n for (i = 0; i < sURLVariables.length; i++) {\r\n sParameterName = sURLVariables[i].split('=');\r\n\r\n if (sParameterName[0] === sParam) {\r\n return sParameterName[1] === undefined ? false : decodeURIComponent(sParameterName[1]);\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n replaceQueryParam = (param: string, newval: string, search: string) => {\r\n var regex = new RegExp(\"([?;&])\" + param + \"[^&;]*[;&]?\");\r\n var query = search.replace(regex, \"$1\").replace(/&$/, '');\r\n\r\n return (query.length > 2 ? query + \"&\" : \"?\") + (newval ? param + \"=\" + newval : '');\r\n }\r\n replaceTokens = (name: string, value: string, source: string) => {\r\n return source.replaceAll(\"{{\" + name + \"}}\", value);\r\n }\r\n\r\n loadGoogleMaps = () => {\r\n // Create the script tag, set the appropriate attributes\r\n var script = document.createElement('script');\r\n script.src = 'https://maps.googleapis.com/maps/api/js?key=AIzaSyAlMU0LxsgA4KPPo6So6PndggciJ_i_oJg';\r\n script.async = true;\r\n\r\n // Append the 'script' element to 'head'\r\n document.head.appendChild(script);\r\n }\r\n\r\n public open = (postcode: string) => {\r\n\r\n this.postcode = postcode;\r\n\r\n var str = window.location.search\r\n str = this.replaceQueryParam('postcode', postcode, str)\r\n\r\n if (window.history.replaceState && !this.hideFromHistory) {\r\n //prevents browser from storing history with each change:\r\n window.history.replaceState({}, '', window.location.pathname + str);\r\n }\r\n\r\n this.validPostcode();\r\n\r\n this.displayCenters();\r\n }\r\n\r\n public close = () => {\r\n this.popupControl?.close();\r\n }\r\n\r\n invalidPostcode = () => {\r\n //this.popupControl?.close();\r\n $(findCenterSelectors.postcodeValidation).show();\r\n }\r\n\r\n validPostcode = () => {\r\n $(findCenterSelectors.postcodeValidation).hide();\r\n }\r\n\r\n displayCenters = () => {\r\n var _this = this;\r\n\r\n $(findCenterSelectors.centerList).hide();\r\n\r\n let noResults = $(findCenterSelectors.noResults);\r\n noResults.html(_this.replaceTokens('distance', _this.distance.toString(), noResults.html()))\r\n noResults.hide();\r\n\r\n var googleMapsLoad = setInterval(() => {\r\n if (typeof google === 'object' && typeof google.maps === 'object') {\r\n clearInterval(googleMapsLoad);\r\n\r\n //first, get coordinates for the postcode provided\r\n var geocoder = new google.maps.Geocoder();\r\n\r\n geocoder.geocode({address: this.postcode + \", UK\"},\r\n function (results, status) {\r\n if (status == google.maps.GeocoderStatus.OK && results != null) {\r\n let location = results[0].geometry.location\r\n _this.popupControl?.open();\r\n\r\n _this.getCenters(location, _this.distance).then(function (centers: Array) {\r\n\r\n if (centers.length > 0) {\r\n centers.forEach((center) => {\r\n center.distance = _this.getDistanceFromLatLonInMiles(location, center.lat, center.lng)\r\n });\r\n _this.renderCenters(_this, centers, location, false);\r\n\r\n } else {\r\n _this.getCenters(location, 9999).then(function (noResultsCenters: Array) {\r\n noResultsCenters.forEach((noResultsCenter) => {\r\n noResultsCenter.distance = _this.getDistanceFromLatLonInMiles(location, noResultsCenter.lat, noResultsCenter.lng)\r\n });\r\n _this.renderCenters(_this, noResultsCenters, location, true);\r\n })\r\n }\r\n })\r\n } else {\r\n _this.invalidPostcode();\r\n }\r\n })\r\n\r\n }\r\n }, 500)\r\n\r\n }\r\n\r\n getDistanceFromLatLonInMiles = (location: google.maps.LatLng, centerLat: number, centerLon: number) => {\r\n var R = 6371; // Radius of the earth in km\r\n var dLat = this.deg2rad(centerLat - location.lat()); // deg2rad below\r\n var dLon = this.deg2rad(centerLon - location.lng());\r\n var a =\r\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\r\n Math.cos(this.deg2rad(location.lat())) * Math.cos(this.deg2rad(centerLat)) *\r\n Math.sin(dLon / 2) * Math.sin(dLon / 2)\r\n ;\r\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n var d = R * c; // Distance in km\r\n return d / 1.609;\r\n }\r\n\r\n deg2rad = (deg: number) => {\r\n return deg * (Math.PI / 180)\r\n }\r\n\r\n renderCenters = (_this: this, centers: Array, location: google.maps.LatLng, showNoResults: boolean) => {\r\n\r\n let noResults = $(findCenterSelectors.noResults);\r\n\r\n let centerHtml = _this.replaceTokens('postcode', _this.postcode, _this.centerListHtml);\r\n \r\n\r\n $(findCenterSelectors.centerListCards).remove();\r\n\r\n if (centers.length > 0) {\r\n centers = centers.slice(0,this.resultsToShow);\r\n _this.centerList().html(_this.replaceTokens('count', centers.length.toString(), centerHtml));\r\n _this.renderCenterListing(centers);\r\n _this.renderMap(centers, location);\r\n $(findCenterSelectors.centerList).show();\r\n $(findCenterSelectors.tabs).show();\r\n }\r\n\r\n if (showNoResults) {\r\n noResults.show();\r\n } else {\r\n noResults.hide();\r\n }\r\n }\r\n\r\n getCenters = (location: google.maps.LatLng, distance: number) => {\r\n return $.get(`/api/center/nearest?lat=${location.lat()}&lng=${location.lng()}&distance=${distance}`)\r\n }\r\n\r\n createElementFromHTML = (htmlString: string) => {\r\n var div = document.createElement('div');\r\n div.innerHTML = htmlString.trim();\r\n\r\n // Change this to div.childNodes to support multiple top-level nodes.\r\n return div.firstChild as Element;\r\n }\r\n\r\n renderCenterListing = (centers: Array) => {\r\n let _this = this;\r\n let sortedCentres = centers.sort((a, b) => {\r\n return a.distance - b.distance;\r\n });\r\n\r\n sortedCentres.forEach((center, index: number) => {\r\n \r\n let html = this.replaceTokens('name', center.name, this.centerCardHtml);\r\n html = this.replaceTokens('address', center.address, html);\r\n html = this.replaceTokens('distance', center.distance.toFixed(2), html);\r\n\r\n html = this.replaceTokens('imageUrl', center.image.url, html);\r\n html = this.replaceTokens('imageDescription', center.image.description, html);\r\n\r\n let centreElement = this.createElementFromHTML(html);\r\n\r\n $(centreElement).click(center, (event) => {\r\n this.selectCenter(center);\r\n event.preventDefault();\r\n });\r\n\r\n this.centerList().append(centreElement);\r\n \r\n\r\n })\r\n\r\n }\r\n\r\n renderMap = (centers: Array, location: google.maps.LatLng) => {\r\n let _this = this;\r\n let markers: Array = [];\r\n\r\n centers.forEach((center, index) => {\r\n \r\n let html = this.replaceTokens('name', center.name, this.centerMapPopupHtml);\r\n html = this.replaceTokens('address', center.address, html);\r\n html = this.replaceTokens('contactNumber', center.contactNumber, html);\r\n\r\n let content = $.parseHTML(html);\r\n $(content).find('button').click(center, (event) => {\r\n this.selectCenter(center);\r\n event.preventDefault();\r\n })\r\n\r\n let marker: Marker = {\r\n lat: center.lat,\r\n lng: center.lng,\r\n name: center.name,\r\n content: content[0] as Element\r\n }\r\n markers.push(marker);\r\n \r\n })\r\n\r\n this.map?.renderMap(markers, location.lat(), location.lng());\r\n\r\n }\r\n selectCenter = (center: centerListing) => {\r\n this.selectedCenter = center;\r\n if (this.redirectOnSelect) {\r\n window.location.href = center.url;\r\n }\r\n if (this.selectCallback != null) {\r\n this.selectCallback(center);\r\n }\r\n }\r\n\r\n}\r\n\r\n","/// \n/// \nimport {Controller} from \"./helpers/controller\";\nimport {PopupControl, PopupControlConfig} from \"./popupControl\";\nimport {GoogleMapControl, Marker} from \"./googleMapControl\";\n\ninterface image {\n title: string,\n description: string,\n url: string\n}\n\nexport interface schoolListing {\n name: string,\n centerId: string,\n contactNumber: string,\n address: string,\n image: image,\n lat: number,\n lng: number,\n distance: number,\n url: string,\n}\n\nclass findSchoolSelectors {\n public static findSchoolModule: string = '#schoolPopup';\n public static schoolList: string = '#schoolList';\n public static schoolListCards: string = '#schoolList .linkCard';\n public static schoolListCard: string = '[data-schoolCard]';\n public static noResults: string = '[data-schoolResults]';\n public static mapView: string = '#schoolPopup #mapView';\n public static listView: string = '#schoolPopup #listView';\n public static tabs: string = '[data-tabs=\"schoolFinder\"]';\n public static postcodeValidation: string = '[data-findSchool-validation]';\n public static switchToOnline: string = '#schoolPopup .cantFind';\n public static exploreOnline: string = '#schoolPopup .exploreOnline';\n public static searchForms: string = '[data-findSchool-form]';\n}\n\nexport class findSchoolControl extends Controller {\n\n private findSchoolModule = () => $(findSchoolSelectors.findSchoolModule);\n private readonly findSchoolHtml = this.findSchoolModule().html();\n private schoolCardHtml: string;\n private schoolList = () => $(findSchoolSelectors.schoolList);\n private form = () => $(this._element);\n\n private schoolListHtml: string = this.schoolList().html();\n\n private readonly schoolMapPopupHtml: string = `
\n

{{name}}

\n

{{address}}

\n

{{contactNumber}}

\n \n
`\n private popupControl?: PopupControl;\n\n private postcode: string = '';\n private distance: number = 50;\n private resultsToShow: number = 3;\n private redirectOnSelect: boolean;\n public selectedSchool?: schoolListing;\n public selectCallback?: (school: schoolListing) => void;\n public linkCallback?: () => void;\n\n private map?: GoogleMapControl\n\n constructor(element: HTMLElement, redirectOnSelect: boolean = true, selectCallback?: (school: schoolListing) => void, linkCallback?: () => void) {\n super(element);\n\n this.map = new GoogleMapControl($(findSchoolSelectors.mapView).get()[0] as HTMLElement);\n\n this.redirectOnSelect = redirectOnSelect;\n this.selectCallback = selectCallback;\n this.linkCallback = linkCallback;\n\n this.schoolCardHtml = this.findSchoolModule().find(findSchoolSelectors.schoolListCard)[0].outerHTML;\n\n this.findSchoolModule().find(findSchoolSelectors.schoolListCard).remove();\n this.schoolListHtml = this.schoolList().html();\n\n let config: PopupControlConfig = {\n popupElement: this.findSchoolModule().get()[0],\n defaultEvents: false,\n scrollTo: 0\n }\n this.popupControl = new PopupControl(element, config);\n\n let formButtons = this.form()\n formButtons.submit((event) => {\n\n event.preventDefault();\n const formData = new FormData(event.currentTarget as HTMLFormElement);\n\n let postcode = formData.get('postcode') ?? '';\n \n if (postcode === '')\n {\n this.invalidPostcode();\n }\n else\n {\n this.open(postcode.toString());\n }\n })\n\n let searchAgainFormButtons = $(findSchoolSelectors.searchForms);\n searchAgainFormButtons.submit((event) => {\n \n event.preventDefault();\n const formData = new FormData(event.currentTarget as HTMLFormElement);\n\n let postcode = formData.get('postcode') ?? '';\n if (postcode === '')\n {\n this.invalidPostcode();\n }\n else\n {\n this.open(postcode.toString());\n }\n })\n\n\n let urlPostcode = this.getUrlParameter('postcode')\n if (urlPostcode) {\n this.open(urlPostcode);\n }\n\n if (this.linkCallback != null) {\n this.setupLink();\n }\n }\n\n setupLink = () => {\n let switchToOnlineSection = $(findSchoolSelectors.switchToOnline)\n switchToOnlineSection.find('a').click((event) => {\n if (this.linkCallback != null) {\n this.linkCallback();\n event.preventDefault();\n }\n });\n\n switchToOnlineSection.show();\n $(findSchoolSelectors.exploreOnline).hide();\n }\n\n\n getUrlParameter = (sParam: string) => {\n var sPageURL = window.location.search.substring(1),\n sURLVariables = sPageURL.split('&'),\n sParameterName,\n i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? false : decodeURIComponent(sParameterName[1]);\n }\n }\n return false;\n };\n\n replaceQueryParam = (param: string, newval: string, search: string) => {\n var regex = new RegExp(\"([?;&])\" + param + \"[^&;]*[;&]?\");\n var query = search.replace(regex, \"$1\").replace(/&$/, '');\n\n return (query.length > 2 ? query + \"&\" : \"?\") + (newval ? param + \"=\" + newval : '');\n }\n replaceTokens = (name: string, value: string, source: string) => {\n return source.replaceAll(\"{{\" + name + \"}}\", value);\n }\n\n loadGoogleMaps = () => {\n // Create the script tag, set the appropriate attributes\n var script = document.createElement('script');\n script.src = 'https://maps.googleapis.com/maps/api/js?key=AIzaSyAlMU0LxsgA4KPPo6So6PndggciJ_i_oJg';\n script.async = true;\n\n // Append the 'script' element to 'head'\n document.head.appendChild(script);\n }\n\n public open = (postcode: string) => {\n\n this.postcode = postcode;\n\n var str = window.location.search\n str = this.replaceQueryParam('postcode', postcode, str)\n\n if (window.history.replaceState) {\n //prevents browser from storing history with each change:\n window.history.replaceState({}, '', window.location.pathname + str);\n }\n\n this.validPostcode();\n\n this.displaySchools();\n }\n\n public close = () => {\n this.popupControl?.close();\n }\n\n invalidPostcode = () => {\n //this.popupControl?.close();\n $(findSchoolSelectors.postcodeValidation).show();\n }\n\n validPostcode = () => {\n $(findSchoolSelectors.postcodeValidation).hide();\n }\n\n displaySchools = () => {\n var _this = this;\n\n $(findSchoolSelectors.schoolList).hide();\n\n let noResults = $(findSchoolSelectors.noResults);\n noResults.html(_this.replaceTokens('distance', _this.distance.toString(), noResults.html()))\n noResults.hide();\n\n var googleMapsLoad = setInterval(() => {\n if (typeof google === 'object' && typeof google.maps === 'object') {\n clearInterval(googleMapsLoad);\n\n //first, get coordinates for the postcode provided\n var geocoder = new google.maps.Geocoder();\n\n geocoder.geocode({address: this.postcode + \", UK\"},\n function (results, status) {\n if (status == google.maps.GeocoderStatus.OK && results != null) {\n let location = results[0].geometry.location\n _this.popupControl?.open();\n\n _this.getSchools(location, _this.distance).then(function (schools: Array) {\n\n if (schools.length > 0) {\n schools.forEach((school) => {\n school.distance = _this.getDistanceFromLatLonInMiles(location, school.lat, school.lng)\n });\n _this.renderSchools(_this, schools, location, false);\n\n } else {\n _this.getSchools(location, 9999).then(function (noResultsSchools: Array) {\n noResultsSchools.forEach((noResultsSchool) => {\n noResultsSchool.distance = _this.getDistanceFromLatLonInMiles(location, noResultsSchool.lat, noResultsSchool.lng)\n });\n _this.renderSchools(_this, noResultsSchools, location, true);\n })\n }\n })\n } else {\n _this.invalidPostcode();\n }\n })\n\n }\n }, 500)\n\n }\n\n getDistanceFromLatLonInMiles = (location: google.maps.LatLng, schoolLat: number, schoolLon: number) => {\n var R = 6371; // Radius of the earth in km\n var dLat = this.deg2rad(schoolLat - location.lat()); // deg2rad below\n var dLon = this.deg2rad(schoolLon - location.lng());\n var a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(this.deg2rad(location.lat())) * Math.cos(this.deg2rad(schoolLat)) *\n Math.sin(dLon / 2) * Math.sin(dLon / 2)\n ;\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n var d = R * c; // Distance in km\n return d / 1.609;\n }\n\n deg2rad = (deg: number) => {\n return deg * (Math.PI / 180)\n }\n\n renderSchools = (_this: this, schools: Array, location: google.maps.LatLng, showNoResults: boolean) => {\n\n let noResults = $(findSchoolSelectors.noResults);\n\n let schoolHtml = _this.replaceTokens('postcode', _this.postcode, _this.schoolListHtml);\n \n\n $(findSchoolSelectors.schoolListCards).remove();\n\n if (schools.length > 0) {\n schools = schools.slice(0,this.resultsToShow);\n _this.schoolList().html(_this.replaceTokens('count', schools.length.toString(), schoolHtml));\n _this.renderSchoolListing(schools);\n _this.renderMap(schools, location);\n $(findSchoolSelectors.schoolList).show();\n $(findSchoolSelectors.tabs).show();\n }\n\n if (showNoResults) {\n noResults.show();\n } else {\n noResults.hide();\n }\n }\n\n getSchools = (location: google.maps.LatLng, distance: number) => {\n return $.get(`/api/school/nearest?lat=${location.lat()}&lng=${location.lng()}&distance=${distance}`)\n }\n\n createElementFromHTML = (htmlString: string) => {\n var div = document.createElement('div');\n div.innerHTML = htmlString.trim();\n\n // Change this to div.childNodes to support multiple top-level nodes.\n return div.firstChild as Element;\n }\n\n renderSchoolListing = (schools: Array) => {\n let _this = this;\n let sortedSchools = schools.sort((a, b) => {\n return a.distance - b.distance;\n });\n\n sortedSchools.forEach((school, index: number) => {\n \n let html = this.replaceTokens('name', school.name, this.schoolCardHtml);\n html = this.replaceTokens('address', school.address, html);\n html = this.replaceTokens('distance', school.distance.toFixed(2), html);\n\n html = this.replaceTokens('imageUrl', school.image.url, html);\n html = this.replaceTokens('imageDescription', school.image.description, html);\n\n let schoolElement = this.createElementFromHTML(html);\n\n $(schoolElement).click(school, (event) => {\n this.selectSchool(school);\n event.preventDefault();\n });\n\n this.schoolList().append(schoolElement);\n \n\n })\n\n }\n\n renderMap = (schools: Array, location: google.maps.LatLng) => {\n let _this = this;\n let markers: Array = [];\n\n schools.forEach((school, index) => {\n \n let html = this.replaceTokens('name', school.name, this.schoolMapPopupHtml);\n html = this.replaceTokens('address', school.address, html);\n html = this.replaceTokens('contactNumber', school.contactNumber, html);\n\n let content = $.parseHTML(html);\n $(content).find('button').click(school, (event) => {\n this.selectSchool(school);\n event.preventDefault();\n })\n\n let marker: Marker = {\n lat: school.lat,\n lng: school.lng,\n name: school.name,\n content: content[0] as Element\n }\n markers.push(marker);\n \n })\n\n this.map?.renderMap(markers, location.lat(), location.lng());\n\n }\n selectSchool = (school: schoolListing) => {\n this.selectedSchool = school;\n if (this.redirectOnSelect) {\n window.location.href = school.url;\n }\n if (this.selectCallback != null) {\n this.selectCallback(school);\n }\n }\n\n}\n\n","/// \r\n/// \r\nimport {Controller} from \"./helpers/controller\";\r\nimport {shim} from \"./helpers/shim\";\r\nimport InfoWindow = google.maps.InfoWindow;\r\n\r\nexport interface Marker {\r\n content?: Element,\r\n name: string,\r\n lat: number,\r\n lng: number,\r\n}\r\n\r\nexport class GoogleMapControl extends Controller {\r\n \r\n private timer: number | undefined;\r\n private map?: google.maps.Map;\r\n\r\n private hasMapsAttribute:boolean = $(this._element).data('googlemap') != undefined;\r\n\r\n private startlat:number = $(this._element).data('googlemap-startlat');\r\n private startlng:number = $(this._element).data('googlemap-startlng');\r\n private marker:Marker = $(this._element).data('googlemap-marker');\r\n \r\n private currentInfoWindow?:InfoWindow;\r\n\r\n private gMarkersTracker: google.maps.Marker[] = [];\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n \r\n this.loadGoogleMaps();\r\n }\r\n\r\n\r\n public loadGoogleMaps = () => {\r\n\r\n if (this.timer) {\r\n clearTimeout(this.timer);\r\n }\r\n this.timer = setTimeout(() => {\r\n if (typeof (shim('google')) === 'undefined' || typeof (shim('google').maps) === 'undefined') {\r\n if (document.querySelectorAll('#google-maps-api').length <= 0) {\r\n let tag = document.createElement('script');\r\n tag.src = '//maps.googleapis.com/maps/api/js?key=AIzaSyAz54REQBZR3ziqLFLa92AC5L9Zr4Be4oU&libraries=places&callback=Function.prototype';\r\n tag.id = 'google-maps-api';\r\n let firstScriptTag = document.getElementsByTagName('script')[0];\r\n firstScriptTag.parentNode?.insertBefore(tag, firstScriptTag);\r\n }\r\n\r\n this.loadGoogleMaps();\r\n } else {\r\n\r\n this.map = new google.maps.Map($(this._element).get()[0] as HTMLElement, {\r\n zoom: 12,\r\n streetViewControl:false,\r\n fullscreenControl:false,\r\n mapTypeControl: false\r\n });\r\n \r\n if (this.hasMapsAttribute){\r\n this.renderMap([this.marker],this.startlat,this.startlng);\r\n }\r\n }\r\n }, 50);\r\n }\r\n\r\n public renderMap = (markers: Array, lat:number, lng:number) => {\r\n if (this.map == undefined) {\r\n \r\n } else {\r\n this.map.setCenter({ lat, lng });\r\n this.removeAllMarkers();\r\n }\r\n\r\n let gMarkers: Array = []\r\n markers.forEach((marker) => {\r\n this.addMarker(marker);\r\n })\r\n }\r\n \r\n addMarker = (marker: Marker) => {\r\n let gMarker = new google.maps.Marker(\r\n {\r\n map: this.map,\r\n position: new google.maps.LatLng({lat: marker.lat, lng: marker.lng}),\r\n icon: '/resources/images/mapPin.svg'\r\n });\r\n\r\n if (marker.content != null){\r\n const infowindow = new google.maps.InfoWindow({\r\n content: marker.content,\r\n ariaLabel: marker.name,\r\n });\r\n gMarker.addListener(\"click\", () => {\r\n this.currentInfoWindow?.close();\r\n infowindow.open({\r\n anchor: gMarker,\r\n map: this.map,\r\n });\r\n this.currentInfoWindow = infowindow;\r\n });\r\n };\r\n\r\n this.gMarkersTracker.push(gMarker);\r\n }\r\n\r\n removeAllMarkers = () => {\r\n for (let i = 0; i < this.gMarkersTracker.length; i++) {\r\n this.gMarkersTracker[i].setMap(null);\r\n }\r\n this.gMarkersTracker = [];\r\n };\r\n}\r\n\r\n","/// \r\n\r\n/**\r\n * Generic controller class to entcapsulate the parsing\r\n * and other generic stuff\r\n *\r\n * @export\r\n * @class Controller\r\n */\r\nexport class Controller {\r\n\r\n /**\r\n * Selector which will be overwritten from the\r\n * other Controllers so the parse function\r\n * can directly query according to that selector.\r\n *\r\n * @static\r\n * @type {string}\r\n */\r\n static selector: string;\r\n\r\n \r\n\r\n /**\r\n * HTML attribute to mark elements which are already parsed\r\n *\r\n * @static\r\n */\r\n static PARSE_ID_ATTRIBUTE = 'data-parse-id';\r\n\r\n /**\r\n * Element where the instance is applied\r\n *\r\n * @private\r\n * @type {Element}\r\n */\r\n protected _element: HTMLElement;\r\n\r\n /**\r\n * Access element or query by selector\r\n */\r\n get $() {\r\n return (selector?: string): any => {\r\n if (!(this._element instanceof Element)) {\r\n throw new Error('This controller has no element!');\r\n }\r\n return selector ? this._element.querySelectorAll(selector) : $(this._element);\r\n }\r\n }\r\n set $(value) {\r\n throw new Error('Setting $ is not allowed');\r\n }\r\n\r\n\r\n /**\r\n * Creates an instance of a Controller.\r\n *\r\n * @param element root The element where the controller has been applied\r\n */\r\n constructor(element: HTMLElement) {\r\n this._element = element;\r\n\r\n let className: string;\r\n // @ts-ignore\r\n className = this.constructor.name;\r\n className = className.toLocaleLowerCase();\r\n if (element.getAttribute(Controller.PARSE_ID_ATTRIBUTE + '-' + className)) {\r\n return;\r\n }\r\n element.setAttribute(Controller.PARSE_ID_ATTRIBUTE + '-' + className, Math.floor(Math.random() * 10 + 1) * Date.now() + '');\r\n }\r\n}","/// \r\n\r\n/**\r\n * Generic controller class to entcapsulate the parsing\r\n * and other generic stuff\r\n *\r\n * @export\r\n * @class Controller\r\n */\r\nexport class Controller {\r\n\r\n /**\r\n * Selector which will be overwritten from the\r\n * other Controllers so the parse function\r\n * can directly query according to that selector.\r\n *\r\n * @static\r\n * @type {string}\r\n */\r\n static selector: string;\r\n\r\n \r\n\r\n /**\r\n * HTML attribute to mark elements which are already parsed\r\n *\r\n * @static\r\n */\r\n static PARSE_ID_ATTRIBUTE = 'data-parse-id';\r\n\r\n /**\r\n * Element where the instance is applied\r\n *\r\n * @private\r\n * @type {Element}\r\n */\r\n protected _element: HTMLElement;\r\n\r\n /**\r\n * Access element or query by selector\r\n */\r\n get $() {\r\n return (selector?: string): any => {\r\n if (!(this._element instanceof Element)) {\r\n throw new Error('This controller has no element!');\r\n }\r\n return selector ? this._element.querySelectorAll(selector) : $(this._element);\r\n }\r\n }\r\n set $(value) {\r\n throw new Error('Setting $ is not allowed');\r\n }\r\n\r\n\r\n /**\r\n * Creates an instance of a Controller.\r\n *\r\n * @param element root The element where the controller has been applied\r\n */\r\n constructor(element: HTMLElement) {\r\n this._element = element;\r\n\r\n let className: string;\r\n // @ts-ignore\r\n className = this.constructor.name;\r\n className = className.toLocaleLowerCase();\r\n if (element.getAttribute(Controller.PARSE_ID_ATTRIBUTE + '-' + className)) {\r\n return;\r\n }\r\n element.setAttribute(Controller.PARSE_ID_ATTRIBUTE + '-' + className, Math.floor(Math.random() * 10 + 1) * Date.now() + '');\r\n }\r\n}","\r\nfunction debounce(func: () => void, time: number = 100):any {\r\n let timer: number | undefined;\r\n return function (event: any) {\r\n if (timer) clearTimeout(timer);\r\n timer = setTimeout(func, time, event);\r\n };\r\n}\r\n\r\n\r\nexport function onResize(func: () => void, time: number = 100): any {\r\n window.addEventListener(\"resize\", debounce(func, time));\r\n}\r\n\r\n\r\n\r\n","/**\r\n * Loads variable from window according to\r\n * the name parameter.\r\n *\r\n * @export\r\n * @param {string} name\r\n * @returns {*} window[name]\r\n */\r\nexport function shim(name: string): any {\r\n let global: any = window;\r\n return global[name];\r\n}","/// \r\n\r\nimport {VideoBoxControl as videoBoxControl} from \"./videoBoxControl\";\r\nimport {ReadingTimeControl as readingTime} from \"./readingTime\";\r\nimport {SharePageControl as sharePageControl} from \"./sharePage\";\r\nimport {SiteNavControl as siteNavControl} from './siteNavControl'\r\nimport {ResourcesControl as resourcesControl} from './resourcesControl'\r\nimport {LinkListControl as linkListControl} from './linkListControl'\r\nimport {AccordionControl as accordionControl} from './accordionControl';\r\nimport {FilterControl as filterControl} from './filterControl';\r\nimport {PopupControl as popupControl} from './popupControl';\r\nimport {TabControl as tabControl} from './tabControl'\r\nimport {GoogleMapControl as googleMapControl} from \"./googleMapControl\";\r\nimport {MembershipCenterPopupControl as membershipControl} from \"./MembershipCenterPopupControl\";\r\nimport {ProductPricingFindACentreControl as productPricingFindACentreControl} from \"./ProductPricingFindACentreControl\";\r\nimport {SpinnerControl as spinnerControl} from './spinnerControl';\r\nimport {CmsContentControl as cmsContentControl} from './cmsContentControl'\r\n\r\nimport {TrialSignupSession as trialSignupSession} from \"./trialSignupSession\";\r\nimport {TrialSlotSelection as trialSlotSelection } from \"./trialSlotSelection\";\r\nimport {TrialReturningCustomer as trialReturningCustomer } from \"./trialReturningCustomer\";\r\nimport {MemberSignupSession as memberSignupSession } from \"./memberSignupSession\";\r\nimport {MemberSignupReturningCustomer as memberSignupReturningCustomer } from \"./memberSignupReturningCustomer\";\r\nimport {MemberSignupSlotSelection as memberSignupSlotSelection } from \"./memberSignupSlotSelection\";\r\n\r\nimport {shim} from './helpers/shim';\r\nimport {findCenterControl} from \"./findCenterControl\";\r\nimport {findSchoolControl} from \"./findSchoolControl\";\r\nimport {lottieAnimationControl} from \"./lottieAnimation\";\r\nimport {CarouselControl} from \"./carouselControl\";\r\nimport {MarqueeControl} from \"./marqueeControl\";\r\nimport {PasswordDisplayControl} from \"./passwordDisplayControl\";\r\nimport {ReadMoreControl} from \"./readMoreControl\";\r\n\r\n\r\nclass InitSiteJs {\r\n private body: HTMLElement = document.body;\r\n\r\n public videoControls: Array = [];\r\n public readingTimeControls: Array = [];\r\n public sharePageControls: Array = [];\r\n public filterControls: Array = [];\r\n public accordionControls: Array = [];\r\n public popupControls: Array = [];\r\n public spinnerControls: Array = [];\r\n public findCenterControls: Array = [];\r\n public findSchoolControls: Array = [];\r\n public tabControls: Array = [];\r\n public googleMapControls: Array = [];\r\n public membershipControls: Array = [];\r\n public productPricingFindACentreControls: Array = [];\r\n public lottieAnimationControls: Array = [];\r\n public carouselControls: Array = [];\r\n public marqueeControls: Array = [];\r\n public passwordDisplayControl: Array = [];\r\n public readMoreControl: Array = [];\r\n\r\n public trialSignupSession: Array = []\r\n public trialSlotSelection: Array = []\r\n public trialReturningCustomer: Array = []\r\n public memberSignupSession: Array = []\r\n public memberSignupReturningCustomer: Array = []\r\n public memberSignupSlotSelection: Array = []\r\n\r\n\r\n constructor() {\r\n\r\n $('[data-animation]').each((index: number, element: Element) => {\r\n this.lottieAnimationControls.push(new lottieAnimationControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-carousel]').each((index: number, element: Element) => {\r\n this.carouselControls.push(new CarouselControl(element as HTMLElement));\r\n })\r\n \r\n $('[data-youtubeId]').each((index: number, element: Element) => {\r\n this.videoControls.push(new videoBoxControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-accordionToggle]').each((index: number, element: Element) => {\r\n this.accordionControls.push(new accordionControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-marquee]').each((index: number, element: Element) => {\r\n this.marqueeControls.push(new MarqueeControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-password-display]').each((index: number, element: Element) => {\r\n this.passwordDisplayControl.push(new PasswordDisplayControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-read-more]').each((index: number, element: Element) => {\r\n this.readMoreControl.push(new ReadMoreControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-readingTime]').each((index: number, element: Element) => {\r\n this.readingTimeControls.push(new readingTime(element as HTMLElement));\r\n })\r\n\r\n $('[data-sharepage]').each((index: number, element: Element) => {\r\n this.sharePageControls.push(new sharePageControl(element as HTMLElement));\r\n })\r\n $('[data-filtercontrol]').each((index: number, element: Element) => {\r\n this.filterControls.push(new filterControl(element as HTMLElement));\r\n })\r\n \r\n $('[data-popup]').each((index: number, element: Element) => {\r\n this.popupControls.push(new popupControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-use-spinner]').each((index: number, element: Element) => {\r\n this.spinnerControls.push(new spinnerControl(element as HTMLFormElement));\r\n })\r\n\r\n $('[data-tabs]').each((index: number, element: Element) => {\r\n this.tabControls.push(new tabControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-findCenter]').each((index: number, element: Element) => {\r\n this.findCenterControls.push(new findCenterControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-findSchool]').each((index: number, element: Element) => {\r\n this.findSchoolControls.push(new findSchoolControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-googlemap]').each((index: number, element: Element) => {\r\n this.googleMapControls.push(new googleMapControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-membership-center-popup]').each((index: number, element: Element) => {\r\n this.membershipControls.push(new membershipControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-product-pricing-find-a-centre]').each((index: number, element: Element) => {\r\n this.productPricingFindACentreControls.push(new productPricingFindACentreControl(element as HTMLElement));\r\n })\r\n\r\n $('[data-trial-signup-session]').each((index: number, element: Element) => {\r\n this.trialSignupSession.push(new trialSignupSession(element as HTMLElement));\r\n })\r\n\r\n $('[data-trial-session-picker]').each((index: number, element: Element) => {\r\n this.trialSlotSelection.push(new trialSlotSelection(element as HTMLElement));\r\n })\r\n\r\n $('[data-trial-return-customer]').each((index: number, element: Element) => {\r\n this.trialReturningCustomer.push(new trialReturningCustomer(element as HTMLElement));\r\n })\r\n\r\n $('[data-member-signup-session]').each((index: number, element: Element) => {\r\n this.memberSignupSession.push(new memberSignupSession(element as HTMLElement));\r\n })\r\n\r\n $('[data-member-signup-return-customer]').each((index: number, element: Element) => {\r\n this.memberSignupReturningCustomer.push(new memberSignupReturningCustomer(element as HTMLElement));\r\n })\r\n $('[data-member-signup-session-picker]').each((index: number, element: Element) => {\r\n this.memberSignupSlotSelection.push(new memberSignupSlotSelection(element as HTMLElement));\r\n })\r\n\r\n let siteNavControlInstance = new siteNavControl();\r\n let resourcesControlInstance = new resourcesControl();\r\n let linkListControlInstance = new linkListControl();\r\n let cmsContentControlInstance = new cmsContentControl();\r\n }\r\n}\r\n\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\r\n var siteJs = new InitSiteJs();\r\n});","/// \n\n\nexport class LinkListControl {\n\n private listContainerItemsLeft: JQuery = $('.deskTop .resourceBody .column.left p');\n private listContainerItemsRight: JQuery = $('.deskTop .resourceBody .column.right ul');\n private title: JQuery = $('.deskTop .resourceBody .column p');\n private elementForConstruction: JQuery = $('.multiCardHolder');\n private window: JQuery = $(window);\n\n constructor() {\n \n // this.window.resize(() => {\n //\n // if (this.window.width() <= 768) {\n //\n // $('.multiCardHolder').flickity();\n // }\n // else\n // {\n // $('.multiCardHolder').flickity('destroy');\n // }\n // });\n \n this.title.on('click', (e)=>{\n e.preventDefault();\n \n let selectedItem = \".item\" + e.target.className;\n if (!$(e.target).hasClass(\"on\"))\n {\n $(this.listContainerItemsRight).addClass('hide');\n $(selectedItem).removeClass(\"hide\");\n\n $(this.listContainerItemsLeft).removeClass('on');\n $(e.target).addClass(\"on\");\n }\n });\n }\n}","import {Controller} from \"./helpers/controller\";\r\nimport {shim} from \"./helpers/shim\";\r\nimport {onResize} from \"./helpers/resize\";\r\n\r\nexport class lottieAnimationControl extends Controller {\r\n\r\n private timer: number | undefined;\r\n private mobileCutoffQuery: string = '(min-width: 1023px)';\r\n private lottieHtml = `
`;\r\n private animationName: string;\r\n private animationPath: string = '';\r\n private loadCompleted: boolean = false;\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n this.animationName = this.$().data().animation;\r\n\r\n if (this.animationName != undefined) {\r\n this.loadLottie();\r\n\r\n onResize(this.resizeContent, 150);\r\n }\r\n }\r\n\r\n playAnimation = () => {\r\n\r\n if (this.loadCompleted) {\r\n let newAnimationPath: string;\r\n\r\n if (window.matchMedia(this.mobileCutoffQuery).matches) {\r\n newAnimationPath = `/resources/images/animationJSON/${this.animationName}Desktop.json`\r\n } else {\r\n newAnimationPath = `/resources/images/animationJSON/${this.animationName}Mobile.json`\r\n }\r\n\r\n if (newAnimationPath != this.animationPath){\r\n this.animationPath = newAnimationPath;\r\n let animationContainer: HTMLElement = this.$().find('.animatePlay').empty().get()[0];\r\n \r\n let animation = shim('bodymovin').loadAnimation({\r\n container: animationContainer,\r\n renderer: 'svg',\r\n loop: false,\r\n autoplay: true,\r\n path: this.animationPath\r\n })\r\n }\r\n\r\n\r\n }\r\n\r\n }\r\n\r\n public loadLottie = () => {\r\n\r\n if (this.timer) {\r\n clearTimeout(this.timer);\r\n }\r\n this.timer = setTimeout(() => {\r\n if (typeof (shim('bodymovin')) === 'undefined' || typeof (shim('bodymovin').loadAnimation) === 'undefined') {\r\n if (document.querySelectorAll('#lottie-js').length <= 0) {\r\n let tag = document.createElement('script');\r\n tag.src = '/resources/lib/lottie.min.js';\r\n tag.id = 'lottie-js';\r\n let firstScriptTag = document.getElementsByTagName('script')[0];\r\n firstScriptTag.parentNode?.insertBefore(tag, firstScriptTag);\r\n }\r\n\r\n this.loadLottie();\r\n } else {\r\n\r\n this.$().prepend(this.lottieHtml);\r\n this.loadCompleted = true;\r\n\r\n this.playAnimation()\r\n }\r\n }, 50);\r\n }\r\n\r\n\r\n resizeContent = () => {\r\n this.playAnimation();\r\n }\r\n \r\n}","import {Controller} from \"./helpers/controller\";\r\n\r\nexport class MarqueeControl extends Controller {\r\n \r\n\r\n private lerp = {current: 0, target: 0};\r\n private interpolationFactor = 0.4;\r\n private speed = 0.05;\r\n private direction = -1; // -1 (to-left), 1 (to-right) \r\n \r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n for(var i = 0; i < element.children.length; i++)\r\n {\r\n element.append(element.children[i]);\r\n }\r\n // Init\r\n element.style.cssText = `position: relative; display: inline-flex; white-space: nowrap;`;\r\n var lastChild:HTMLElement = element.children[element.children.length-1] as HTMLElement;\r\n lastChild.style.cssText = `position: absolute; left: ${100 * -this.direction}%;`;\r\n \r\n this.render();\r\n }\r\n\r\n calcLerp = (current:number, target:number, factor:number) => {return current * (1 - factor) + target * factor};\r\n\r\n\r\n animate = () => {\r\n this.lerp.target += this.speed;\r\n this.lerp.current = this.calcLerp(this.lerp.current, this.lerp.target, this.interpolationFactor);\r\n\r\n if (this.lerp.target > 100) {\r\n this.lerp.current -= this.lerp.target;\r\n this.lerp.target = 0;\r\n }\r\n\r\n const x = this.lerp.current * this.direction;\r\n this._element.style.transform = `translateX(${x}%)`;\r\n }\r\n\r\n render = () => {\r\n this.animate();\r\n window.requestAnimationFrame(() => this.render());\r\n }\r\n}","import { Controller } from \"./helpers/controller.js\";\nimport {ShowLoader} from \"./utils/showLoader\";\n\n\nexport class MemberSignupReturningCustomer extends Controller {\n\n private btnForwardWelcomeBack: JQuery = $('#btnFowardWelcomeBack');\n \n private welcomeBack: JQuery = $(\"[data-switch-welcome-back]\");\n private navButtonsFull: JQuery = $(\"[data-switch-form-navigation-step-3]\");\n private navButtonsBackOnly: JQuery = $(\"[data-switch-form-navigation-step-3-back]\");\n private smsSelection: JQuery = $(\"[data-switch-sms-selected]\");\n private emailSelection: JQuery = $(\"[data-switch-email-selected]\");\n private btnSendAccessCode: JQuery = $(\"#btnSendAccessCode\");\n private commsChoiceIsEmail: JQuery = $('[name=\"IsEmail\"]');\n private lnkResendAccessCode: JQuery = $(\"#lnkSendAccessCode\");\n private rdoReturningCustomer: JQuery = $('[name = \"IsReturningCustomer\"]');\n private pageWrap: JQuery = $('.pageWrap')\n private loader: JQuery = $('#loading-spinner')\n\n\n constructor(element: HTMLElement) {\n super(element);\n\n // Run this on load as could be a validation failure\n this.handleReturningCustomerSelected();\n this.selectCommsChoice();\n\n // Switch inputs based on Comms Choice\n this.commsChoiceIsEmail.on('click', (e) => {\n this.selectCommsChoice();\n });\n\n this.btnForwardWelcomeBack.on('click', (e) => {\n this.handleWelcomeBackChoice();\n });\n\n\n this.lnkResendAccessCode.on('click', (e) => {\n e.preventDefault();\n this.handleResendAccessCode();\n });\n\n this.rdoReturningCustomer.on('click', (e) => {\n this.handleReturningCustomerSelected();\n });\n\n this.btnSendAccessCode.on('click', (e) => {\n this.handleSendAccessCode();\n })\n\n }\n\n handleWelcomeBackChoice = () => {\n let isReturningCustomer = $(\"input[name='IsReturningCustomer']:checked\");\n\n if (isReturningCustomer.val() !== 'true') {\n this.handleSubmitForm('formMemberSignupMain');\n } else {\n this.handleSubmitForm('formAccessCode');\n }\n }\n\n\n handleReturningCustomerSelected = () => {\n let isReturningCustomer = $(\"input[name='IsReturningCustomer']:checked\");\n\n if (isReturningCustomer.length == 0) return;\n\n if (isReturningCustomer.val() !== 'true') {\n //Clear and Hide\n this.welcomeBack.hide();\n this.navButtonsBackOnly.hide();\n this.navButtonsFull.show();\n let isEmail = $(\"input[name='IsEmail']:checked\");\n isEmail.ch\n this.smsSelection.find('input').val('');\n this.emailSelection.find('input').val('');\n } else {\n //Show\n this.welcomeBack.show();\n this.navButtonsFull.hide();\n this.navButtonsBackOnly.show();\n }\n }\n\n selectCommsChoice = () => {\n let isEmail = $(\"input[name='IsEmail']:checked\");\n\n if (isEmail.length == 0) return;\n\n if (isEmail.val() === 'true') {\n this.smsSelection.find('input').val('');\n this.smsSelection.hide();\n this.emailSelection.show();\n } else {\n this.emailSelection.find('input').val('');\n this.emailSelection.hide();\n this.smsSelection.show();\n }\n\n this.btnSendAccessCode.prop('disabled', false);\n this.btnSendAccessCode.removeClass('disabled');\n }\n\n handleSubmitForm = (formId : string) => {\n let form = document.getElementById(formId);\n this.submitForm(form);\n }\n\n handleSendAccessCode = () => {\n this.btnSendAccessCode.addClass('disabled');\n this.btnSendAccessCode.prop('disabled', true);\n this.handleSubmitForm('formAccessCode');\n }\n\n handleResendAccessCode = () => {\n this.lnkResendAccessCode.addClass('disabled');\n this.lnkResendAccessCode.attr('href', '');\n this.handleSubmitForm(this.lnkResendAccessCode.data('form-id'));\n }\n\n submitForm = (form: HTMLFormElement) => {\n if (form !== null) {\n if (\"useSpinner\" in form.dataset) {\n ShowLoader(this.loader);\n }\n form.submit();\n }\n }\n \n}\n\n\n","import { Controller } from \"./helpers/controller\";\nimport {shim} from \"./helpers/shim\";\nimport {ShowLoader} from \"./utils/showLoader\";\n\nexport class MemberSignupSession extends Controller {\n\n private timer: number | undefined;\n \n private btnForwardStandard: JQuery = $('.btnForward');\n private btnBackStandard: JQuery = $('.btnBack');\n \n private inCentre: JQuery = $('#inCentre');\n private chooseCentre: JQuery = $('[data-switch-choose-centre]');\n private selectedDetailsJson: JQuery = $('#selectedDetails');\n private selectedTypeCost: JQuery = $('#selectedCost');\n private selectedTypeFrequency: JQuery = $('#selectedFrequency');\n private selectedTypeSessionType: JQuery = $('#selectedSessionType');\n private selectedTypeSessionIds: JQuery = $('#selectedSessionIds');\n\n private rdoProductVariant: JQuery = $('.priceRadioOption');\n private btnMembershipCost: JQuery = $('#btnMembershipCost');\n private btnGetStarted: JQuery = $('#btnGetStartedSelection');\n private btnEditCentre: JQuery = $('[data-switch-edit-centre]');\n private btnEditProduct: JQuery = $('[data-switch-edit-tuition]');\n private btnEditMembershipType: JQuery = $('[data-switch-edit-type]');\n private btnEditSlot1: JQuery = $('[data-switch-edit-slot1]');\n private btnEditSlot2: JQuery = $('[data-switch-edit-slot2]');\n private btnEditYourDetails: JQuery = $('[data-switch-edit-your-details]');\n private btnEditChildDetails: JQuery = $('[data-switch-edit-child-details]');\n private btnEditDirectDebitDetails: JQuery = $('[data-switch-edit-ddd]');\n private addressChoiceIsSame: JQuery = $('[name=\"IsSameAddress\"]');\n private addressTypeSelection: JQuery = $(\"[data-switch-child-address]\");\n private txtAddressLine1: JQuery = $('[data-address=\"line1\"]');\n private txtAddressLine2: JQuery = $('[data-address=\"line2\"]');\n private txtAddressLine3: JQuery = $('[data-address=\"line3\"]');\n private txtAddressTownCity: JQuery = $('[data-address=\"townCity\"]');\n private txtAddressPostcode: JQuery = $('[data-address=\"postcode\"]');\n \n private noGetStartedNext: JQuery = $(\"[data-switch-form-navigation-get-started]\");\n private getStartedNext: JQuery = $(\"[data-switch-form-navigation-get-started-complete]\");\n private rdoIsFreeTrial: JQuery = $(\"input[type=radio][name=IsFreeTrial]\");\n\n private inpNumericInputs: JQuery = $('input[type=number]');\n\n private pageWrap: JQuery = $('.pageWrap')\n private loader: JQuery = $('#loading-spinner')\n\n private autocomplete: google.maps.places.Autocomplete | undefined;\n \n constructor(element: HTMLElement) {\n super(element);\n\n this.handleProductVariantSelected();\n this.handleAddressTypeSelected();\n\n this.btnForwardStandard.on('click', (e) => {\n e.preventDefault();\n this.submitMainForm();\n });\n this.btnBackStandard.on('click', (e) => {\n e.preventDefault();\n this.handleEditSelected('formBack');\n })\n this.inCentre.on('click', (e) => {\n this.chooseCentre.show();\n });\n this.btnEditCentre.on('click', (e) => {\n this.handleEditSelected('formEditLocation');\n })\n this.btnEditProduct.on('click', (e) => {\n this.handleEditSelected('formEditProduct');\n });\n this.btnEditMembershipType.on('click', (e) => {\n this.handleEditSelected('formEditMembershipType');\n });\n this.btnEditSlot1.on('click', (e) => {\n this.handleEditSelected('formEditSlot1');\n });\n this.btnEditSlot2.on('click', (e) => {\n this.handleEditSelected('formEditSlot2');\n });\n this.btnEditYourDetails.on('click', (e) => {\n this.handleEditSelected('formEditYourDetails');\n });\n this.btnEditChildDetails.on('click', (e) => {\n this.handleEditSelected('formEditChild');\n });\n this.btnEditDirectDebitDetails.on('click', (e) => {\n this.handleEditSelected('formEditDirectDebitDetails');\n });\n this.rdoIsFreeTrial.on('click', (e) => {\n this.handleGetStartedComplete();\n });\n this.btnGetStarted.on('click', (e) => {\n this.handleGetStarted();\n })\n this.rdoProductVariant.on('click', (e) => {\n this.handleProductVariantSelected();\n });\n this.addressChoiceIsSame.on('click', (e) => {\n this.handleAddressTypeSelected();\n })\n\n this.inpNumericInputs.on('wheel', (e) => {\n let me = $(e.currentTarget);\n me.blur()\n })\n\n this.loadAddressAutocomplete()\n }\n\n public loadAddressAutocomplete = () => {\n\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(() => {\n if (typeof (shim('google')) === 'undefined' || typeof (shim('google').maps) === 'undefined') {\n if (document.querySelectorAll('#google-maps-api').length <= 0) {\n let tag = document.createElement('script');\n tag.src = '//maps.googleapis.com/maps/api/js?key=AIzaSyAz54REQBZR3ziqLFLa92AC5L9Zr4Be4oU&libraries=places&callback=Function.prototype';\n tag.id = 'google-maps-api';\n let firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode?.insertBefore(tag, firstScriptTag);\n }\n\n this.loadAddressAutocomplete();\n } else {\n\n if (this.txtAddressLine1.length > 0){\n this.autocomplete = new google.maps.places.Autocomplete(this.txtAddressLine1.get()[0] as HTMLInputElement, {\n componentRestrictions: { country: [\"uk\"] },\n fields: [\"address_components\", \"geometry\"],\n types: [\"address\"],\n });\n\n this.autocomplete.addListener(\"place_changed\", this.fillInAddress);\n }\n \n }\n }, 50);\n }\n \n fillInAddress = () => {\n if (this.autocomplete !== undefined) {\n const place = this.autocomplete.getPlace();\n let address1 = \"\";\n let address2 = \"\";\n let address3 = \"\";\n let townCity = \"\";\n\n let postcode = \"\";\n\n if (place.address_components !== undefined) {\n // Get each component of the address from the place details,\n // and then fill-in the corresponding field on the form.\n // place.address_components are google.maps.GeocoderAddressComponent objects\n // which are documented at http://goo.gle/3l5i5Mr\n for (const component of place.address_components) {\n // @ts-ignore remove once typings fixed\n const componentType = component.types[0];\n\n switch (componentType) {\n case \"street_number\": {\n address1 = `${component.long_name} ${address1}`;\n break;\n }\n case \"route\": {\n address1 += component.long_name;\n break;\n }\n case \"postal_code\": {\n postcode = `${component.long_name}${postcode}`;\n break;\n }\n case \"postal_code_suffix\": {\n postcode = `${postcode}-${component.long_name}`;\n break;\n }\n case \"locality\":\n address2 = component.long_name;\n break;\n case \"postal_town\":\n townCity = component.long_name;\n break;\n case \"administrative_area_level_1\": {\n // townCity = component.short_name;\n break;\n }\n }\n }\n\n this.txtAddressLine1.val(address1);\n this.txtAddressLine2.val(address2);\n this.txtAddressLine3.val(address3);\n this.txtAddressTownCity.val(townCity);\n this.txtAddressPostcode.val(postcode);\n }\n }\n }\n\n submitMainForm = () => {\n let form = document.getElementById('formMemberSignupMain');\n let dob = $('#DateOfBirth');\n if (dob.length == 1){\n dob.val($(\".DayOfBirth\").val() + \"/\" + $(\".MonthOfBirth\").val() + \"/\" + $(\".YearOfBirth\").val());\n\n }\n \n this.submitForm(form);\n }\n\n handleProductVariantSelected = () => {\n if (this.btnMembershipCost.length > 0) {\n let selectedVariantCost = $('.priceRadioOption:checked').data('cost');\n let selectedVariantFrequency = $('.priceRadioOption:checked').data('frequency');\n let selectedVariantSessionType = $('.priceRadioOption:checked').data('sessiontype');\n let selectedVariantSessionIds = $('.priceRadioOption:checked').data('sessionids');\n this.selectedTypeCost.val(selectedVariantCost)\n this.selectedTypeFrequency.val(selectedVariantFrequency)\n this.selectedTypeSessionType.val(selectedVariantSessionType)\n this.selectedTypeSessionIds.val(selectedVariantSessionIds)\n this.btnMembershipCost[0].innerHTML = 'Select £' + selectedVariantCost + ' / month';\n }\n }\n\n handleEditSelected = (formId: string) => {\n let form = document.getElementById(formId);\n let payload = this.selectedDetailsJson.val();\n var input = $('')\n .attr('type', 'hidden')\n .attr('name', 'selectedDetailsJson')\n .val(payload);\n form.append(input.get(0));\n this.submitForm(form);\n }\n\n handleGetStarted = () => {\n let form = document.getElementById('formMemberSignupGetStarted');\n if ($('input[name=\"IsFreeTrial\"]:checked').val() === 'true') {\n form.action = form.action.replace('signup', 'trial');\n }\n this.submitForm(form);\n }\n\n handleAddressTypeSelected = () => {\n let selected = $(\"input[name='IsSameAddress']:checked\");\n\n if (selected.length == 0) return;\n\n if (selected.val() === 'true') {\n this.addressTypeSelection.hide();\n } else {\n this.addressTypeSelection.show();\n }\n }\n\n\n handleGetStartedComplete = () => {\n this.noGetStartedNext.hide();\n this.getStartedNext.show();\n }\n\n submitForm = (form: HTMLFormElement) => {\n if (form !== null) {\n if (\"useSpinner\" in form.dataset) {\n ShowLoader(this.loader);\n }\n form.submit();\n }\n }\n}\n\n\n","import { Controller } from \"./helpers/controller.js\";\r\nimport {Flickity} from \"./utils/loadFlickity\";\r\n\r\nclass BookingSlot {\r\n public startTime: Date = new Date();\r\n public endTime: Date = new Date();\r\n}\r\n\r\nclass BookingSlotDay {\r\n public availableDate: Date = new Date();\r\n public slotCount: number = 0;\r\n}\r\n\r\nclass BookingSlotsData {\r\n public bookingSlotDays: BookingSlotDay[] = [];\r\n public bookingSlots: BookingSlot[] = [];\r\n}\r\n\r\nexport class MemberSignupSlotSelection extends Controller {\r\n\r\n private bookingSlots: BookingSlot[] = [];\r\n private bookingSlotDays: BookingSlotDay[] = [];\r\n private bookingSlotsCurrentData: BookingSlotsData = new BookingSlotsData;\r\n private daySlot: JQuery = $('[name=\"dateChoice\"]');\r\n private timeSelection: JQuery = $(\"[data-switch-slot-time]\");\r\n private slotSelectedMessage: JQuery = $(\"[data-switch-selected-slot]\");\r\n private noSlotMessage: JQuery = $(\"[data-switch-no-slot]\");\r\n private noGoNext: JQuery = $(\"[data-switch-form-navigation-step-2]\");\r\n private goNext: JQuery = $(\"[data-switch-form-navigation-step-2-complete]\");\r\n private noSlotsAvailableMessageAM = \"

No slots available at this time, please check PM

\";\r\n private noSlotsAvailableMessagePM = \"

No slots available please check AM or another date

\";\r\n private formChooseSlot = $(\"[data-switch-slot-pick-form]\");\r\n\r\n\r\n private dateCarousel: any;\r\n\r\n private correlationId: JQuery = $('#CorrelationId');\r\n private centreId: JQuery = $('#CentreId');\r\n private variantSku: JQuery = $('#VariantSku');\r\n private tuitionYear: JQuery = $('#TuitionYear');\r\n private desiredSchools: JQuery = $('#DesiredSchools');\r\n private sessionId: JQuery = $('#SelectedSessionId');\r\n private productName: JQuery = $('#ProductDisplayName');\r\n private flickity: Flickity = new Flickity();\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n this.flickity.loadScript(() => 0);\r\n \r\n this.GetAvailableSlotsData(0);\r\n\r\n this.daySlot.on('click', (e) => {\r\n this.SelectDay();\r\n });\r\n }\r\n\r\n SlideChangedListener = (event: any, index: number) => {\r\n this.HandleSlideChanged();\r\n }\r\n\r\n HandleSlideChanged = () => {\r\n\r\n var flkty = this.dateCarousel.data('flickity');\r\n\r\n // If we are now on the loader (i.e. last slide) then we need more data\r\n if (flkty.selectedIndex === flkty.slides.length - 1) {\r\n // Get the latest data\r\n this.GetAvailableSlotsData(flkty.selectedIndex * 6);\r\n }\r\n }\r\n\r\n RepaintAvailableDays = () => {\r\n \r\n // Create the new 'Slide' for latest data\r\n var additionalCell = `
`;\r\n this.bookingSlotDays.forEach(function (value: BookingSlotDay) {\r\n let thisDate = new Date(value.availableDate);\r\n let stringDate = `${thisDate.getFullYear()}-${('0' + (thisDate.getMonth() + 1)).slice(-2) }-${('0' + thisDate.getDate()).slice(-2)}`;\r\n additionalCell +=\r\n `\r\n \r\n `\r\n });\r\n additionalCell += `
`;\r\n\r\n this.CreateNewSlide(additionalCell);\r\n }\r\n\r\n CreateNewSlide = (content: string) => {\r\n // Get the flickity carousel if we dont already have it\r\n if (this.dateCarousel == undefined) {\r\n this.dateCarousel = $('.dateCarousel').flickity({\r\n pageDots: false\r\n });\r\n }\r\n\r\n // Turn off the listener while we push this in\r\n this.dateCarousel.off('change.flickity', this.SlideChangedListener);\r\n\r\n // Place the slide before the final slide (loader)\r\n var flkty = this.dateCarousel.data('flickity');\r\n var newIndex = Math.max(flkty.slides.length - 1, 0);\r\n this.dateCarousel.flickity('insert', $(content), newIndex);\r\n\r\n // Make the new slide the viewing slide\r\n this.dateCarousel.flickity('selectCell', newIndex, false, true);\r\n\r\n // Turn back on the listener \r\n this.dateCarousel.on('change.flickity', this.SlideChangedListener);\r\n\r\n // Add the onclicks for day selection\r\n $('[name=\"dateChoice\"]').on('click', (e) => {\r\n this.SelectDay();\r\n });\r\n }\r\n\r\n GetAvailableSlotsData = (skipDays: number) => {\r\n if (this.centreId.val() == \"0\") {\r\n // Due to online not having any availability for the 1st six days\r\n // we are now shifting all its requests on by 6 days, so in effect it just\r\n // skips the first card.\r\n skipDays = skipDays + 6;\r\n }\r\n\r\n let dataUrl = `/api/membership/member-slots?correlationId=${this.correlationId.val()}¢reId=${this.centreId.val()}&sku=${this.variantSku.val()}&productSlotSessionId=${this.sessionId.val()}&productName=${this.productName.val()}&skipDays=${skipDays}&tuitionYear=${this.tuitionYear.val()}&desiredSchools=${this.desiredSchools.val()}`;\r\n $.getJSON(dataUrl, (data) => {\r\n this.bookingSlotsCurrentData = data;\r\n this.bookingSlots = this.bookingSlots.concat(this.bookingSlotsCurrentData.bookingSlots);\r\n this.bookingSlotDays = this.bookingSlotsCurrentData.bookingSlotDays;\r\n this.flickity.loadScript(() => {\r\n this.RepaintAvailableDays();\r\n this.SelectFirstDayAndMeridiem();\r\n });\r\n }).fail( (jqXHR) => {\r\n console.log(jqXHR.responseText);\r\n this.HandleGetSlotDataIssue();\r\n });\r\n }\r\n\r\n HandleGetSlotDataIssue = () => {\r\n $('#sessionPicker').hide();\r\n $('#noSessionData').show();\r\n this.ResetDay();\r\n this.timeSelection.hide();\r\n\r\n }\r\n\r\n SelectFirstDayAndMeridiem = () => {\r\n // pre-select the first day and am/pm with the first slot\r\n if (this.bookingSlots.length < 1) {\r\n return;\r\n }\r\n\r\n // only if a day isn't already selected\r\n if ($(\"input[name='dateChoice']:checked\").length > 0) {\r\n return;\r\n }\r\n\r\n let firstDay = this.bookingSlots[0].startTime.toString().split('T')[0];\r\n ($(\"input[name='dateChoice'][value='\" + firstDay + \"']\")[0] as HTMLInputElement).checked = true;\r\n this.SelectDay();\r\n\r\n if (parseInt(this.bookingSlots[0].startTime.toString().split('T')[1].substring(0, 2)) >= 12) {\r\n $(\"a[href='#pm']\")[0].click();\r\n }\r\n }\r\n\r\n SelectDay = () => {\r\n let selectedDay = $(\"input[name='dateChoice']:checked\").val();\r\n var selectedDayParts = selectedDay.split('-');\r\n var selectedDate = new Date(selectedDayParts[0], selectedDayParts[1] - 1, selectedDayParts[2]);\r\n let selectedDateStartTime = new Date(selectedDate).getTime();\r\n let selectedDateEndTime = selectedDateStartTime + (60 * 60 * 24 * 1000) - 1;\r\n let results = this.bookingSlots.filter(d => {\r\n var bookingSlotTime = new Date(d.startTime).getTime();\r\n return (selectedDateStartTime < bookingSlotTime && bookingSlotTime < selectedDateEndTime);\r\n });\r\n this.RepaintAvailableTimeSlots(results);\r\n }\r\n\r\n RepaintAvailableTimeSlots = (slots: BookingSlot[]) => {\r\n let pmSlotsHtml = \"\";\r\n let amSlotsHtml = \"\";\r\n for (let index = 0; index < slots.length; index++) {\r\n let slot = slots[index];\r\n let slotTime = new Date(slot.startTime).toLocaleTimeString(\"en-GB\", { timeZone: \"Europe/London\", hour: \"2-digit\", minute: \"2-digit\" })\r\n let slotTimeEnd = new Date(slot.endTime).toLocaleTimeString(\"en-GB\", { timeZone: \"Europe/London\", hour: \"2-digit\", minute: \"2-digit\" })\r\n let slotTimeString = slotTime.replace(':', '-');\r\n let slotHtml = `\r\n \r\n `;\r\n\r\n if (new Date(slot.startTime).getHours() > 11) {\r\n pmSlotsHtml += slotHtml;\r\n } else {\r\n amSlotsHtml += slotHtml;\r\n }\r\n }\r\n\r\n $('#am').html(amSlotsHtml !== \"\" ? amSlotsHtml : this.noSlotsAvailableMessageAM);\r\n $('#pm').html(pmSlotsHtml !== \"\" ? pmSlotsHtml : this.noSlotsAvailableMessagePM);\r\n\r\n $('[name=\"timeChoice\"]').on('click', (e) => {\r\n this.SelectTimeSlot();\r\n });\r\n\r\n this.ResetDay();\r\n\r\n this.timeSelection.show();\r\n }\r\n\r\n SelectTimeSlot = () => {\r\n let temp = $(\"input[name='timeChoice']:checked\")\r\n this.formChooseSlot.find('#selectedSlotStartTime').val($(\"input[name='timeChoice']:checked\").data(\"slot-start\"));\r\n this.formChooseSlot.find('#selectedSlotEndTime').val($(\"input[name='timeChoice']:checked\").data(\"slot-end\"));\r\n\r\n this.noSlotMessage.hide();\r\n this.RepaintSelectedMessage();\r\n this.slotSelectedMessage.show();\r\n this.noGoNext.hide();\r\n this.goNext.show();\r\n\r\n }\r\n\r\n RepaintSelectedMessage = () => {\r\n let selectedDay = $(\"input[name='dateChoice']:checked\").val();\r\n\r\n var selectedDayParts = selectedDay.split('-');\r\n var selectedDate = new Date(selectedDayParts[0], selectedDayParts[1] - 1, selectedDayParts[2]);\r\n\r\n let selectedTime = $(\"input[name='timeChoice']:checked\").val();\r\n let selectedTimeEnd = $(\"input[name='timeChoice']:checked\").data(\"end-time\");\r\n let message = `${selectedDate.toLocaleDateString(\"en-GB\", { timeZone: \"Europe/London\", weekday: 'long' })}, ${selectedDate.toLocaleDateString(\"en-GB\", { timeZone: \"Europe/London\", day: 'numeric' })} ${selectedDate.toLocaleDateString(\"en-GB\", { timeZone: \"Europe/London\", month: 'short' })}${selectedTime} - ${selectedTimeEnd}`;\r\n let messageBox = $(\".completedItemLarge\");\r\n messageBox.html(message);\r\n }\r\n\r\n ResetDay = () => {\r\n this.noSlotMessage.show();\r\n this.slotSelectedMessage.hide();\r\n this.noGoNext.show();\r\n this.goNext.hide();\r\n }\r\n}\r\n\r\n\r\n","import {Controller} from \"./helpers/controller\";\n\nexport class PasswordDisplayControl extends Controller {\n\n constructor(element: HTMLElement) {\n super(element);\n\n $(element).on('click', (e)=>{\n let newTarget = $(e.currentTarget).prev();\n if (newTarget.attr('type') == \"password\") {\n newTarget.attr( \"type\", \"text\" );\n } else {\n newTarget.attr( \"type\", \"password\" );\n }\n });\n }\n \n}","/// \n\nimport {Controller} from \"./helpers/controller\";\n\nexport class PopupControlConfig {\n popupElement?: HTMLElement | undefined;\n defaultEvents?: boolean = true;\n openCallback?: () => void;\n closeCallback?: () => void;\n scrollTo?: number = 0\n}\n\nexport class PopupControl extends Controller {\n\n private popupSelector: string = ``;\n private popupModule = () => $('');\n private popupCloseButton = () => this.popupModule().find('[data-close]');\n private pageWrap: JQuery = $('.pageWrap');\n private scrollBackTo: number;\n private config?: PopupControlConfig;\n private html: JQuery = $('html');\n\n constructor(element: HTMLElement, config: PopupControlConfig = new PopupControlConfig()) {\n super(element);\n\n this.scrollBackTo = config.scrollTo ?? 0;\n this.config = config;\n\n if (config.popupElement !== undefined) {\n // @ts-ignore\n this.popupModule = () => $(config.popupElement);\n } else {\n this.popupSelector = `#${$(element).data().popup}`;\n this.popupModule = () => $(this.popupSelector);\n }\n\n this.popupModule().hide();\n\n if (this.config?.defaultEvents){\n $(element).on('click', (e) => {\n e.preventDefault();\n let _this = this;\n\n this.open();\n\n if (config.openCallback != undefined) {\n config.openCallback();\n }\n }); \n }\n \n }\n open = () =>{\n let _this = this;\n this.scrollBackTo = $(document).scrollTop()\n this.pageWrap.addClass(\"overlayCover\");\n window.scrollTo(0, 0);\n this.popupModule().show();\n\n var checkPopupCloseExist = setInterval(function () {\n let popupClose = _this.popupCloseButton();\n if (popupClose.length) {\n popupClose.on('click', (e) => {\n _this.close();\n });\n clearInterval(checkPopupCloseExist);\n }\n }, 500);\n }\n close = () => {\n this.popupModule().hide();\n this.pageWrap.removeClass(\"overlayCover\");\n window.scrollTo(0, this.scrollBackTo);\n\n if (this.config?.closeCallback != undefined) {\n this.config.closeCallback();\n }\n }\n}\n\n","import {Controller} from \"./helpers/controller\";\n\nexport class ReadMoreControl extends Controller {\n\n constructor(element: HTMLElement) {\n super(element);\n\n $(element).on('click', (e)=>{\n const readMoreText = 'Read more';\n const readLessText = 'Read less';\n\n let switchElement = $(e.currentTarget);\n let targetCover = switchElement.prev();\n\n if (switchElement.text().trim() == readMoreText) {\n switchElement.text(readLessText);\n } else {\n switchElement.text(readMoreText);\n }\n\n targetCover.toggleClass(\"readCover\");\n });\n }\n\n}","import {Controller} from \"./helpers/controller\";\r\n\r\nexport class ReadingTimeControl extends Controller {\r\n \r\n private articleSelector: string = '';\r\n \r\n constructor(element: HTMLElement) {\r\n super(element);\r\n this.articleSelector = $(element).data().readingtime;\r\n \r\n const text = $(this.articleSelector).get()[0].innerText;\r\n const wpm = 225;\r\n const words = text.trim().split(/\\s+/).length;\r\n const time = Math.ceil(words / wpm);\r\n \r\n $(element).html(`${time} mins read`);\r\n }\r\n}","/// \n\nexport class ResourcesControl {\n\n private linkCards: JQuery = $('.linkCardHolder .linkCard');\n private loadMore: JQuery = $('#loadMore');\n private showLess: JQuery = $('#showLess');\n private listSize: number;\n private cardChunk: number;\n private noToShow: number;\n \n constructor() {\n\n this.listSize = $(this.linkCards).length;\n this.noToShow = 6\n this.cardChunk = this.noToShow;\n \n \n $('.linkCardHolder .linkCard:lt('+this.cardChunk+')').show();\n\n if (this.listSize < this.noToShow)\n {\n $(this.loadMore).parent().hide();\n }\n\n this.loadMore.parent().on('click', (e)=>{\n this.cardChunk = (this.cardChunk+this.noToShow <= this.listSize) ? this.cardChunk+this.noToShow : this.listSize;\n\n // console.debug(\"show\" + this.cardChunk)\n\n $('.linkCardHolder .linkCard:lt('+this.cardChunk+')').show();\n\n if (this.cardChunk >= this.listSize)\n {\n $(this.loadMore).parent().hide();\n }\n });\n \n \n }\n \n\n}","import {Controller} from \"./helpers/controller\";\r\n\r\nexport class SharePageControl extends Controller {\r\n \r\n private title: string = '';\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n \r\n $(element).on('click', async () => {\r\n \r\n this.title = $(element).data().sharepage;\r\n\r\n await navigator.share({\r\n title: this.title,\r\n url: window.location.href\r\n });\r\n \r\n \r\n })\r\n }\r\n}","/// \n\nexport class SiteNavControl {\n\n private openNavButton: JQuery = $('.navOpenButton');\n private closeNavButton: JQuery = $('.navCloseButton');\n private openSearchButton: JQuery = $('.openSearchButton');\n private initialMenuContent: JQuery = $('[data-initial-menu]');\n private searchContent: JQuery = $('[data-search-menu]');\n private pageWrap: JQuery = $('.pageWrap');\n private siteNav: JQuery = $('.siteNav');\n private overlayCover: JQuery = $('.pageWrap.overlayCover');\n private mainBody: JQuery = $('body');\n private html: JQuery = $('html');\n private videoHolder: JQuery = $('.videoBox');\n \n\n constructor() {\n \n document.addEventListener('click', (event)=>{\n const target = event.target as HTMLTextAreaElement\n\n let video = this.mainBody.find('.videoBox')\n let school = this.mainBody.find('#schoolPopup') \n let centre = this.mainBody.find('#centrePopup')\n let filters = this.mainBody.find('#filterModule')\n let tempScrollTop = $(window).scrollTop();\n\n if (target.matches(\".pageWrap.overlayCover.fullNav\") ||\n target.className == video.attr(\"class\"))\n {\n video?.remove();\n this.pageWrap.removeClass(\"overlayCover\");\n this.html.css('overflow', \"auto\");\n $(window).scrollTop(tempScrollTop);\n this.videoHolder?.remove();\n \n school.hide();\n \n centre.hide();\n \n filters.hide();\n \n this.pageWrap.removeClass(\"overlayCover\");\n \n this.searchContent.hide();\n \n this.siteNav.hide();\n }\n });\n\n this.openNavButton.on('click', (e)=>{\n let navMinHeightAttribute = this.pageWrap.outerHeight() + \"px\";\n this.pageWrap.addClass(\"overlayCover\").addClass(\"fullNav\");\n this.siteNav.show();\n this.initialMenuContent.show();\n this.searchContent.hide();\n this.openSearchButton.show();\n this.mainBody.css('overflow-y', 'hidden');\n });\n\n this.closeNavButton.on('click', (e) => {\n this.pageWrap.removeClass(\"overlayCover\").removeClass(\" fullNav\");\n this.searchContent.hide();\n this.siteNav.hide();\n this.mainBody.css('overflow-y', 'auto');\n });\n\n this.openSearchButton.on('click', (e)=>{\n let navMinHeightAttribute = this.pageWrap.outerHeight() + \"px\";\n this.initialMenuContent.hide();\n this.openSearchButton.hide();\n this.searchContent.css('min-height', navMinHeightAttribute).show();\n });\n\n }\n}","import { Controller } from \"./helpers/controller\";\nimport {ShowLoader} from \"./utils/showLoader\";\n\nexport class SpinnerControl extends Controller {\n\n private formModule = () => $('');\n\n private loader: JQuery = $('#loading-spinner')\n\n constructor(element: HTMLFormElement) {\n super(element);\n\n $(element).on('submit', (e) => {\n ShowLoader(this.loader);\n });\n }\n \n\n}\n\n\n","import {Controller} from \"./helpers/controller\";\r\n\r\n/**\r\n * @description Create tabbed navigation in an accessible way.\r\n * @constructor new Splendid.TabbedContent(); and pass through the object literal with options\r\n * @requires jQuery\r\n *\r\n * @namespace\r\n * @property {string} targetDiv - ID of element that holds the tabs and/or tabbed content\r\n * @property {string} tabSelectedClass - The class for the selected state of the tab\r\n * @property {object} content - Array of IDs of the divs you wish to hide, first item is given the selected state (so is visible)\r\n * @property {string} targetTab - The tab you would like as the start tab - selected class is added to this tab\r\n * @property {string} selectedDiv - ID of the content to show on load, overrides the default first item in the content array\r\n *\r\n * Usage:\r\n * HTML The ID in the HREF Must match the id of the content div's to work\r\n * \r\n *
\r\n * \tTab 1 content\r\n *
\r\n */\r\n/// \r\n\r\ninterface ITabbedContent {\r\n tabSelectedClass: string;\r\n selectedDiv: string;\r\n callback: Function\r\n}\r\n\r\nexport class TabControl extends Controller {\r\n private readonly content: Array = [];\r\n private targetTab: HTMLElement = $(this._element).children()[0];\r\n private selectedDiv: HTMLElement = this.targetTab;\r\n private settings: ITabbedContent = {\r\n tabSelectedClass: 'selected', // default class name for the selected tab\r\n selectedDiv: '',\r\n callback: () => { }\r\n };\r\n\r\n constructor(element:HTMLElement, options?: ITabbedContent) {\r\n super(element);\r\n let _this = this;\r\n if (options) {\r\n $.extend(this.settings, options); // Overwrites the default settings with those defined in the function call (options object)\r\n }\r\n\r\n this.content = $.map($(element).find(\"[role=tab] a\"), function(n, i){\r\n return _this.getTheElementToShow(n.href);\r\n });\r\n \r\n if (this.settings.selectedDiv.length > 0){\r\n this.selectedDiv = document.getElementById(this.settings.selectedDiv) as HTMLElement;\r\n } else{\r\n this.selectedDiv = $(this.content[0]).get()[0];\r\n }\r\n \r\n this.hideContent(this.settings);\r\n this.initialView(this.settings);\r\n this.addClickEvents(this.settings);\r\n }\r\n\r\n hideContent(settings: ITabbedContent) {\r\n var numberOfTabbedContent = this.content.length;\r\n for (var count = 0; count < numberOfTabbedContent; count++) {\r\n $(this.content[count]).hide();\r\n }\r\n }\r\n\r\n initialView(settings: ITabbedContent) {\r\n $(this.targetTab).addClass(settings.tabSelectedClass);\r\n\r\n $(this.selectedDiv).show();\r\n }\r\n\r\n addClickEvents(settings: ITabbedContent) {\r\n var clickableElements = this._element.getElementsByTagName('a');\r\n var numberOfClickableElements = clickableElements.length;\r\n for (var count = 0; count < numberOfClickableElements; count++) {\r\n clickableElements[count].addEventListener('click', this.handleClickEvent);\r\n }\r\n }\r\n\r\n getTheElementToShow(fullURL:string) {\r\n var theURL = '[\\\\#]([^&#]*)';\r\n var regex = new RegExp(theURL);\r\n var tabHrefID = regex.exec(fullURL);\r\n return tabHrefID == null ? '' : tabHrefID[0];\r\n }\r\n\r\n showHideContentEvent(elementToShow:string, tabClicked:HTMLElement, settings:ITabbedContent) {\r\n if (elementToShow != this.selectedDiv.id) {\r\n // Displays the content\r\n $(this.selectedDiv).hide();\r\n $(elementToShow).show();\r\n this.selectedDiv = $(elementToShow).get()[0] as HTMLElement;\r\n\r\n // Changes the class on the tabs\r\n $(this.targetTab).removeClass(settings.tabSelectedClass);\r\n $(tabClicked).addClass(settings.tabSelectedClass);\r\n this.targetTab = tabClicked;\r\n \r\n }\r\n }\r\n\r\n handleClickEvent = (element: any) => {\r\n var parentElementClicked = element.target.parentNode as HTMLElement;\r\n var divToShow = this.getTheElementToShow(element.target.href); // Returns the ID from the URL\r\n this.showHideContentEvent(divToShow, parentElementClicked, this.settings);\r\n\r\n element.preventDefault();\r\n \r\n this.settings.callback();\r\n };\r\n}\r\n","import { Controller } from \"./helpers/controller.js\";\nimport {ShowLoader} from \"./utils/showLoader\";\n\n\nexport class TrialReturningCustomer extends Controller {\n\n private lnkSubmit: JQuery = $('.linkSubmit');\n private lnkCancel: JQuery = $('.linkCancel');\n private smsSelection: JQuery = $(\"[data-switch-sms-selected]\");\n private emailSelection: JQuery = $(\"[data-switch-email-selected]\");\n private btnSendAccessCode: JQuery = $(\"#btnSendAccessCode\");\n private commsChoiceIsEmail: JQuery = $('[name=\"IsEmail\"]');\n private lnkResendAccessCode: JQuery = $(\"#lnkSendAccessCode\");\n private loader: JQuery = $('#loading-spinner')\n private pageWrap: JQuery = $('.pageWrap')\n private lnkWithSpinner: JQuery = $('[data-use-spinner-link');\n\n constructor(element: HTMLElement) {\n super(element);\n\n this.lnkSubmit.on('click', (e) => {\n if (!e.target.className.includes('disabled')) {\n e.target.className += ' disabled';\n this.handleSubmitForm('formTrialSignupMain');\n }\n });\n\n this.lnkWithSpinner.on('click', (e) => {\n ShowLoader(this.loader);\n })\n\n // Run this on load as could be a validation failure\n this.selectCommsChoice();\n\n // Switch inputs based on Comms Choice\n this.commsChoiceIsEmail.on('click', (e) => {\n this.selectCommsChoice();\n });\n\n this.lnkResendAccessCode.on('click', (e) => {\n e.preventDefault();\n this.handleResendAccessCode();\n });\n\n this.lnkCancel.on('click', (e) => {\n this.handleSimpleBack();\n })\n\n }\n\n selectCommsChoice = () => {\n let isEmail = $(\"input[name='IsEmail']:checked\");\n\n if (isEmail.length == 0) return;\n\n if (isEmail.val() === 'true') {\n this.smsSelection.find('input').val('');\n this.smsSelection.hide();\n this.emailSelection.show();\n } else {\n this.emailSelection.find('input').val('');\n this.emailSelection.hide();\n this.smsSelection.show();\n }\n\n this.btnSendAccessCode.prop('disabled', false);\n this.btnSendAccessCode.removeClass('disabled');\n }\n\n handleSubmitForm = (formId : string) => {\n let form = document.getElementById(formId);\n\n this.submitForm(form);\n }\n\n handleResendAccessCode = () => {\n this.lnkResendAccessCode.addClass('disabled');\n this.lnkResendAccessCode.attr('href', '');\n this.handleSubmitForm(this.lnkResendAccessCode.data('form-id'));\n }\n\n handleSimpleBack = () => {\n history.back();\n }\n\n submitForm = (form: HTMLFormElement) => {\n if (form !== null) {\n if (\"useSpinner\" in form.dataset) {\n ShowLoader(this.loader);\n }\n form.submit();\n }\n }\n \n}\n\n\n","import { Controller } from \"./helpers/controller\";\nimport {ShowLoader} from \"./utils/showLoader\";\n\nexport class TrialSignupSession extends Controller {\n\n private btnForwardStandard: JQuery = $('.btnForward');\n private btnBackStandard: JQuery = $('.btnBack');\n private btnForwardAlternate: JQuery = $('#btnForward');\n private btnBackAlternate: JQuery = $('#btnBack');\n private inCentre: JQuery = $('#inCentre');\n private chooseCentre: JQuery = $('[data-switch-choose-centre]');\n private selectedDetailsJson: JQuery = $('#selectedDetails');\n private initialChildIndex: JQuery = $('#initialChildIndex');\n private RequiredChildCount: JQuery = $('#RequiredChildCount');\n\n private btnEditCentre: JQuery = $('[data-switch-edit-centre]');\n private btnEditProduct: JQuery = $('[data-switch-edit-tuition]');\n private btnEditYourDetails: JQuery = $('[data-switch-edit-your-details]');\n private btnEditChildDetails: JQuery = $('[data-switch-edit-child-details]');\n\n private loader: JQuery = $('#loading-spinner')\n\n constructor(element: HTMLElement) {\n super(element);\n\n this.btnForwardStandard.on('click', (e) => {\n\n for (let i: number = 0; i < Number(this.RequiredChildCount.val()); i++) {\n $(\"#Children_\" + i + \"__DateOfBirth\").val($(\".DayOfBirth\" + i).val() + \"/\" + $(\".MonthOfBirth\" + i).val() + \"/\" + $(\".YearOfBirth\" + i).val())\n }\n\n if (this.errorsOnCurrentChildrenTabOrNoTabs())\n {\n this.submitMainForm();\n return;\n }\n\n var firstChildTabWithErrors = this.firstChildTabWithErrors();\n if (firstChildTabWithErrors < 0) {\n this.submitMainForm();\n return;\n }\n\n $(\".childbutton\"+(firstChildTabWithErrors+1))[0].click();\n e.preventDefault();\n $('html, body').scrollTop($('.childtab1').offset().top);\n });\n this.btnBackStandard.on('click', (e) => {\n this.handleEditSelected('formBack');\n })\n this.btnForwardAlternate.on('click', (e) => {\n if (e.target.classList.contains(\"confirmBookingButton\")) {\n if ($(e.target).hasClass(\"disabled\")) {\n e.preventDefault();\n return;\n }\n\n $(e.target).addClass(\"disabled\");\n }\n \n this.submitMainForm();\n });\n this.btnBackAlternate.on('click', (e) => {\n this.handleEditSelected('formBack');\n })\n this.inCentre.on('click', (e) => {\n this.chooseCentre.show();\n });\n this.btnEditCentre.on('click', (e) => {\n this.handleEditSelected('formEditTrialExperience');\n })\n this.btnEditProduct.on('click', (e) => {\n this.handleEditSelected('formEditProduct');\n })\n this.btnEditYourDetails.on('click', (e) => {\n this.handleEditSelected('formEditYourDetails');\n })\n this.btnEditChildDetails.on('click', (e) => {\n let childNumber = e.target.getAttribute('data-child-number');\n this.handleChildEditSelected('formEditChildren', Number(childNumber));\n })\n\n if (this.initialChildIndex.length > 0 && this.initialChildIndex.val()) {\n this.handleInitialChildDisplay(this.initialChildIndex.val());\n }\n }\n\n firstChildTabWithErrors = () => {\n for (var i = 0; i < 3; i++) {\n var childrenFirstNameSelector = $(\"#Children_\"+i+\"__FirstName\");\n if (childrenFirstNameSelector.length != 1) {\n return -1;\n }\n\n if ($(childrenFirstNameSelector[0]).val() == \"\") {\n return i;\n }\n\n if ($($(\"#Children_\"+i+\"__LastName\")[0]).val() == \"\") {\n return i;\n }\n\n if ($($(\"#Children_\"+i+\"__DateOfBirth\")[0]).val() == \"\") {\n return i;\n }\n }\n\n return -1;\n }\n errorsOnCurrentChildrenTabOrNoTabs = () => {\n if ($(\".childtab1\").length == 0) {\n return true;\n }\n \n var firstChildtabWithErrors = this.firstChildTabWithErrors();\n\n var childrenTabSelector = $(\".childtab\"+(firstChildtabWithErrors+1)+\".selected\");\n if (childrenTabSelector.length == 1) {\n return true;\n }\n \n return false;\n }\n \n submitMainForm = () => {\n let form = document.getElementById('formTrialSignupMain');\n\n this.submitForm(form);\n }\n\n handleEditSelected = (formId: string) => {\n let form = document.getElementById(formId);\n let payload = this.selectedDetailsJson.val();\n var input = $('')\n .attr('type', 'hidden')\n .attr('name', 'selectedDetailsJson')\n .val(payload);\n form.append(input.get(0));\n this.submitForm(form);\n }\n\n handleChildEditSelected = (formId: string, childNumber: number) => {\n let form = document.getElementById(formId);\n var input = $('')\n .attr('type', 'hidden')\n .attr('name', 'selectedChildNumber')\n .val(childNumber);\n form.append(input.get(0));\n\n this.handleEditSelected(formId);\n }\n\n handleInitialChildDisplay = (index: number) => {\n $('li[role=\"tab\"] a')[index].click()\n }\n\n submitForm = (form: HTMLFormElement) => {\n if (form !== null) {\n if (\"useSpinner\" in form.dataset) {\n ShowLoader(this.loader);\n }\n form.submit();\n }\n }\n \n\n}\n\n\n","import { Controller } from \"./helpers/controller.js\";\r\n\r\nclass BookingSlot {\r\n public startTime: Date = new Date();\r\n public endTime: Date = new Date();\r\n}\r\n\r\nexport class TrialSlotSelection extends Controller {\r\n\r\n private bookingSlots: BookingSlot[];\r\n private daySlot: JQuery = $('[name=\"dateChoice\"]');\r\n private timeSlot: JQuery = $('[name=\"timeChoice\"]');\r\n private timeSelection: JQuery = $(\"[data-switch-slot-time]\");\r\n private slotSelectedMessage: JQuery = $(\"[data-switch-selected-slot]\");\r\n private noSlotMessage: JQuery = $(\"[data-switch-no-slot]\");\r\n private noGoNext: JQuery = $(\"[data-switch-form-navigation-step-2]\");\r\n private goNext: JQuery = $(\"[data-switch-form-navigation-step-2-complete]\");\r\n private noSlotsAvailableMessageAM = \"

No slots available at this time, please check PM

\";\r\n private noSlotsAvailableMessagePM = \"

No slots available please check AM or another date

\";\r\n private formChooseSlot = $(\"[data-switch-slot-pick-form]\");\r\n\r\n private bookingSlotsData: JQuery = $('#availableSlotsData');\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n this.bookingSlots = JSON.parse(this.bookingSlotsData.val());\r\n\r\n this.daySlot.on('click', (e) => {\r\n this.SelectDay();\r\n });\r\n \r\n this.SelectFirstDayAndMeridiem();\r\n }\r\n \r\n SelectFirstDayAndMeridiem = () => {\r\n // pre-select the first day and am/pm with the first slot\r\n if (this.bookingSlots.length < 1) {\r\n return;\r\n }\r\n \r\n // only if a day isn't already selected\r\n if ($(\"input[name='dateChoice']:checked\").length > 0) {\r\n return;\r\n }\r\n\r\n let firstDay = this.bookingSlots[0].startTime.toString().split('T')[0];\r\n ($(\"input[name='dateChoice'][value='\" + firstDay + \"']\")[0] as HTMLInputElement).checked = true;\r\n this.SelectDay();\r\n\r\n if (parseInt(this.bookingSlots[0].startTime.toString().split('T')[1].substring(0,2)) >= 12) {\r\n $(\"a[href='#pm']\")[0].click();\r\n }\r\n }\r\n\r\n SelectDay = () => {\r\n let selectedDay = $(\"input[name='dateChoice']:checked\").val();\r\n var selectedDayParts = selectedDay.split('-');\r\n var selectedDate = new Date(selectedDayParts[0], selectedDayParts[1] - 1, selectedDayParts[2]);\r\n let selectedDateStartTime = new Date(selectedDate).getTime();\r\n let selectedDateEndTime = selectedDateStartTime + (60 * 60 * 24 * 1000) - 1;\r\n let results = this.bookingSlots.filter(d => {\r\n var bookingSlotTime = new Date(d.startTime).getTime();\r\n return (selectedDateStartTime < bookingSlotTime && bookingSlotTime < selectedDateEndTime);\r\n });\r\n this.RepaintAvailableTimeSlots(results);\r\n }\r\n\r\n RepaintAvailableTimeSlots = (slots: BookingSlot[]) => {\r\n let pmSlotsHtml = \"\";\r\n let amSlotsHtml = \"\";\r\n for (let index = 0; index < slots.length; index++) {\r\n let slot = slots[index];\r\n let slotTime = new Date(slot.startTime).toLocaleTimeString(\"en-GB\", { timeZone: \"Europe/London\", hour: \"2-digit\", minute: \"2-digit\" })\r\n let slotTimeEnd = new Date(slot.endTime).toLocaleTimeString(\"en-GB\", { timeZone: \"Europe/London\", hour: \"2-digit\", minute: \"2-digit\" })\r\n let slotTimeString = slotTime.replace(':', '-');\r\n let slotHtml = `\r\n \r\n `;\r\n\r\n if (new Date(slot.startTime).getHours() > 11) {\r\n pmSlotsHtml += slotHtml;\r\n } else {\r\n amSlotsHtml += slotHtml;\r\n }\r\n }\r\n\r\n $('#am').html(amSlotsHtml !== \"\" ? amSlotsHtml : this.noSlotsAvailableMessageAM);\r\n $('#pm').html(pmSlotsHtml !== \"\" ? pmSlotsHtml : this.noSlotsAvailableMessagePM);\r\n\r\n $('[name=\"timeChoice\"]').on('click', (e) => {\r\n this.SelectTimeSlot();\r\n });\r\n\r\n this.ResetDay();\r\n\r\n this.timeSelection.show();\r\n }\r\n\r\n SelectTimeSlot = () => {\r\n let temp = $(\"input[name='timeChoice']:checked\")\r\n this.formChooseSlot.find('#selectedSlotStartTime').val($(\"input[name='timeChoice']:checked\").data(\"slot-start\"));\r\n this.formChooseSlot.find('#selectedSlotEndTime').val($(\"input[name='timeChoice']:checked\").data(\"slot-end\"));\r\n\r\n this.noSlotMessage.hide();\r\n this.RepaintSelectedMessage();\r\n this.slotSelectedMessage.show();\r\n this.noGoNext.hide();\r\n this.goNext.show();\r\n\r\n }\r\n\r\n RepaintSelectedMessage = () => {\r\n let selectedDay = $(\"input[name='dateChoice']:checked\").val();\r\n\r\n var selectedDayParts = selectedDay.split('-');\r\n var selectedDate = new Date(selectedDayParts[0], selectedDayParts[1] - 1, selectedDayParts[2]);\r\n\r\n let selectedTime = $(\"input[name='timeChoice']:checked\").val();\r\n let selectedTimeEnd = $(\"input[name='timeChoice']:checked\").data(\"end-time\");\r\n let message = `${selectedDate.toLocaleDateString(\"en-GB\", { timeZone: \"Europe/London\", weekday: 'long' })}, ${selectedDate.toLocaleDateString(\"en-GB\", { timeZone: \"Europe/London\", day: 'numeric' })} ${selectedDate.toLocaleDateString(\"en-GB\", { timeZone: \"Europe/London\", month: 'short' })}${selectedTime} - ${selectedTimeEnd}`;\r\n let messageBox = $(\".completedItemLarge\");\r\n messageBox.html(message);\r\n }\r\n\r\n ResetDay = () => {\r\n this.noSlotMessage.show();\r\n this.slotSelectedMessage.hide();\r\n this.noGoNext.show();\r\n this.goNext.hide();\r\n }\r\n}\r\n\r\n\r\n","import {shim} from \"../helpers/shim\";\n\n\nexport class Flickity {\n\n private timer: number | undefined;\n \n loadScript = (callback: () => void) => {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(() => {\n if (typeof (shim('Flickity')) === 'undefined') {\n if (document.querySelectorAll('#flickity-js').length <= 0) {\n let tag = document.createElement('script');\n tag.src = '/resources/lib/flickity.pkgd.min.js';\n tag.id = 'flickity-js';\n let firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode?.insertBefore(tag, firstScriptTag);\n }\n console.log('Flickity not loaded');\n this.loadScript(callback);\n } else {\n console.log('Flickity loaded');\n callback();\n }\n }, 50);\n }\n \n}","\n\nexport const ShowLoader = (loader: JQuery) => {\n\n $('.pageWrap').addClass(\"overlayCover\");\n loader.show();\n \n if (navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)) {\n window.scrollTo(0,0);\n }else{\n $('html,body').animate({\n scrollTop: 0\n }, 600, function(){\n $('html,body').clearQueue();\n });\n }\n}","/// \nimport {shim} from './helpers/shim';\nimport {Controller} from \"./helpers/controller\";\n\n\nexport class VideoBoxControl extends Controller {\n\n\n static REPLACE_ELEMENT_SELECTOR: string = '.video';\n static PADDING_BOTTOM_VIDEO: number = 90;\n\n static YT: any;\n\n private timer: number | undefined;\n\n private player: any;\n\n private playerReady: boolean = false;\n\n private pageWrap: JQuery = $('.pageWrap');\n private videoHolder: JQuery | undefined;\n private html: JQuery = $('html');\n\n\n constructor(element: HTMLElement) {\n super(element);\n this.initPlayer();\n }\n\n createVideoHtmlElement(tempScrollTop: number) {\n\n return `
\n
\n \n
\n
\n
\n
\n
`;\n }\n\n initPlayer() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(() => {\n if (typeof (shim('YT')) === 'undefined' || typeof (shim('YT').Player) === 'undefined') {\n if (document.querySelectorAll('#youtube-iframe-api').length <= 0) {\n let tag = document.createElement('script');\n tag.src = '//www.youtube.com/iframe_api';\n tag.id = 'youtube-iframe-api';\n let firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode?.insertBefore(tag, firstScriptTag);\n }\n this.initPlayer();\n } else {\n VideoBoxControl.YT = shim('YT');\n this.playerReady = true;\n\n\n this.$().on('click', () => {\n\n let tempScrollTop = $(window).scrollTop();\n\n document.body.insertAdjacentHTML('beforeend',this.createVideoHtmlElement(tempScrollTop))\n this.videoHolder = $('.videoBox');\n\n this.loadYoutubeVideo()\n\n this.videoHolder.find('.blueClose').on('click', () => {\n this.pageWrap.removeClass(\"overlayCover\");\n this.html.css('overflow', \"auto\");\n $(window).scrollTop(tempScrollTop);\n this.videoHolder?.remove();\n\n return false;\n });\n\n return false;\n });\n\n }\n }, 50);\n }\n\n loadYoutubeVideo() {\n\n if (this.videoHolder != undefined) {\n let toReplaceElement = this.videoHolder.find(VideoBoxControl.REPLACE_ELEMENT_SELECTOR).get()[0];\n let videoId = this.$().data().youtubeid;\n if (toReplaceElement) {\n this.player = new VideoBoxControl.YT.Player(toReplaceElement, {\n height: '100%',\n width: '100%',\n videoId: videoId,\n origin: window.origin,\n events: {\n 'onReady': (event:any) => {\n this.onPlayerReady(event);\n }\n }\n });\n try{\n this.player.h.attributes.sandbox.value = \"allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation\";\n\n } catch {\n \n }\n } else {\n throw Error('Couldn\\'t initialize Video (' + this.$().getAttribute('data-youtube') + '). No Element with the Selector ' + VideoBoxControl.REPLACE_ELEMENT_SELECTOR + ' found.');\n }\n }\n\n }\n\n onPlayerReady(event:any) {\n\n event.target.playVideo();\n\n this.html.css('overflow', \"hidden\");\n this.pageWrap.addClass(\"overlayCover\");\n this.videoHolder?.show();\n this.checkVideoSize();\n }\n \n checkVideoSize(){\n let videoHeight = $(\".videoBox\").innerHeight() - VideoBoxControl.PADDING_BOTTOM_VIDEO;\n let viewportHeight = window.innerHeight;\n let widthControlElement = $(\".videoCol\");\n if (viewportHeight < videoHeight){\n widthControlElement.css(\"max-width\",\"500px\");\n }\n }\n}\n"]}