{"version":3,"sources":["ts/inc/RequiredFields.ts","ts/inc/TagManagerEvents.ts","ts/inc/Pages.ts","ts/inc/AddressAutocomplete.ts","ts/dbs.bookOnlineV2.ts"],"names":["TimeForYou","Utilities","SetupRequiredFields","$","each","_idx","elem","target","data","targetGroup","attr","targetValue","val","value","show","hide","change","PushDataLayerEvent","window","dataLayer","push","SetupPages","location","hash","click","ev","preventDefault","parent","this","parentsUntil","first","Page_ClientValidate","document","scrollTop","on","collapse","removeClass","addClass","is","replace","addEventListener","hashPosition","newURL","indexOf","substr","pageUrl","pageName","_b","_a","querySelector","textContent","trim","ga","franchiseName","event","form_name","form_step","AddressSearchField","autoResponse","dataObj","JSON","parse","xhr","responseText","list","remove","createElement","classList","add","manualLink","href","style","fontWeight","searchField","targetElement","readOnly","targetFunction","parentElement","manualItem","appendChild","d","length","item","let","display","Line1","Line2","Line3","Town","link","dataset","address","stringify","loadAddress","listItem","input","nextSibling","insertBefore","append","County","Postcode","changeEvent","Event","dispatchEvent","fetchData","form","open","ccUrl","url","setRequestHeader","send","contentChanged","currentTimeout","clearTimeout","setTimeout","create","fieldElement","undefined","autocompleteUrl","autocompleteTarget","getElementById","parts","split","i","stateChange","readyState","XMLHttpRequest","DONE","status","constructor","autoUrl","autoTarget","decodeURIComponent","onreadystatechange","SetupAddressSearch","fields","autoElements","querySelectorAll","field","BookOnlineV2","getValue","name","check","selector","submitAbandonData","abandonedId","response","yield","fetch","method","body","franchiseId","toFixed","headers","json","getLabel","review","label","id","text","setupChoiceCards","find","setActive","cardParent","setupRangeFields","updateValue","desc","format","html","recalculatePricingHints","frequencyValue","timeValue","managementValue","discountValue","quarterlyPrice","parseFloat","toLocaleString","documentElement","getAttribute","currency","maximumFractionDigits","firstPrice","FillAddressFields","result","addrElements","setSelectorValue","Initialise","setFieldValue","setGroupValue","setMultiValue","type","selected","selectedString","tagName","Validation","RequireCleanerFrequency","_source","args","IsValid","RequireCleanerDay","RequireCleanerTime","RequireCleanerTimeV2","RequireHomePets","RequireHomeAlarm","RequireHomeKey","RequireHomeSmoking","RequireHomeChildren","ServicesRequired","RequireCleanerFrequencyDetails","ValidatePricingCleanerRate","cleanerRate","isNaN","ValidatePricingManagementRate","managementRate","RequirePricingBookingFee","RequirePricingManagementRate","RequirePricingOneOffDiscount","RequirePricingMinimumFee","totalCharge","mgmtRate","RequireHomePetsDetails","RequireServicesRequiredDetails","RequireOnePhoneNumber","PrivacyCheckRequired","TermsCheckRequired"],"mappings":"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","file":"dbs.bookOnlineV2.js","sourcesContent":["module TimeForYou.Utilities\r\n{\r\n export function SetupRequiredFields()\r\n {\r\n $(\"[data-require]\").each(function (_idx, elem)\r\n {\r\n const target = $(elem).data(\"require\");\r\n const targetGroup = $(`#${target}`).attr(\"name\");\r\n const targetValue = $(elem).data(\"require-value\")\r\n ? $(elem).data(\"require-value\")\r\n : $(`#${target}`).val();\r\n const value = $(elem).data(\"require-value\")\r\n ? $(`[name='${targetGroup}']`).val()\r\n : $(`[name='${targetGroup}']:checked`).val();\r\n\r\n if (!targetGroup || value !== targetValue)\r\n {\r\n $(elem).hide();\r\n }\r\n else\r\n {\r\n $(elem).show();\r\n }\r\n\r\n $(`[name='${targetGroup}']`).change(function ()\r\n {\r\n const value = $(elem).data(\"require-value\")\r\n ? $(`[name='${targetGroup}']`).val()\r\n : $(`[name='${targetGroup}']:checked`).val();\r\n\r\n if (!targetGroup || value !== targetValue)\r\n {\r\n $(elem).hide();\r\n }\r\n else\r\n {\r\n $(elem).show();\r\n }\r\n });\r\n });\r\n\r\n $(\"[data-block]\").each(function (_idx, elem)\r\n {\r\n const target = $(elem).data(\"block\");\r\n const targetGroup = $(`#${target}`).attr(\"name\");\r\n const targetValue = $(`#${target}`).val();\r\n const value = $(`[name='${targetGroup}']:checked`).val();\r\n\r\n if (value === targetValue)\r\n {\r\n $(elem).hide();\r\n }\r\n else\r\n {\r\n $(elem).show();\r\n }\r\n\r\n $(`[name='${targetGroup}']`).change(function ()\r\n {\r\n const value = $(`[name='${targetGroup}']:checked`).val();\r\n\r\n if (value === targetValue)\r\n {\r\n $(elem).hide();\r\n }\r\n else\r\n {\r\n $(elem).show();\r\n }\r\n });\r\n });\r\n }\r\n}","declare var dataLayer: any[] | undefined;\r\n\r\nmodule TimeForYou.Utilities\r\n{\r\n export function PushDataLayerEvent(data: any)\r\n {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(data);\r\n }\r\n}","/// \r\ndeclare var Page_ClientValidate: (group?: string) => boolean;\r\n\r\nmodule TimeForYou.Utilities\r\n{\r\n function navigateToPage(pageUrl: string)\r\n {\r\n if ($(pageUrl).is(\".in\"))\r\n {\r\n return;\r\n }\r\n\r\n const pageName = document.querySelector(`${pageUrl}-nav`)?.textContent?.trim();\r\n ga(\"send\", \"event\", franchiseName, \"Forms\", `Booking Request - ${pageName}`);\r\n ga(\"franchise.send\", \"event\", franchiseName, \"Forms\", `Booking Request - ${pageName}`);\r\n PushDataLayerEvent({ \"event\": \"form_step_change\", \"form_name\": \"Booking Request\", \"form_step\": pageName });\r\n\r\n $(pageUrl).collapse(\"show\");\r\n }\r\n\r\n export function SetupPages()\r\n {\r\n window.location.hash = \"\";\r\n\r\n $(\"[data-page]\").click(function (this: JQuery, ev)\r\n {\r\n ev.preventDefault();\r\n\r\n var parent = $(this).parentsUntil(\".booking-page-wrapper\", \".booking-page\").first();\r\n\r\n if ($(this).data(\"page\") == \"prev\")\r\n {\r\n window.location.hash = $(this).data(\"target\");\r\n return;\r\n }\r\n\r\n var valid = Page_ClientValidate($(parent).attr(\"id\"));\r\n if (valid)\r\n {\r\n window.location.hash = $(this).data(\"target\");\r\n }\r\n else\r\n {\r\n $(document).scrollTop(0);\r\n }\r\n });\r\n\r\n $(\".booking-page.collapse\").on(\"show.bs.collapse\", function (this: JQuery)\r\n {\r\n $(\".booking-page.collapse:not(#\" + $(this).attr(\"id\") + \")\").collapse('hide');\r\n $(\".booking-nav-steps li\").removeClass(\"active\");\r\n $(\".booking-nav-steps li#\" + $(this).attr(\"id\") + \"-nav\").addClass(\"active\");\r\n });\r\n\r\n $(\".booking-page.collapse\").on(\"shown.bs.collapse\", function ()\r\n {\r\n $(document).scrollTop(0);\r\n });\r\n\r\n $(\".booking-nav-steps li\").click(function (this: JQuery)\r\n {\r\n if ($(this).is(\".active, .active ~ li\"))\r\n {\r\n return;\r\n }\r\n\r\n window.location.hash = $(this).attr(\"id\").replace(\"-nav\", \"\");\r\n });\r\n\r\n window.addEventListener(\"hashchange\", function (ev: HashChangeEvent)\r\n {\r\n const hashPosition = ev.newURL.indexOf('#');\r\n\r\n const hash = hashPosition === -1\r\n ? '#booking-page-schedule'\r\n : ev.newURL.substr(hashPosition);\r\n\r\n navigateToPage(hash);\r\n });\r\n }\r\n}","declare var ccUrl: string;\r\n\r\nmodule TimeForYou.Utilities\r\n{\r\n export interface AddressResult\r\n {\r\n Line1: string;\r\n Line2: string | null;\r\n Line3: string | null;\r\n Town: string;\r\n County: string;\r\n Postcode: string;\r\n }\r\n\r\n export type AddressTargetArgument = AddressResult | boolean;\r\n type AddressTargetFunction = ((result: AddressTargetArgument) => void);\r\n type AddressTarget = HTMLInputElement | AddressTargetFunction;\r\n\r\n interface AddressResultDataWrapper\r\n {\r\n d: AddressResult[]\r\n }\r\n\r\n const autocomplete_timeout = 600;\r\n\r\n class AddressSearchField\r\n {\r\n private readonly xhr: XMLHttpRequest;\r\n private input: HTMLInputElement;\r\n private targetElement: HTMLInputElement | null;\r\n private targetFunction: AddressTargetFunction | null;\r\n private list: HTMLUListElement | null = null;\r\n private url: string;\r\n private currentTimeout: number | null = null;\r\n private autoResponse()\r\n {\r\n const dataObj = JSON.parse(this.xhr.responseText) as AddressResultDataWrapper;\r\n if (dataObj == null)\r\n {\r\n return;\r\n }\r\n\r\n if (this.list !== null)\r\n {\r\n this.list.remove();\r\n }\r\n\r\n this.list = document.createElement(\"ul\");\r\n this.list.classList.add(\"dropdown-menu\");\r\n this.list.classList.add(\"dropdown-autocomplete\");\r\n\r\n\r\n const manualLink = document.createElement(\"a\");\r\n manualLink.href = \"#\";\r\n manualLink.textContent = \"Click here to enter an address manually\";\r\n manualLink.classList.add(\"dropdown-item\");\r\n manualLink.style.fontWeight = \"bold\";\r\n\r\n const searchField = this;\r\n manualLink.addEventListener(\"click\", function (ev)\r\n {\r\n ev.preventDefault();\r\n if (searchField.targetElement)\r\n {\r\n searchField.targetElement.readOnly = false;\r\n }\r\n else if (searchField.targetFunction)\r\n {\r\n searchField.targetFunction(false);\r\n }\r\n\r\n if (searchField.list?.parentElement)\r\n {\r\n searchField.list.parentElement.classList.remove(\"open\");\r\n }\r\n });\r\n\r\n const manualItem = document.createElement(\"li\");\r\n manualItem.appendChild(manualLink);\r\n this.list.appendChild(manualItem);\r\n\r\n if (dataObj.d.length > 0)\r\n {\r\n\r\n for (const item of dataObj.d)\r\n {\r\n let display = item.Line1;\r\n if (item.Line2)\r\n {\r\n display += \", \";\r\n display += item.Line2;\r\n }\r\n if (item.Line3)\r\n {\r\n display += \", \";\r\n display += item.Line3;\r\n }\r\n display += \", \";\r\n display += item.Town;\r\n\r\n const link = document.createElement(\"a\");\r\n link.href = \"#\";\r\n link.textContent = display;\r\n link.classList.add(\"dropdown-item\");\r\n link.dataset.address = JSON.stringify(item);\r\n\r\n const searchField = this;\r\n link.addEventListener(\"click\", function (ev)\r\n {\r\n ev.preventDefault();\r\n searchField.loadAddress(item);\r\n });\r\n\r\n const listItem = document.createElement(\"li\");\r\n listItem.appendChild(link);\r\n this.list.appendChild(listItem);\r\n\r\n if (this.targetElement)\r\n {\r\n this.targetElement.readOnly = false;\r\n }\r\n else if (this.targetFunction)\r\n {\r\n this.targetFunction(true);\r\n }\r\n }\r\n }\r\n\r\n if (this.input.parentElement)\r\n {\r\n if (this.input.nextSibling)\r\n {\r\n this.input.parentElement.insertBefore(this.list, this.input.nextSibling);\r\n }\r\n else\r\n {\r\n this.input.parentElement.append(this.list);\r\n }\r\n\r\n if (this.list.parentElement)\r\n {\r\n this.list.parentElement.classList.add(\"open\");\r\n }\r\n }\r\n }\r\n\r\n private loadAddress(item: AddressResult)\r\n {\r\n if (this.targetElement)\r\n {\r\n let display = item.Line1;\r\n if (item.Line2)\r\n {\r\n display += `\\n${item.Line2}`;\r\n }\r\n if (item.Line3)\r\n {\r\n display += `\\n${item.Line3}`;\r\n }\r\n display += `\\n${item.Town}\\n${item.County}\\n${item.Postcode}`;\r\n\r\n this.targetElement.value = display;\r\n\r\n const changeEvent = new Event(\"change\");\r\n this.targetElement.dispatchEvent(changeEvent);\r\n }\r\n\r\n if (this.targetFunction)\r\n {\r\n this.targetFunction(item);\r\n }\r\n\r\n if (this.list?.parentElement)\r\n {\r\n this.list.parentElement.classList.remove(\"open\");\r\n }\r\n }\r\n\r\n private fetchData()\r\n {\r\n if (this.list !== null)\r\n {\r\n this.list.remove();\r\n this.list = null;\r\n }\r\n\r\n if (this.input.value === \"\")\r\n {\r\n return;\r\n }\r\n\r\n const form = {\r\n address: this.input.value\r\n };\r\n\r\n this.xhr.open(\"POST\", ccUrl + this.url, true);\r\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\r\n this.xhr.send(JSON.stringify(form));\r\n }\r\n\r\n private contentChanged()\r\n {\r\n if (this.currentTimeout != null)\r\n {\r\n clearTimeout(this.currentTimeout);\r\n }\r\n\r\n this.currentTimeout = window.setTimeout(() => this.fetchData(), autocomplete_timeout);\r\n }\r\n\r\n public static create(fieldElement: HTMLInputElement): AddressSearchField | null\r\n {\r\n if (fieldElement.dataset.autocompleteUrl === undefined)\r\n {\r\n return null;\r\n }\r\n\r\n if (fieldElement.dataset.autocompleteTarget === undefined)\r\n {\r\n return null;\r\n }\r\n\r\n const target = document.getElementById(fieldElement.dataset.autocompleteTarget) as HTMLInputElement;\r\n if (target != null)\r\n {\r\n target.readOnly = false;\r\n return new AddressSearchField(fieldElement, fieldElement.dataset.autocompleteUrl, target);\r\n }\r\n\r\n const parts = fieldElement.dataset.autocompleteTarget.split(\".\");\r\n let targetFunction: any = window;\r\n for (let i = 0; i < parts.length; i++)\r\n {\r\n targetFunction = targetFunction[parts[i]];\r\n\r\n if (typeof targetFunction === \"function\")\r\n {\r\n targetFunction(true);\r\n return new AddressSearchField(fieldElement, fieldElement.dataset.autocompleteUrl, targetFunction);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private stateChange()\r\n {\r\n if (this.xhr.readyState === XMLHttpRequest.DONE && this.xhr.status === 200)\r\n {\r\n this.autoResponse();\r\n }\r\n }\r\n\r\n private constructor(fieldElement: HTMLInputElement, autoUrl: string, autoTarget: AddressTarget)\r\n {\r\n this.url = decodeURIComponent(autoUrl);\r\n if (typeof autoTarget === \"function\")\r\n {\r\n this.targetFunction = autoTarget;\r\n this.targetElement = null;\r\n }\r\n else\r\n {\r\n this.targetFunction = null;\r\n this.targetElement = autoTarget;\r\n }\r\n this.input = fieldElement;\r\n this.input.addEventListener(\"keyup\", () => this.contentChanged());\r\n this.xhr = new XMLHttpRequest();\r\n this.xhr.onreadystatechange = () => this.stateChange();\r\n }\r\n }\r\n\r\n export function SetupAddressSearch()\r\n {\r\n const fields = [];\r\n const autoElements = document.querySelectorAll(\"[data-autocomplete=postcode]\");\r\n for (let i = 0; i < autoElements.length; i++)\r\n {\r\n const field = AddressSearchField.create(autoElements[i] as HTMLInputElement);\r\n\r\n if (field !== null)\r\n {\r\n fields.push(field);\r\n }\r\n }\r\n }\r\n}","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\ndeclare var franchiseName: string;\r\ndeclare var franchiseId: number;\r\ndeclare var abandonedId: string | null | undefined;\r\n\r\nmodule TimeForYou.BookOnlineV2\r\n{\r\n function getValue(name: string, check?: boolean)\r\n {\r\n const selector = $(`[name$='${name}']${check === true ? \":checked\" : \"\"}`);\r\n if (selector.length === 0)\r\n {\r\n return null;\r\n }\r\n else if (name.indexOf(\"ServicesRequired\") === 0)\r\n {\r\n return true;\r\n }\r\n else\r\n {\r\n return selector.val();\r\n }\r\n }\r\n\r\n function getFormData()\r\n {\r\n document.createElement(\"form\");\r\n var data: any = {};\r\n if (abandonedId && abandonedId !== '')\r\n {\r\n data['AbandonedId'] = abandonedId;\r\n }\r\n data['FranchiseId'] = franchiseId.toFixed(0);\r\n data['ContactFirstName'] = getValue(\"ContactFirstName\");\r\n data['ContactLastName'] = getValue(\"ContactLastName\");\r\n data['ContactPhone'] = getValue(\"ContactPhone\");\r\n data['ContactEmail'] = getValue(\"ContactEmail\");\r\n data['CleanerFrequency'] = getValue(\"CleanerFrequency\", true);\r\n data['CleanerTimeRequired'] = getValue(\"CleanerTimeRequired\");\r\n data['CleanerDay'] = getValue(\"CleanerDay\", true);\r\n data['CleanerBackup'] = getValue(\"CleanerBackup\", true);\r\n data['CleanerTime'] = getValue(\"CleanerTime\", true);\r\n data['HomeBedrooms'] = getValue(\"HomeBedrooms\");\r\n data['HomeBathrooms'] = getValue(\"HomeBathrooms\");\r\n data['HomePets'] = getValue(\"HomePets\", true);\r\n data['HomePetsDetails'] = getValue(\"HomePetsDetails\");\r\n data['ServicesRequiredCleaning'] = getValue(\"ServicesRequiredCleaning\", true);\r\n data['ServicesRequiredIroning'] = getValue(\"ServicesRequiredIroning\", true);\r\n data['ServicesRequiredBedChanging'] = getValue(\"ServicesRequiredBedChanging\", true);\r\n data['ServicesRequiredVacuuming'] = getValue(\"ServicesRequiredVacuuming\", true);\r\n data['ServicesRequiredWindows'] = getValue(\"ServicesRequiredWindows\", true);\r\n data['ServicesRequiredOther'] = getValue(\"ServicesRequiredOther\", true);\r\n data['ServicesRequiredDetails'] = getValue(\"ServicesRequiredDetails\");\r\n data['ContactAddress'] = getValue(\"ContactAddress\");\r\n data['ContactSource'] = getValue(\"ContactSource\");\r\n data['ContactSourceOther'] = getValue(\"ContactSourceOther\");\r\n data['ContactVoucher'] = getValue(\"ContactVoucher\");\r\n return data;\r\n\r\n }\r\n\r\n async function submitAbandonData()\r\n {\r\n const target = abandonedId && abandonedId != \"\"\r\n ? `${ccUrl}/App_Services/BookingRequestService.asmx/UpdateAbandonedFormEntry`\r\n : `${ccUrl}/App_Services/BookingRequestService.asmx/CreateAbandonedFormEntry`;\r\n\r\n const response = await fetch(target, {\r\n method: 'POST',\r\n body: JSON.stringify(getFormData()),\r\n headers: [\r\n [\"Content-Type\", \"application/json; charset=UTF-8\"],\r\n [\"Accept\", \"application/json\"]\r\n ]\r\n });\r\n abandonedId = (await response.json() as { d: string }).d;\r\n }\r\n\r\n\r\n function getLabel(elem: HTMLElement)\r\n {\r\n const label = $(\"label[for='\" + elem.id + \"']\");\r\n if (label.length > 0)\r\n {\r\n const review = $(label[0]).data(\"review-label\");\r\n if (review != null)\r\n {\r\n return review;\r\n }\r\n\r\n return label.text();\r\n }\r\n\r\n return $(elem).val();\r\n }\r\n\r\n function setupReviewFields()\r\n {\r\n $(\"[data-review]\").each(function (_idx, elem)\r\n {\r\n\r\n const type = $(elem).data(\"review\");\r\n const value = $(elem).data(\"review-value\");\r\n\r\n if (type === \"field\")\r\n {\r\n var setFieldValue = function ()\r\n {\r\n const format = $(elem).data(\"review-format\") as string | null | undefined;\r\n\r\n let text = $(\"#\" + value).val();\r\n if (format != null && format != '')\r\n {\r\n text = format.replace(\"{0}\", text);\r\n }\r\n\r\n // initial setup\r\n $(elem).text(text);\r\n };\r\n\r\n setFieldValue();\r\n\r\n // track changes\r\n $(\"#\" + value).change(function ()\r\n {\r\n setFieldValue();\r\n });\r\n }\r\n else if (type === \"group\")\r\n {\r\n var setGroupValue = function ()\r\n {\r\n var selected = $(\"[name$='\" + value + \"']:checked\");\r\n\r\n let selectedString = \"\";\r\n for (let i = 0; i < selected.length; i++)\r\n {\r\n if (i !== 0)\r\n {\r\n selectedString += \", \";\r\n }\r\n\r\n selectedString += getLabel(selected[i])\r\n }\r\n $(elem).text(selectedString);\r\n };\r\n\r\n // initial setup\r\n setGroupValue();\r\n\r\n // track changes\r\n $(\"[name$='\" + value + \"']\").change(function ()\r\n {\r\n setGroupValue();\r\n });\r\n }\r\n else if (type === \"multi\")\r\n {\r\n var setMultiValue = function ()\r\n {\r\n var selected = $(\"#\" + value + \" input:checked\");\r\n\r\n let selectedString = \"\";\r\n for (let i = 0; i < selected.length; i++)\r\n {\r\n if (i !== 0)\r\n {\r\n selectedString += \", \";\r\n }\r\n\r\n selectedString += getLabel(selected[i])\r\n }\r\n $(elem).text(selectedString);\r\n };\r\n\r\n // initial setup\r\n setMultiValue();\r\n\r\n // track changes\r\n $(\"#\" + value + \" input\").change(function ()\r\n {\r\n setMultiValue();\r\n });\r\n }\r\n });\r\n }\r\n\r\n function setupChoiceCards()\r\n {\r\n $(\".choice-card\").each(function (_idx, elem)\r\n {\r\n const check = $(elem).find(\"input[type=radio],input[type=checkbox]\").first();\r\n if (check.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n function setActive()\r\n {\r\n if ($(check).is(\":checked\"))\r\n {\r\n $(elem).addClass(\"choice-active\");\r\n }\r\n else\r\n {\r\n $(elem).removeClass(\"choice-active\");\r\n }\r\n }\r\n\r\n function checkActive()\r\n {\r\n if ($(check).attr(\"type\") === \"radio\")\r\n {\r\n const cardParent = $(check).parentsUntil(\".booking-field\", \".booking-choices\").first();\r\n $(cardParent).find(\".choice-card.choice-active\").removeClass(\"choice-active\");\r\n }\r\n\r\n setActive();\r\n }\r\n\r\n setActive();\r\n $(check).change(checkActive);\r\n });\r\n }\r\n\r\n function setupRangeFields()\r\n {\r\n $(\".booking-range\").each(function (_idx, elem)\r\n {\r\n const input = $(elem).find(\"input[type=range]\");\r\n\r\n const updateValue = function (elem: HTMLElement)\r\n {\r\n const input = $(elem).find(\"input[type=range]\");\r\n const desc = $(elem).find(\".range-desc\");\r\n const format: string = $(desc).data(\"format\");\r\n\r\n const value = `${$(input).val()}`;\r\n $(desc).html(format.replace(\"{0}\", value));\r\n };\r\n\r\n updateValue(elem as HTMLElement);\r\n\r\n $(input).on(\"input\", () => updateValue(elem as HTMLElement));\r\n });\r\n }\r\n\r\n function setupChoicePanels()\r\n {\r\n $(\".choice-panel\").click(function (this: JQuery, ev)\r\n {\r\n if (ev.target.tagName == \"INPUT\" || ev.target.tagName === \"LABEL\")\r\n {\r\n return;\r\n }\r\n\r\n $(this).find(\"input\").click();\r\n });\r\n }\r\n\r\n function setupSubmitEventTracking()\r\n {\r\n $(\"form\").on(\"submit\", function ()\r\n {\r\n ga(\"send\", \"event\", franchiseName, \"Forms\", \"Booking Request - Submit\");\r\n ga(\"franchise.send\", \"event\", franchiseName, \"Forms\", \"Booking Request - Submit\");\r\n TimeForYou.Utilities.PushDataLayerEvent({ \"event\": \"form_submission\", \"form_name\": \"Booking Request\" });\r\n });\r\n }\r\n\r\n function recalculatePricingHints()\r\n {\r\n const frequencyValue = $(\"[name$='$CleanerFrequency']:checked\").val();\r\n const timeValue = $(\"[name$='$CleanerTimeRequired']\").val();\r\n const managementValue = $(\"[name$='$PricingManagementRate']\").val();\r\n const discountValue = $(\"[name$='$PricingOneOffDiscount']\").val();\r\n\r\n if (frequencyValue === \"CleanerFrequencyOther\" || !frequencyValue || !timeValue || !managementValue || discountValue === \"\")\r\n {\r\n $(\"#quarterly-calc-result\").text(\"N/A\");\r\n $(\"#first-calc-result\").text(\"N/A\");\r\n return;\r\n }\r\n\r\n const frequencyCount = frequencyValue === \"CleanerFrequencyWeekly\" ? 13 : 6.5;\r\n\r\n const quarterlyPrice = frequencyCount * parseFloat(timeValue) * parseFloat(managementValue);\r\n $(\"#quarterly-calc-result\").text(quarterlyPrice.toLocaleString(document.documentElement.getAttribute(\"lang\") ?? \"en-GB\", { style: 'currency', currency: 'GBP', maximumFractionDigits: 2 }));\r\n\r\n const firstPrice = quarterlyPrice - parseFloat(discountValue);\r\n $(\"#first-calc-result\").text(firstPrice.toLocaleString(document.documentElement.getAttribute(\"lang\") ?? \"en-GB\", { style: 'currency', currency: 'GBP', maximumFractionDigits: 2 }));\r\n }\r\n\r\n function setupPricingHints()\r\n {\r\n $(\"[name$='$CleanerFrequency'],[name$='$CleanerTimeRequired'],[name$='$PricingManagementRate'],[name$='$PricingOneOffDiscount']\")\r\n .change(function ()\r\n {\r\n recalculatePricingHints();\r\n });\r\n\r\n recalculatePricingHints();\r\n }\r\n\r\n export function FillAddressFields(result: TimeForYou.Utilities.AddressTargetArgument)\r\n {\r\n if (typeof result === \"boolean\")\r\n {\r\n const addrElements = document.querySelectorAll(\"input[name*='$ContactAddress_']\");\r\n for (let i = 0; i < addrElements.length; i++)\r\n {\r\n (addrElements[i] as HTMLInputElement).readOnly = result;\r\n }\r\n return;\r\n }\r\n\r\n function setSelectorValue(selector: string, value: string)\r\n {\r\n let elem = document.querySelector(selector) as HTMLInputElement;\r\n if (elem)\r\n {\r\n elem.value = value;\r\n\r\n const changeEvent = new Event(\"change\");\r\n elem.dispatchEvent(changeEvent);\r\n }\r\n }\r\n\r\n setSelectorValue(\"input[name$='$ContactAddress_LineOne']\", result.Line1);\r\n setSelectorValue(\"input[name$='$ContactAddress_LineTwo']\", result.Line2 ?? \"\");\r\n setSelectorValue(\"input[name$='$ContactAddress_Town']\", result.Town);\r\n setSelectorValue(\"input[name$='$ContactAddress_County']\", result.County);\r\n setSelectorValue(\"input[name$='$ContactAddress_Postcode']\", result.Postcode);\r\n }\r\n\r\n export function Initialise()\r\n {\r\n TimeForYou.Utilities.SetupRequiredFields();\r\n TimeForYou.Utilities.SetupPages();\r\n TimeForYou.Utilities.SetupAddressSearch();\r\n setupReviewFields();\r\n setupChoiceCards();\r\n setupChoicePanels();\r\n setupRangeFields();\r\n setupPricingHints();\r\n setupSubmitEventTracking();\r\n window.addEventListener(\"hashchange\", function ()\r\n {\r\n if (getValue(\"ContactEmail\") && (typeof abandonedId !== \"undefined\"))\r\n {\r\n submitAbandonData();\r\n }\r\n });\r\n }\r\n}\r\n\r\nmodule TimeForYou.BookOnlineV2.Validation\r\n{\r\n type ASPEventArgs = {\r\n IsValid: boolean;\r\n }\r\n\r\n export function RequireCleanerFrequency(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[name$='$CleanerFrequency']:checked\").length > 0;\r\n }\r\n\r\n export function RequireCleanerDay(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[name$='$CleanerDay']:checked\").length > 0;\r\n }\r\n\r\n export function RequireCleanerTime(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[name$='$CleanerTime']:checked\").length > 0;\r\n }\r\n\r\n export function RequireCleanerTimeV2(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"#times-required-cards input:checked\").length > 0;\r\n }\r\n\r\n export function RequireHomePets(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[name$='$HomePets']:checked\").length > 0;\r\n }\r\n\r\n export function RequireHomeAlarm(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[name$='$HomeAlarm']:checked\").length > 0;\r\n }\r\n\r\n export function RequireHomeKey(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[name$='$HomeKey']:checked\").length > 0;\r\n }\r\n\r\n export function RequireHomeSmoking(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[name$='$HomeSmoking']:checked\").length > 0;\r\n }\r\n\r\n export function RequireHomeChildren(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[name$='$HomeChildren']:checked\").length > 0;\r\n }\r\n\r\n export function ServicesRequired(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"#services-required-cards input:checked\").length > 0;\r\n }\r\n\r\n export function RequireCleanerFrequencyDetails(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[id$='_CleanerFrequencyOther']:checked\").length === 0 || $(\"[id$='_CleanerFrequencyDetails']\").val() !== \"\";\r\n }\r\n\r\n export function ValidatePricingCleanerRate(_source: Element, args: ASPEventArgs)\r\n {\r\n var cleanerRate = parseFloat($(\"[id$='_PricingCleanerRate']\").val());\r\n args.IsValid = !isNaN(cleanerRate) && cleanerRate >= 0 && ($(\"[id$='_CleanerFrequencyOther']:checked\").length === 1\r\n ? cleanerRate <= parseFloat($(\"[id$='_PricingCleanerRate']\").data(\"oneoffMax\"))\r\n : cleanerRate <= parseFloat($(\"[id$='_PricingCleanerRate']\").data(\"recurringMax\")));\r\n }\r\n\r\n export function ValidatePricingManagementRate(_source: Element, args: ASPEventArgs)\r\n {\r\n var managementRate = parseFloat($(\"[id$='_PricingManagementRate']\").val());\r\n args.IsValid = $(\"[id$='_CleanerFrequencyOther']:checked\").length === 1 || (!isNaN(managementRate) && managementRate > 0 && managementRate <= parseFloat($(\"[id$='_PricingManagementRate']\").attr(\"max\")));\r\n }\r\n\r\n export function RequirePricingBookingFee(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[id$='_CleanerFrequencyOther']:checked\").length === 0 || $(\"[id$='_PricingBookingFee']\").val() !== \"\";\r\n }\r\n\r\n export function RequirePricingManagementRate(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[id$='_CleanerFrequencyOther']:checked\").length !== 0 || $(\"[id$='_PricingManagementRate']\").val() !== \"\";\r\n }\r\n\r\n export function RequirePricingOneOffDiscount(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[id$='_CleanerFrequencyOther']:checked\").length !== 0 || $(\"[id$='_PricingOneOffDiscount']\").val() !== \"\";\r\n }\r\n\r\n export function RequirePricingMinimumFee(_source: Element, args: ASPEventArgs)\r\n {\r\n let totalCharge = 0;\r\n if ($(\"[id$='_CleanerFrequencyOther']:checked\").length === 1)\r\n {\r\n totalCharge += parseFloat($(\"[id$='_PricingBookingFee']\").val());\r\n }\r\n else\r\n {\r\n let mgmtRate = parseFloat($(\"[id$='_PricingManagementRate']\").val());\r\n mgmtRate *= parseFloat($(\"[id$='_CleanerTimeRequired']\").val());\r\n mgmtRate *= $(\"[id$='_CleanerFrequencyWeekly']:checked\").length === 1 ? 13 : 6.5;\r\n totalCharge += mgmtRate;\r\n }\r\n\r\n args.IsValid = totalCharge >= parseFloat($(\"[data-stripe-min]\").data(\"stripe-min\"));\r\n }\r\n\r\n export function RequireHomePetsDetails(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[id$='_HomePetsYes']:checked\").length === 0 || $(\"[id$='_HomePetsDetails']\").val() !== \"\";\r\n }\r\n\r\n export function RequireServicesRequiredDetails(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[id$='_ServicesRequiredOther']:checked\").length === 0 || $(\"[id$='_ServicesRequiredDetails']\").val() !== \"\";\r\n }\r\n\r\n export function RequireOnePhoneNumber(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[id$='_ContactPhoneHome']\").val() !== \"\" || $(\"[id$='_ContactPhoneMobile']\").val() !== \"\";\r\n }\r\n\r\n export function PrivacyCheckRequired(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[id$='_PrivacyCheck']:checked\").length !== 0;\r\n }\r\n\r\n export function TermsCheckRequired(_source: Element, args: ASPEventArgs)\r\n {\r\n args.IsValid = $(\"[id$='_TermsCheck']:checked\").length !== 0;\r\n }\r\n}"]}