// source --> https://www.pricepropharmacy.com/wp-content/plugins/wp-pharmacywire-v5/Blocks/pw-search/build/pw-search-block.js?ver=1777385602 
(()=>{"use strict";const e=window.wp.i18n;document.addEventListener("DOMContentLoaded",(()=>{function t(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}class s{constructor(e,t){this.input=e,this.options=t,this.filtersEnabled=1==wp_pharmacywire.enable_search_filters,this.filterTypes=[{type:"drug",term:"brand"},{type:"drug",term:"generic"},{type:"condition",term:"condition"},{type:"all",term:"all"}],this.originalValue="",this.allSuggestions={},this.currentSearchTerm="",this.currentDisplayTerm="",this.searchTermHistory=[],this.isSearching=!1,this.init()}init(){this.input.addEventListener("input",function(e,t){let s;return function(...i){const r=this;clearTimeout(s),s=setTimeout((()=>e.apply(r,i)),t)}}(this.onInput.bind(this),this.options.delay)),this.input.addEventListener("keydown",this.onKeyDown.bind(this)),this.input.addEventListener("blur",this.onBlur.bind(this)),this.input.addEventListener("focus",this.onFocus.bind(this)),this.createDropdown(),document.addEventListener("click",this.onDocumentClick.bind(this),!0)}createDropdown(){this.dropdown=document.createElement("ul"),this.dropdown.classList.add("autocomplete-dropdown"),this.input.parentNode.appendChild(this.dropdown)}showDropdown(){this.dropdown.classList.contains("visible")||this.dropdown.classList.add("visible")}onInput(e){const s=e.target.value,i=t(s);i.length<this.options.minLength?this.clearDropdown():this.fetchSuggestions(i,s)}onKeyDown(e){const t=Array.from(this.dropdown.querySelectorAll("li")),s=this.dropdown.querySelector(".active"),i=e=>e&&!e.classList.contains("filter-results")&&!e.classList.contains("filter-item")&&!e.classList.contains("inactive-item")&&!e.querySelector(".filter-item")&&null!==e.offsetParent,r=t.filter(i);if("ArrowDown"===e.key){e.preventDefault();let n=null;if(s){for(let e=t.indexOf(s)+1;e<t.length;e++)if(i(t[e])){n=t[e];break}n&&(s.classList.remove("active"),n.classList.add("active"),this.updateInputValue(n.dataset.suggestion||""),n.scrollIntoView({block:"nearest"}))}else if(r.length>0){const e=r[0];e&&(e.classList.add("active"),this.updateInputValue(e.dataset.suggestion||""),e.scrollIntoView({block:"nearest"}))}}else if("ArrowUp"===e.key){e.preventDefault();let r=null;if(s){for(let e=t.indexOf(s)-1;e>=0;e--)if(i(t[e])){r=t[e];break}r&&(s.classList.remove("active"),r.classList.add("active"),this.updateInputValue(r.dataset.suggestion||""),r.scrollIntoView({block:"nearest"}))}}else if("ArrowLeft"===e.key)e.preventDefault(),!this.isSearching&&this.filtersEnabled&&this.navigateFilters("previous");else if("ArrowRight"===e.key)e.preventDefault(),!this.isSearching&&this.filtersEnabled&&this.navigateFilters("next");else if("Enter"===e.key&&s&&i(s))e.preventDefault(),this.selectItem(s);else if("Enter"===e.key){const e=this.input.value.trim(),t=(this.allSuggestions[this.currentSearchTerm]?.condition||[]).find((t=>t.name.toLowerCase()===e.toLowerCase()));t?this.performConditionSearch(t.name):e.length>=this.options.minLength&&this.input.closest("form").submit()}else"Escape"===e.key&&(this.clearDropdown(),this.input.value=this.originalValue)}onDocumentClick(e){this.input.contains(e.target)||this.dropdown.contains(e.target)||this.clearDropdown()}onBlur(e){setTimeout((()=>{const e=document.activeElement;e&&e.classList.contains("filter-item")||this.input.contains(e)||this.dropdown.contains(e)||this.clearDropdown()}),150)}onFocus(e){if(this.input.value.length>=this.options.minLength){const e=this.input.value,s=t(e);this.fetchSuggestions(s,e)}}async searchWordPressContent(e){await pw_session.nonceReady;const t=new FormData;return t.append("r","search-wordpress-content"),t.append("search_term",e),t.append("pw_nonce",pw_session.nonce),fetch(`${wp_pharmacywire.plugin_url}JsonApi/request_json.php`,{method:"POST",body:t}).then((e=>e.json())).then((e=>e.success?e.data.results:null)).catch((e=>null))}renderWordPressResults(e,t){const s=new RegExp(`(\\b\\w*${t}\\w*\\b)`,"gi"),i=new RegExp(`(${t})`,"gi"),r=`<b class="${this.options.highlightClass}">$1</b>`;e.forEach((e=>{const t=document.createElement("li");t.classList.add("wordpress-result","search-result"),t.dataset.url=e.url;const n=document.createElement("div");n.classList.add("wp-result-title"),n.textContent=e.title,t.appendChild(n);const o=document.createElement("div");o.classList.add("wp-result-excerpt"),o.innerHTML=e.excerpt.replace(s,(e=>`<span class="highlight-word">${e.replace(i,r)}</span>`)),t.appendChild(o);const l=document.createElement("span");l.classList.add("page-indicator","indicator"),l.textContent="page",t.appendChild(l),t.addEventListener("mousedown",(e=>{e.preventDefault(),this.selectItem(t)})),t.addEventListener("touchstart",(e=>{e.preventDefault(),this.selectItem(t)}),{passive:!0}),t.addEventListener("mouseover",(()=>this.setActiveItem(t))),this.dropdown.appendChild(t),this.showDropdown()}))}updateSearchTermHistory(e,t=20){const s=this.searchTermHistory.indexOf(e);if(s>-1&&this.searchTermHistory.splice(s,1),this.searchTermHistory.push(e),this.searchTermHistory.length>t){const e=this.searchTermHistory.shift();delete this.allSuggestions[e]}}getResultCount(e,t,s=""){if(s=s||this.currentSearchTerm,!this.allSuggestions[s]||!this.allSuggestions[s][e])return 0;const i=this.allSuggestions[s][e],r=i.filter((e=>void 0===e.score||0!==e.score)),n=i.filter((e=>0===e.score));let o=r;return 0===r.length&&n.length>0&&(o=n),"all"===t?o.length:"brand"===t||"generic"===t?o.filter((e=>"brand"===t?!e.generic||"0"===e.generic||0===e.generic:"generic"===t&&("1"===e.generic||1===e.generic))).length:"condition"===e?o.length:0}updateResultsCountByType(t){const s=this.dropdown.querySelector(".filter-results");if(!s)return;if(!t||"object"!=typeof t)return;const i=s.querySelector(".filter-item.all"),r=s.querySelectorAll(".filter-item:not(.all):not(.website)");let n=0;if(r.forEach((e=>{const t=e.dataset.filterType,s=e.dataset.filterTerm,i=this.getResultCount(t,s,this.currentSearchTerm);n+=i;const r=e.querySelector(".count")||document.createElement("span");r.className="count",r.textContent=i,e.querySelector(".count")||e.appendChild(r),e.style.display=0===i?"none":""})),i){const t=["condition"];let s=0;if(this.allSuggestions[this.currentSearchTerm]&&this.allSuggestions[this.currentSearchTerm].drug){const e=this.allSuggestions[this.currentSearchTerm].drug,t=e.filter((e=>void 0===e.score||0!==e.score)),i=e.filter((e=>0===e.score));s=t.length>0?t.length:i.length}let r=0;t.forEach((e=>{r+=this.getResultCount(e,"all",this.currentSearchTerm)})),n=s+r;const o=i.querySelector(".count")||document.createElement("span");o.className="count",o.textContent=n,i.textContent=(0,e.__)("All","pharmacywire"),i.appendChild(o)}}fetchSuggestions(t,s=null){const i=s||t,r=new FormData(this.input.closest("form")),n=this.input;if(this.clearDropdown(!0),t.length&&!this.allSuggestions[t])this.currentSearchTerm=t,this.currentDisplayTerm=i,n.classList.add("loading"),fetch(`${wp_pharmacywire.plugin_url}search.php`,{method:"POST",body:r}).then((e=>(n.classList.remove("loading"),e.json()))).then((s=>{if(this.clearDropdown(),this.dropdown.classList.add("visible"),!s["drug-lookup-results"]||0===Object.keys(s["drug-lookup-results"]).length){const s=document.createElement("li");s.classList.add("no-results"),s.textContent=(0,e.__)("No product related matches found. ","pharmacywire");const i=document.createElement("a");return i.href="#",i.textContent=(0,e.__)("Search entire website instead?","pharmacywire"),i.classList.add("search-website-link"),i.addEventListener("click",(e=>{e.preventDefault(),this.doWordPressSearch()})),s.appendChild(i),this.dropdown.appendChild(s),this.showDropdown(),void(this.allSuggestions[t]={})}Object.keys(this.allSuggestions).length>5e3&&(this.allSuggestions={}),this.allSuggestions[t]=s["drug-lookup-results"],this.renderAllSuggestions(s["drug-lookup-results"],t,i),this.filtersEnabled&&this.updateResultsCountByType(this.allSuggestions[t])})).finally((()=>{this.updateSearchTermHistory(t),n.classList.remove("loading")})).catch((t=>{console.error("Error fetching suggestions:",t),this.clearDropdown(!0),this.dropdown.classList.add("visible");const s=document.createElement("li");s.classList.add("error-results"),s.textContent=(0,e.__)("Error fetching results","pharmacywire"),this.dropdown.appendChild(s)}));else if(this.allSuggestions[t]){if(this.currentSearchTerm=t,this.currentDisplayTerm=i,this.clearDropdown(!0),this.dropdown.classList.add("visible"),!Object.keys(this.allSuggestions[t]).some((e=>this.allSuggestions[t][e]&&this.allSuggestions[t][e].length>0))){this.filtersEnabled;const t=document.createElement("li");return t.classList.add("no-results"),t.textContent=(0,e.__)("No results found.","pharmacywire"),void this.dropdown.appendChild(t)}this.renderAllSuggestions(this.allSuggestions[t],t,i),this.filtersEnabled&&this.updateResultsCountByType(this.allSuggestions[t])}}createFilterItem(t){const s=document.createElement("button");return s.type="button",s.classList.add("filter-item",t.type,t.term),s.dataset.filterType=t.type,s.dataset.filterTerm=t.term,s.textContent=(0,e.__)(t.term.charAt(0).toUpperCase()+t.term.slice(1),"pharmacywire"),s.addEventListener("mousedown",(e=>{e.preventDefault(),e.stopPropagation()})),s.addEventListener("click",(e=>{if(e.preventDefault(),e.stopPropagation(),!this.isSearching)if(this.dropdown.querySelectorAll(".filter-item").forEach((e=>{e.classList.remove("active")})),this.dropdown.querySelectorAll("li.active").forEach((e=>{e.classList.remove("active")})),s.classList.add("active"),"all"===t.term){if(this.dropdown.querySelectorAll("li.search-result, li.no-results, li.no-results-subhead").forEach((e=>e.remove())),this.dropdown.classList.add("visible"),this.allSuggestions[this.currentSearchTerm])for(const e in this.allSuggestions[this.currentSearchTerm])this.allSuggestions[this.currentSearchTerm][e]&&this.allSuggestions[this.currentSearchTerm][e].length>0&&this.addResultItems(this.allSuggestions[this.currentSearchTerm][e],this.currentSearchTerm,e);this.filtersEnabled&&this.updateResultsCountByType(this.allSuggestions[this.currentSearchTerm])}else this.filterResults(t)})),s}addFilterItems(t){this.dropdown.querySelectorAll(".filter-item, .filter-results").forEach((e=>e.remove()));const s=document.createElement("li");s.classList.add("filter-results");const i=document.createElement("div");i.classList.add("filter-label"),i.textContent=(0,e.__)("Filter results by:","pharmacywire"),i.addEventListener("mousedown",(e=>{e.preventDefault(),e.stopPropagation()})),i.addEventListener("click",(e=>{e.stopPropagation(),e.preventDefault()})),s.appendChild(i),this.filterTypes.forEach((e=>{s.appendChild(this.createFilterItem(e))})),s.addEventListener("click",(e=>{e.stopPropagation(),e.preventDefault()})),s.addEventListener("mousedown",(e=>{e.preventDefault(),e.stopPropagation()})),this.dropdown.appendChild(s)}navigateFilters(e){if(this.isSearching||!this.filtersEnabled)return;const t=Array.from(this.dropdown.querySelectorAll(".filter-item")).filter((e=>"none"!==e.style.display));if(0===t.length)return;const s=this.dropdown.querySelector(".filter-item.active");let i,r=s?t.indexOf(s):-1;"next"===e?i=(r+1)%t.length:(r=s?t.indexOf(s):t.length-1,i=r<=0?t.length-1:r-1);const n=t[i];if(n){this.dropdown.querySelectorAll(".filter-item").forEach((e=>{e.classList.remove("active")})),this.dropdown.querySelectorAll("li.active").forEach((e=>{e.classList.remove("active")})),n.classList.add("active");const e=n.dataset.filterType,t=n.dataset.filterTerm;if("all"===t){if(this.dropdown.querySelectorAll("li.search-result, li.no-results").forEach((e=>e.remove())),this.allSuggestions[this.currentSearchTerm])for(const e in this.allSuggestions[this.currentSearchTerm])this.allSuggestions[this.currentSearchTerm][e]&&this.allSuggestions[this.currentSearchTerm][e].length>0&&this.addResultItems(this.allSuggestions[this.currentSearchTerm][e],this.currentSearchTerm,e);this.filtersEnabled&&this.updateResultsCountByType(this.allSuggestions[this.currentSearchTerm])}else this.filterResults({type:e,term:t})}}doWordPressSearch(){this.isSearching=!0,this.updateFilterButtonsState();const t=document.createElement("li");t.classList.add("loading-results"),t.textContent=(0,e.__)("Searching website content...","pharmacywire"),this.dropdown.appendChild(t),this.dropdown.classList.add("visible"),this.dropdown.querySelectorAll(".no-results",".wp-search-no-results").forEach((e=>e.remove())),this.searchWordPressContent(this.currentSearchTerm).then((t=>{if(!t||0===t.length){const t=document.createElement("li");return t.classList.add("no-results","wp-search-no-results"),t.textContent=(0,e.__)("No page content found.","pharmacywire"),void this.dropdown.appendChild(t)}this.renderWordPressResults(t,this.currentSearchTerm)})).finally((()=>{const e=this.dropdown.querySelector(".loading-results");e&&e.remove(),this.dropdown.classList.add("visible"),this.isSearching=!1,this.updateFilterButtonsState()}))}filterResults(t){if(!this.isSearching&&this.filtersEnabled)if(this.dropdown.querySelectorAll("li.search-result, li.no-results").forEach((e=>e.remove())),this.dropdown.classList.add("visible"),this.dropdown.querySelector(".filter-results")||this.addFilterItems(t.type),"wordpress"!==t.type)if(this.allSuggestions[this.currentSearchTerm]&&this.allSuggestions[this.currentSearchTerm][t.type]){const e=this.allSuggestions[this.currentSearchTerm][t.type].filter((e=>!("brand"!==t.term||e.generic&&"0"!==e.generic&&0!==e.generic)||!("generic"!==t.term||!e.generic||"1"!==e.generic&&1!==e.generic)||"condition"===t.type||"all"===t.term)),s=e.filter((e=>void 0===e.score||0!==e.score)),i=e.filter((e=>0===e.score));let r=s;0===s.length&&i.length>0&&(r=i),this.renderFilteredItems(r,t.type,t.term)}else{const t=document.createElement("li");t.classList.add("no-results"),t.textContent=(0,e.__)("No results found.","pharmacywire");const s=this.dropdown.querySelector(".filter-results");s?this.dropdown.insertBefore(t,s):this.dropdown.appendChild(t)}else this.doWordPressSearch()}addResultItems(t,s,i){if(!t||0===t.length)return;const r=Array.isArray(t)?t:[],n=r.filter((e=>void 0===e.score||0!==e.score)),o=r.filter((e=>0===e.score));let l=n,a=!1;if(0===n.length&&o.length>0&&(l=o,a=!0),0===l.length){const t=document.createElement("li");t.classList.add("no-results"),t.textContent=(0,e.__)("No results found.","pharmacywire");const s=this.dropdown.querySelector(".filter-results");return void(s?this.dropdown.insertBefore(t,s):this.dropdown.appendChild(t))}if(a){this.dropdown.querySelectorAll(".no-results-subhead").forEach((e=>e.remove()));const t=document.createElement("li");t.classList.add("no-results-subhead","inactive-item");const i=s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;");t.innerHTML=(0,e.__)("No results were found for","pharmacywire")+' "'+i+'". '+(0,e.__)("Did you mean:","pharmacywire");const r=this.dropdown.querySelector(".filter-results");r?this.dropdown.insertBefore(t,r):this.dropdown.appendChild(t)}const c=new RegExp(`(\\b\\w*${s}\\w*\\b)`,"gi"),d=new RegExp(`(${s})`,"gi"),h=`<b class="${this.options.highlightClass}">$1</b>`;this.dropdown.querySelector(".filter-results"),l.forEach((e=>{const t=document.createElement("li");t.dataset.suggestion=e.name,t.dataset.drug_id=e.drug_id;const s=document.createElement("span");if(s.className="search-suggestion",s.innerHTML=e.name.replace(c,(e=>`<span class="highlight-word">${e.replace(d,h)}</span>`)),t.appendChild(s),"drug"===i)if(t.dataset.drug_id=e.drug_id||"",!e.generic||"1"!==e.generic&&1!==e.generic){t.classList.add("brand");const e=document.createElement("span");e.classList.add("brand-indicator","indicator"),e.textContent="brand",t.appendChild(e)}else{t.classList.add("generic");const e=document.createElement("span");e.classList.add("generic-indicator","indicator"),e.textContent="generic",t.appendChild(e)}else if("condition"===i){t.classList.add("condition");const e=document.createElement("span");e.classList.add("condition-indicator","indicator"),e.textContent="condition",t.appendChild(e)}t.classList.add(`${i}-result`,"search-result"),t.addEventListener("mousedown",(e=>{e.preventDefault(),this.selectItem(t)}));const r=this.dropdown.querySelector(".filter-results");r?this.dropdown.insertBefore(t,r):this.dropdown.appendChild(t)}))}renderFilteredItems(t,s,i){const r=t.filter((e=>void 0===e.score||0!==e.score)),n=t.filter((e=>0===e.score));let o=r,l=!1;if(0===r.length&&n.length>0&&(o=n,l=!0),!o||0===o.length){this.dropdown.querySelectorAll("li.search-result, li.no-results").forEach((e=>e.remove())),this.dropdown.classList.add("visible");const t=document.createElement("li");return t.classList.add("no-results"),t.textContent=(0,e.__)("No results found.","pharmacywire"),void this.dropdown.appendChild(t)}if(l){this.dropdown.querySelectorAll(".no-results-subhead").forEach((e=>e.remove()));const t=document.createElement("li");t.classList.add("no-results-subhead","inactive-item");const s=this.currentSearchTerm.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;");t.innerHTML=(0,e.__)("No results were found for","pharmacywire")+' "'+s+'". '+(0,e.__)("Did you mean:","pharmacywire");const i=this.dropdown.querySelector(".filter-results");i?this.dropdown.insertBefore(t,i):this.dropdown.appendChild(t)}const a=new RegExp(`(\\b\\w*${this.currentSearchTerm}\\w*\\b)`,"gi"),c=new RegExp(`(${this.currentSearchTerm})`,"gi"),d=`<b class="${this.options.highlightClass}">$1</b>`;o.forEach((e=>{const t=document.createElement("li");t.dataset.suggestion=e.name,t.classList.add(`${s}-result`,"search-result");const r=document.createElement("span");r.className="search-suggestion",r.innerHTML=e.name.replace(a,(e=>`<span class="highlight-word">${e.replace(c,d)}</span>`)),t.appendChild(r),[i].forEach((e=>{t.classList.add(e);const s=document.createElement("span");s.classList.add(`${e}-indicator`,"indicator"),s.textContent=e,t.appendChild(s)})),t.addEventListener("mousedown",(e=>{e.preventDefault(),this.selectItem(t)})),t.addEventListener("touchstart",(e=>{e.preventDefault(),this.selectItem(t)}),{passive:!0}),t.addEventListener("mouseover",(()=>this.setActiveItem(t))),t.addEventListener("touchstart",(()=>this.setActiveItem(t)),{passive:!0});const n=this.dropdown.querySelector(".filter-results");n?this.dropdown.insertBefore(t,n):this.dropdown.appendChild(t)}))}renderAllSuggestions(e,t,s=null){this.clearDropdown(),this.filtersEnabled&&this.addFilterItems("all");const i=e.drug&&e.drug.length>0,r=e.condition&&e.condition.length>0,n=i&&e.drug.every((e=>0===e.score))&&r;for(const s in e)if(e[s]&&e[s].length>0){if("drug"===s&&n)continue;this.addResultItems(e[s],t,s)}this.dropdown.classList.add("visible")}clearDropdown(e=!1){this.dropdown.innerHTML="",e||this.dropdown.classList.remove("visible")}clearResults(){this.dropdown.querySelectorAll("li.search-result, li.no-results").forEach((e=>e.remove())),this.dropdown.classList.remove("visible")}selectItem(e){if(this.clearDropdown(),e.classList.contains("wordpress-result")&&e.dataset.url)return void(window.location.href=e.dataset.url);if(e.classList.contains("condition-result")){const t=e.dataset.suggestion||"";return void this.performConditionSearch(t)}const t=(e.dataset.suggestion||"").replace(/\s*\([\s\S]*\)/g,"").trim();this.input.value=t,this.input.closest("form").submit()}performConditionSearch(e){const t=this.input.closest("form");if(!t)return;const s=document.createElement("input");s.type="hidden",s.name="condition",s.value=e,t.appendChild(s),this.input.disabled=!0,t.submit(),setTimeout((()=>{this.input.disabled=!1}),1e3)}setActiveItem(e){if(e.classList.contains("filter-results")||e.classList.contains("filter-item")||e.classList.contains("inactive-item")||e.querySelector(".filter-item"))return;const t=this.dropdown.querySelector(".active");t&&t.classList.remove("active"),e.classList.add("active");const s=e.dataset.suggestion||"";this.updateInputValue(s)}updateInputValue(e){this.originalValue||(this.originalValue=this.input.value),this.input.value=e}updateFilterButtonsState(){this.dropdown.querySelectorAll(".filter-item").forEach((e=>{this.isSearching?(e.classList.add("disabled"),e.setAttribute("disabled","true")):(e.classList.remove("disabled"),e.removeAttribute("disabled"))}))}}document.querySelectorAll(".pw-search-block-autocomplete").forEach((e=>{const t=e.querySelector("input[name=drugName]");new s(t,{delay:500,highlightClass:"highlight-match",minLength:3})}))}))})();