{"version":3,"sources":["ts/dbs.auto.ts"],"names":["TimeForYou","AutoComplete","rateLimitDelay","let","ajax","timeout","initiateSearch","ev","clearTimeout","readyState","XMLHttpRequest","DONE","abort","window","setInterval","sendSearch","ctrl","target","inputCtrl","value","length","oldItems","parentElement","getElementsByTagName","i","remove","addEventListener","completeSearch","status","items","JSON","parse","responseText","d","autoWrapper","autoList","document","createElement","listItem","innerText","selectSearch","appendChild","open","ccUrl","setRequestHeader","send","stringify","query","submitSearchFromKey","key","widget","recurseUntilClass","click","item","elem","cssClass","classList","contains","Initialise","searchWidgets","getElementsByClassName","box"],"mappings":"aAEA,IAAOA,WAAP,CAAA,SAAOA,GAAW,CAAAC,EAAAD,EAAAC,eAAAD,EAAAC,aAAY,IAE1B,MAAMC,EAAiB,IACvBC,IAAIC,EACAC,EAEJ,SAASC,EAAeC,GAEK,KAAA,IAAd,GAEPC,aAAaH,CAAO,EAGF,KAAA,IAAX,GAA0BD,EAAKK,aAAeC,eAAeC,MAEpEP,EAAKQ,MAAK,EAGdP,EAAUQ,OAAOC,YAAY,KAAMC,IAkBnBC,EAlB8BT,EAAGU,OAyBjD,GALyB,KAAA,IAAd,GAEPT,aAAaH,CAAO,EAGnBW,EAAL,CAKA,IAAME,EAAYF,EAElB,GAAIE,EAAUC,MAAMC,OAAS,EAA7B,CAEI,IACMC,EADcH,EAAUI,cACDC,qBAAqB,IAAI,EAEtD,IAAKpB,IAAIqB,EAAI,EAAGA,EAAIH,EAASD,OAAQI,CAAC,GAElCH,EAASG,GAAGC,OAAM,C,MAK1BrB,EAAO,IAAIM,gBACNgB,iBAAiB,mBAAoB,KAAMC,IAS5BX,EAT2CA,EAW/D,GAAIZ,EAAKK,aAAeC,eAAeC,MAAwB,MAAhBP,EAAKwB,OAApD,CAKA,IAAMC,EAAQC,KAAKC,MAAM3B,EAAK4B,YAAY,EAAEC,EAGtCC,EAAelB,EAA0BM,cACzCD,EAAWa,EAAYX,qBAAqB,IAAI,EAEtD,IAAKpB,IAAIqB,EAAI,EAAGA,EAAIH,EAASD,OAAQI,CAAC,GAElCH,EAASG,GAAGC,OAAM,EAGtB,GAAqB,IAAjBI,EAAMT,OAAV,CAKA,IAAMe,EAAWC,SAASC,cAAc,IAAI,EAE5C,IAAKlC,IAAIqB,EAAI,EAAGA,EAAIK,EAAMT,OAAQI,CAAC,GACnC,CACI,IAAMc,EAAWF,SAASC,cAAc,IAAI,EAC5CC,EAASC,UAAYV,EAAML,GAC3Bc,EAASZ,iBAAiB,QAASc,CAAY,EAC/CL,EAASM,YAAYH,CAAQ,C,CAGjCJ,EAAYO,YAAYN,CAAQ,C,EA1CmC,CAAC,EACpE/B,EAAKsC,KAAK,OAAWC,MAAH,2DAAoE,CAAA,CAAI,EAC1FvC,EAAKwC,iBAAiB,SAAU,kBAAkB,EAClDxC,EAAKwC,iBAAiB,eAAgB,iCAAiC,EACvExC,EAAKyC,KAAKf,KAAKgB,UAAU,CACrBC,MAAO7B,EAAUC,K,CACpB,CAAC,C,CAnDqD,EAAGjB,CAAc,CAC5E,CAEA,SAAS8C,EAAoBzC,GAEV,UAAXA,EAAG0C,MAEGC,EAASC,EAAkB5C,EAAGU,OAAuB,uBAAuB,IAClEiC,EAAO5B,eAKR4B,EAAO5B,cAAcC,qBAAqB,OAAO,EAAE,GAC3D6B,MAAK,CAEpB,CA0EA,SAASZ,EAAajC,GAElB,IAAM8C,EAAO9C,EAAGU,OACViC,EAASC,EAAkBE,EAAM,uBAAuB,EAC9D,GAAKH,GAAWA,EAAO5B,cAAvB,CAIY4B,EAAO3B,qBAAqB,OAAO,EAAE,GAE7CJ,MAAQkC,EAAKd,UAFjB,IAIMlB,EAAW6B,EAAO3B,qBAAqB,IAAI,EACjD,IAAKpB,IAAIqB,EAAI,EAAGA,EAAIH,EAASD,OAAQI,CAAC,GAElCH,EAASG,GAAGC,OAAM,EAGPyB,EAAO5B,cAAcC,qBAAqB,OAAO,EAAE,GAC3D6B,MAAK,C,CAChB,CAEA,SAASD,EAAkBG,EAA0BC,GAEjD,OAAY,MAARD,EAEO,KAGPA,EAAKE,UAAUC,SAASF,CAAQ,EAEzBD,EAGJH,EAAkBG,EAAKhC,cAAeiC,CAAQ,CACzD,CAEgBtD,EAAAyD,WAAhB,WAEI,IAAMC,EAAgBvB,SAASwB,uBAAuB,uBAAuB,EAE7E,IAAKzD,IAAIqB,EAAI,EAAGA,EAAImC,EAAcvC,OAAQI,CAAC,GAC3C,CACI,IACMqC,EADSF,EAAcnC,GACVD,qBAAqB,OAAO,EAAE,GAEjDsC,EAAInC,iBAAiB,QAASpB,CAAc,EAC5CuD,EAAInC,iBAAiB,UAAWsB,CAAmB,C,CAE3D,CA7J0B,CA8J7B,EA9JMhD,WAAAA,YAAU,EAAA,EAgKjBa,OAAOa,iBAAiB,OAAQ1B,WAAWC,aAAayD,UAAU","file":"dbs.auto.js","sourcesContent":["declare var ccUrl: string;\r\n\r\nmodule TimeForYou.AutoComplete\r\n{\r\n const rateLimitDelay = 100;\r\n let ajax: XMLHttpRequest;\r\n let timeout: number;\r\n\r\n function initiateSearch(ev: KeyboardEvent)\r\n {\r\n if (typeof (timeout) !== \"undefined\")\r\n {\r\n clearTimeout(timeout);\r\n }\r\n\r\n if (typeof (ajax) !== \"undefined\" && ajax.readyState !== XMLHttpRequest.DONE)\r\n {\r\n ajax.abort();\r\n }\r\n\r\n timeout = window.setInterval(() => sendSearch(ev.target), rateLimitDelay);\r\n }\r\n\r\n function submitSearchFromKey(ev: KeyboardEvent)\r\n {\r\n if (ev.key === \"Enter\")\r\n {\r\n const widget = recurseUntilClass(ev.target as HTMLElement, \"franchise-search-auto\");\r\n if (!widget || !widget.parentElement)\r\n {\r\n return;\r\n }\r\n\r\n const button = widget.parentElement.getElementsByTagName(\"input\")[1] as HTMLInputElement;\r\n button.click();\r\n }\r\n }\r\n\r\n function sendSearch(ctrl: EventTarget | null)\r\n {\r\n if (typeof (timeout) !== \"undefined\")\r\n {\r\n clearTimeout(timeout);\r\n }\r\n\r\n if (!ctrl)\r\n {\r\n return;\r\n }\r\n\r\n const inputCtrl = ctrl as HTMLInputElement;\r\n\r\n if (inputCtrl.value.length < 3)\r\n {\r\n const autoWrapper = inputCtrl.parentElement as HTMLDivElement;\r\n const oldItems = autoWrapper.getElementsByTagName(\"ul\");\r\n\r\n for (let i = 0; i < oldItems.length; i++)\r\n {\r\n oldItems[i].remove();\r\n }\r\n return;\r\n }\r\n\r\n ajax = new XMLHttpRequest();\r\n ajax.addEventListener(\"readystatechange\", () => completeSearch(ctrl));\r\n ajax.open(\"POST\", `${ccUrl}/App_Services/SearchAutocomplete.asmx/AutoCompleteSearch`, true);\r\n ajax.setRequestHeader(\"accept\", \"application/json\");\r\n ajax.setRequestHeader(\"content-type\", \"application/json; charset=UTF-8\");\r\n ajax.send(JSON.stringify({\r\n query: inputCtrl.value\r\n }));\r\n }\r\n\r\n function completeSearch(ctrl: EventTarget)\r\n {\r\n if (ajax.readyState !== XMLHttpRequest.DONE || ajax.status !== 200)\r\n {\r\n return;\r\n }\r\n\r\n const items = JSON.parse(ajax.responseText).d as string[];\r\n\r\n\r\n const autoWrapper = (ctrl as HTMLInputElement).parentElement as HTMLDivElement;\r\n const oldItems = autoWrapper.getElementsByTagName(\"ul\");\r\n\r\n for (let i = 0; i < oldItems.length; i++)\r\n {\r\n oldItems[i].remove();\r\n }\r\n\r\n if (items.length === 0)\r\n {\r\n return;\r\n }\r\n\r\n const autoList = document.createElement(\"ul\") as HTMLUListElement;\r\n\r\n for (let i = 0; i < items.length; i++)\r\n {\r\n const listItem = document.createElement(\"li\") as HTMLLIElement;\r\n listItem.innerText = items[i];\r\n listItem.addEventListener(\"click\", selectSearch);\r\n autoList.appendChild(listItem);\r\n }\r\n\r\n autoWrapper.appendChild(autoList);\r\n }\r\n\r\n function selectSearch(ev: Event)\r\n {\r\n const item = ev.target as HTMLLIElement;\r\n const widget = recurseUntilClass(item, \"franchise-search-auto\");\r\n if (!widget || !widget.parentElement)\r\n {\r\n return;\r\n }\r\n const box = widget.getElementsByTagName(\"input\")[0] as HTMLInputElement;\r\n\r\n box.value = item.innerText;\r\n\r\n const oldItems = widget.getElementsByTagName(\"ul\");\r\n for (let i = 0; i < oldItems.length; i++)\r\n {\r\n oldItems[i].remove();\r\n }\r\n\r\n const button = widget.parentElement.getElementsByTagName(\"input\")[1] as HTMLInputElement;\r\n button.click();\r\n }\r\n\r\n function recurseUntilClass(elem: HTMLElement | null, cssClass: string): HTMLElement | null\r\n {\r\n if (elem == null)\r\n {\r\n return null;\r\n }\r\n\r\n if (elem.classList.contains(cssClass))\r\n {\r\n return elem;\r\n }\r\n\r\n return recurseUntilClass(elem.parentElement, cssClass);\r\n }\r\n\r\n export function Initialise()\r\n {\r\n const searchWidgets = document.getElementsByClassName(\"franchise-search-auto\");\r\n\r\n for (let i = 0; i < searchWidgets.length; i++)\r\n {\r\n const widget = searchWidgets[i] as HTMLDivElement;\r\n const box = widget.getElementsByTagName(\"input\")[0] as HTMLInputElement;\r\n\r\n box.addEventListener(\"keyup\", initiateSearch);\r\n box.addEventListener(\"keydown\", submitSearchFromKey);\r\n }\r\n }\r\n}\r\n\r\nwindow.addEventListener(\"load\", TimeForYou.AutoComplete.Initialise);"]}