function Widgets(){var self=this self.widgets=[] self.widgetDependencyMaxRetry=6 self.widgetDependencyTimeout=125 function checkForDependency(widgetName,dependency,trys,maxRetry,timeout,resolve,reject){console.debug(widgetName+' is checking for dependency '+dependency) if(trys>=maxRetry){reject(dependency) return} setTimeout(function(){if(window.hasOwnProperty(dependency)===false){trys+=1 checkForDependency(widgetName,dependency,trys,maxRetry,timeout,resolve,reject)}else{resolve()}},timeout)} function generateDependencyPromises(name,dependencies){var promises=[] dependencies.forEach(function(dependency){var promise=new Promise(function(resolve,reject){checkForDependency(name,dependency,0,self.widgetDependencyMaxRetry,self.widgetDependencyTimeout,resolve,reject)}) promises.push(promise)}) return promises} function loadWidgets(){self.widgets.forEach(function(widget){var widgetDOMElements=document.querySelectorAll(widget.selector) if(widgetDOMElements.length){var promises=generateDependencyPromises(widget.selector,widget.dependencies) Promise.all(promises).then(function(){if(widget.onInit!==undefined){widget.onInit(widget.selector)} widgetDOMElements.forEach(function(element){widget.callback(element)})}).catch(function(dependency){console.error('Widget '+widget.selector+' is missing the following dependencies '+dependency)});}})} document.addEventListener('DOMContentLoaded',function(){loadWidgets()}) self.publicFunctions={register:function(selector,callback,dependencies,onInit){if(dependencies===undefined){dependencies=[];} self.widgets.push({selector:selector,callback:callback,dependencies:dependencies,onInit:onInit})},init:function(){loadWidgets()},areAvailable:function(){var eventName='sb-widget-js-loaded' var context={'Widgets':self.publicFunctions} try{var event=new CustomEvent(eventName,{detail:context})} catch(error){var event=document.createEvent('CustomEvent') event.initCustomEvent(eventName,true,true,context)} document.dispatchEvent(event);}} return self.publicFunctions} window.Widgets=new Widgets();function SiteBuilderTracking(){var trackEvent=function(name,label,data,reference,defaultScore){var name=name||"" var label=label||"" var data=data||{} var eventDetails={"name":name,"label":label,"custom_data":data} if(reference){eventDetails["reference"]=reference} if(defaultScore){eventDetails["defaultScore"]=defaultScore} emit(eventDetails)} var emit=function(detail){try{var event=new CustomEvent('di_ev',{detail:detail})} catch(error){var event=document.createEvent('CustomEvent') event.initCustomEvent('di_ev',true,true,{detail:detail})} window.dispatchEvent(event);} var getDevice=function(){if(typeof DIDataLayer!=='undefined'){return DIDataLayer.vars.site.experience.general}else{if(window.innerWidth>767&&window.innerWidth<=1024){return"tablet"} if(window.innerWidth>1024){return"Desktop"} return"mobile"}} var getPageLocation=function(){if(typeof DIDataLayer!=='undefined'){var page=DIDataLayer.vars.page.taxonomy switch(page){case'Vehicle Listing':page='VRP' break case'Vehicle Details':page='VDP' break case'Custom Dealer Content':page='Other' break default:} return page}else{var body=document.body if(body.classList.contains('home')){return'Home'} if(body.classList.contains('page-template-page-lightning')||body.classList.contains('page-vehicle-results-page')){return'VRP'} if(body.classList.contains('page-vehicle-display-page')){return'VDP'} if(h1=document.querySelector('h1')){return h1.innerText} return'Other'}} var getSource=function(){var version='' if(typeof window.AdminBuilderData!=='undefined'){version=AdminBuilderData.Version} return{"name":"Site Builder","version":version,"contact":"#feature-support"}} function trackGAEvents(events){window.DIGATRegistry=window.DIGATRegistry||[] DIGATRegistry=[].concat(DIGATRegistry,events)} return{"trackEvent":function(name,label,data,reference,defaultScore){trackEvent(name,label,data,reference,defaultScore)},"trackGAEvents":function(events){trackGAEvents(events)},"getDevice":getDevice,"getPageLocation":getPageLocation,"getSource":getSource}} window.SiteBuilderTracking=SiteBuilderTracking();(function(){if(typeof window.CustomEvent==="function"){return false;} function CustomEvent(event,params){params=params||{bubbles:false,cancelable:false,detail:undefined};var evt=document.createEvent('CustomEvent');evt.initCustomEvent(event,params.bubbles,params.cancelable,params.detail);return evt;} CustomEvent.prototype=window.Event.prototype;window.CustomEvent=CustomEvent;})();if(!Element.prototype.matches) Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector;if(!Element.prototype.closest){Element.prototype.closest=function(s){var el=this;do{if(el.matches(s))return el;el=el.parentElement||el.parentNode;}while(el!==null&&el.nodeType===1);return null;};} (function(){if(typeof NodeList.prototype.forEach==="function")return false;NodeList.prototype.forEach=Array.prototype.forEach;})();!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.ES6Promise=e()}(this,function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function e(t){return"function"==typeof t}function n(t){W=t}function r(t){z=t}function o(){return function(){return process.nextTick(a)}}function i(){return"undefined"!=typeof U?function(){U(a)}:c()}function s(){var t=0,e=new H(a),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function u(){var t=new MessageChannel;return t.port1.onmessage=a,function(){return t.port2.postMessage(0)}}function c(){var t=setTimeout;return function(){return t(a,1)}}function a(){for(var t=0;t'+t),t=t.replace(/(?:\r\n|\r|\n|\t| )srcset=/g," data-lazy-srcset=").replace(/(?:\r\n|\r|\n|\t| )src=/g,' src="'+i+'" data-lazy-src='))),t}(e);t.firstChild;)n.loading||!n.scrolling||void 0===r||!t.firstChild.tagName||"img"!==t.firstChild.tagName.toLowerCase()&&"iframe"!==t.firstChild.tagName.toLowerCase()||r.observe(t.firstChild),e.parentNode.insertBefore(t.firstChild,e);e.parentNode.removeChild(e)} function s(){document.querySelectorAll("noscript."+e).forEach(d),window.matchMedia("print").addListener(function(e){e.matches&&document.querySelectorAll(o.lazyImage+"[data-lazy-src],"+o.lazyIframe+"[data-lazy-src]").forEach(function(e){c(e)})})} /comp|inter/.test(document.readyState)?a(s):"addEventListener"in document?document.addEventListener("DOMContentLoaded",function(){a(s)}):document.attachEvent("onreadystatechange",function(){"complete"===document.readyState&&s()})}("loading-lazy");var DealerInspireCookie=({CreateCookie:function(name,value,days){var expires='';if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires="; expires="+date.toGMTString();}else expires="";if(typeof value=='object'){value=JSON.stringify(value);} document.cookie=escape(name)+"="+escape(value)+expires+"; path=/";},ReadCookie:function(c_name){var c_value=document.cookie;var c_start=c_value.indexOf(" "+c_name+"=");if(c_start==-1){c_start=c_value.indexOf(c_name+"=");} if(c_start==-1){c_value=null;}else{c_start=c_value.indexOf("=",c_start)+1;var c_end=c_value.indexOf(";",c_start);if(c_end==-1){c_end=c_value.length;} c_value=unescape(c_value.substring(c_start,c_end));} return c_value?c_value:null;},EraseCookie:function(name){this.CreateCookie(name,"",-1);}});var SBMenu=(function(){var activeClass='active-menu' function closeSubMenus(menu){const subLevelItems=menu.querySelectorAll('ul.sub-menu > li.menu-item-has-children.'+activeClass+' > button, ul.sub-menu > li.menu-item-has-children.'+activeClass+' > a') for(var i=0;i li.'+activeClass+' > [aria-expanded="true"]')} const topLevelItems=menu.querySelectorAll('ul.nav > li.menu-item-has-children > button, ul.nav > li.menu-item-has-children > a') for(var i=0;igetWidth(lastMoreItem)){popItem(target,lastMoreItem) return maybePopMore(target)} return true} function popItem(target,el){var menuItems=target.menu.children var lastHiddenMenuIndex=(menuItems.length-2)-(el.parentNode.children.length-1) el.parentNode.removeChild(el) menuItems[lastHiddenMenuIndex].style.removeProperty('display')} function manageMoreMenu(target,availableSpace){if(availableSpace===0){return false} if(availableSpace<0){return appendToMore(target)}else{return maybePopMore(target)}} function toggleActiveMenuItem(menu,item){var parent=item.parentNode var grandparent=parent.closest('.'+activeClass) if(parent===grandparent){grandparent=parent.parentNode.closest('.'+activeClass)} var callback=grandparent?closeSubMenus:closeAllMenus if(parent.classList.contains(activeClass)){callback(menu)}else{callback(menu) parent.classList.toggle(activeClass) if(item.getAttribute('aria-expanded')==='false'){item.setAttribute('aria-expanded','true')}else if(item.getAttribute('aria-expanded')==='true'){item.setAttribute('aria-expanded','false')}}} function createA11y(menu){menu.addEventListener('keyup',function(event){if(event.key==='Escape'){closeAllMenus(menu)}}) var topLevelMenuToggles=menu.querySelectorAll('ul:not(.sub-menu) > .menu-item-has-children > [aria-expanded]');topLevelMenuToggles.forEach(function(topLevelMenuitem){topLevelMenuitem.addEventListener('click',function(event){event.preventDefault();toggleActiveMenuItem(menu,event.target);})}) var menuToggles=menu.querySelectorAll('ul.sub-menu .menu-item-has-children > [aria-expanded]') menuToggles.forEach(function(item){if(navigator.userAgent.indexOf("Chrome")!=-1){item.addEventListener('click',function(event){if(event.pointerType!="mouse"){event.preventDefault();toggleActiveMenuItem(menu,event.target)}else{toggleActiveMenuItem(menu,event.target);}})}else{item.addEventListener('pointerdown',function(event){if(event.pointerType!="mouse"){event.preventDefault();toggleActiveMenuItem(menu,event.target)}else{toggleActiveMenuItem(menu,event.target);}})}})} return{target:{},manageMoreMenu:function(){return manageMoreMenu(this.target,checkAvailableSpace(this.target.wrapper))},create:function(target){if(!target.wrapper||!target.menu||target.created){return false} if(target.activeClass){activeClass=target.activeClass} target.more=createMoreMenu(target.menu) createA11y(target.menu) this.target=target this.manageMoreMenu() this.target.created=true return this},closeAllMenus:function(menu){closeAllMenus(menu)}}})();Widgets.register('[data-widget="newVehiclesMegamenu"]',function(context){var menu=context.querySelector('.nav[id^="menu"]') var megaNav=null if(menu){megaNav=SBMenu.create({wrapper:context,menu:menu})} const newVehiclesMegamenu={makes:'.walker--makes',bodies:'.walker--bodies',makesMenus:context.querySelectorAll('.walker--makes.menu-item-has-children > a'),bodiesMenus:context.querySelectorAll('.walker--bodies.menu-item-has-children > a'),disableStockCount:context.hasAttribute('data-disable-count'),algStockDiv:function(){const bodies_menus=context.querySelectorAll('.walker--bodies > ul.sub-menu');const disableStockCount=this.disableStockCount;bodies_menus.forEach(function(el){if(!disableStockCount){var sprites=el.querySelectorAll('.di-vehicle-icon a');sprites.forEach(function(sprite){var algStock=document.createElement('div');algStock.classList.add('alg-stock');algStock.setAttribute('stock-count','');sprite.append(algStock);});}});},activateFirstTab:function(){const firstMakesMenu=context.querySelector(this.makes);firstMakesMenu.classList.add('active-menu') const firstBodiesMenu=firstMakesMenu.querySelector(this.bodies) if(firstBodiesMenu){firstBodiesMenu.classList.add('active-menu')}},addMakesTabListener:function(){var self=this for(var i=0;i .sub-menu') const rightColumn=context.querySelector('.walker--bodies.active-menu > .sub-menu') const rightColumnTabs=context.querySelector('.walker--bodies.active-menu > a') if(!leftColumn||!rightColumn||!rightColumnTabs){return} leftColumn.style.minHeight='initial';rightColumn.style.minHeight='initial';leftColumnHeight=leftColumn.offsetHeight tabsHeight=rightColumnTabs.offsetHeight rightColumnHeight=rightColumn.offsetHeight+tabsHeight if(leftColumnHeight>rightColumnHeight){if(tabsHeight>0){rightColumn.style.minHeight=(leftColumnHeight-tabsHeight)+'px'}else{rightColumn.style.minHeight=leftColumnHeight+'px'}}else{leftColumn.style.minHeight=rightColumnHeight+'px'}},addResizeEvents:function(){var _this=this var throttle var currentWidth=0 window.addEventListener('resize',function(){if(window.innerWidth===currentWidth){return;} currentWidth=window.innerWidth;clearTimeout(throttle) throttle=setTimeout(function(){_this.matchHeights() if(megaNav){megaNav.manageMoreMenu()}},500)})},init:function(){this.algStockDiv() this.activateFirstTab() this.addMakesTabListener() this.addBodyTabListener() this.hideBodyTabsIfSingle() this.matchHeights() this.addResizeEvents()},} newVehiclesMegamenu.init() document.addEventListener('click',function(){if(megaNav){SBMenu.closeAllMenus(context)}}) context.addEventListener('click',function(e){e.stopPropagation()})},['SBMenu']);Widgets.register('.header-item--search-toggle',function(context){var input=context.querySelector('#alg-search') var inputWrapper=context.querySelector('.search-toggle__algolia') var button=context.querySelector('.search-toggle__button') var manageBlur=true;try{input.typeahead.dealerinspire.shouldManage('blur')}catch(err){manageBlur=false} function closeSearch(){button.classList.remove('active') button.setAttribute('aria-pressed','false') input.style.visibility='hidden' inputWrapper.classList.remove('active') if(manageBlur){input.typeahead.isActive=false input.typeahead.dropdown.empty() input.typeahead.dropdown.close()}} function toggleSearch(){if(button.classList.contains('active')){closeSearch()}else{button.classList.add('active') button.setAttribute('aria-pressed','true') inputWrapper.classList.add('active') input.style.visibility='visible' input.focus()}} button.addEventListener('click',function(e){toggleSearch()}) button.addEventListener('keyup',function(e){if([13,32].indexOf(e.keyCode)>-1){e.preventDefault() toggleSearch()}}) document.addEventListener('keyup',function(e){if(27===e.keyCode){if(button.classList.contains('active')){closeSearch()} if(document.activeElement.closest('.header-item--search-toggle')){button.focus()}}}) document.addEventListener('click',function(e){if(!e.target.closest('.header-item--search-toggle')){closeSearch()}})});var ActionBar=function(){var items=[] var closeActions=[] var registerClose=function(action){closeActions.push(action)} var closeAll=function(){closeActions.forEach(function(action){action()}) DI_Modal.triggerClose() deactivateItems()} var deactivateItems=function(){items.forEach(function(item){item.classList.remove('active')})} var activateItem=function(item){item.classList.add('active')} var registerEventListeners=function(){items.forEach(function(item){item.addEventListener('click',function(){if(!item.classList.contains('active')){closeAll() activateItem(item)}})}) document.addEventListener('click',function(e){var modalClose=e.target.closest('.di-modal-close') if(!modalClose)return deactivateItems()});} var initialize=function(){items=document.querySelectorAll('.di-action-bar .bar-item') registerEventListeners()} return{"registerClose":function(action){registerClose(action)},"closeAll":closeAll,"activateItem":function(item){activateItem(item)},"deactivateItems":deactivateItems,"initialize":initialize}} window.ActionBar=ActionBar() Widgets.register('.di-action-bar',function(){},['ActionBar'],function(){ActionBar.initialize()}) if(typeof window.ActionBarTracking=='undefined'){function ActionBarTracking(){function sendActionBarItemClick(e){var item=e.target.closest('.di-action-bar .bar-item') if(!item)return if(e.target.closest('.di-stacks--top'))return var customData={"source":getProductData(),"page_type":SiteBuilderTracking.getPageLocation(),"device":SiteBuilderTracking.getDevice(),"type":getActionBarItemType(item),"button":getButtonData(item)} window.SiteBuilderTracking.trackEvent("click","Trigger Action Bar Item",customData,"https://schemas.dealerinspire.com/action-bar/v1/action-bar-trigger.json#")} function sendActionBarModalClick(e){var modal=e.target.closest('.modal--action-bar') if(!modal)return var button=e.target.closest('a, .button') if(!button)return sendGeneralDirectionsEvent(button) if(button.closest('form'))return var modalPlaceholder=document.querySelector('.di-modal-placeholder') if(modalPlaceholder&&modalPlaceholder.closest('.di-stacks--top'))return var customData={"source":getProductData(),"page_type":SiteBuilderTracking.getPageLocation(),"device":SiteBuilderTracking.getDevice(),"button":getModalButtonData(button,modal),} window.SiteBuilderTracking.trackEvent("click","Trigger Action Bar Item",customData,"https://schemas.dealerinspire.com/action-bar/v1/action-bar-trigger.json")} function sendGeneralDirectionsEvent(button){if(!button.classList.contains('button--get-directions')){return} window.SiteBuilderTracking.trackEvent("click","Directions",{"directions":{"text":"href","platform":SiteBuilderTracking.getDevice()},"platform":SiteBuilderTracking.getDevice()},"https://schemas.dealerinspire.com/roxanne/v1/event/directions/get-directions.json#")} function sendActionBarModalFormSubmit(e){var modal=e.target.closest('.modal--action-bar') if(!modal)return var button=e.target.closest('button[type="submit"]') if(!button)return var form=button.closest('form') var modalPlaceholder=document.querySelector('.di-modal-placeholder') if(modalPlaceholder&&modalPlaceholder.closest('.di-stacks--top'))return var customData={"source":getProductData(),"page_type":SiteBuilderTracking.getPageLocation(),"device":SiteBuilderTracking.getDevice(),"type":getModalType(modal),"form":{"name":getFormName(form,modal),"form_params":getFormParams(form)}} window.SiteBuilderTracking.trackEvent("Form Submission","Trigger Action Bar Form Submission",customData,"https://schemas.dealerinspire.com/action-bar/v1/action-modal-form-submission-trigger.json#")} function getButtonData(button){var buttonData={} var label=button.getAttribute('data-product')||button.innerText||'Custom' buttonData.icon=button.querySelector('svg, i.fa')?true:false buttonData.label=label.trim() buttonData.text=button.innerText.trim() buttonData.href=button.getAttribute('href')||'' return buttonData} function getFormName(form){if(form.class=='keyword-search'){return"Keyword Search"}else{return"Filtered Search"}} function getVehicle(type,year,make,model,title){var vehicle={"type":type||"","year":year||"","make":make||"","model":model||"","title":title||""} return vehicle} function getFormParams(form){var vehicle=getVehicle() if(form.class=='keyword-search'){var value=form.querySelector('input').value vehicle.text=value}else{var selects=form.querySelectorAll('[name]') selects.forEach(function(select){var selectName=select.getAttribute('name').replace('[]','') vehicle[selectName]=select.value})} return vehicle} function getModalButtonData(button,modal){var buttonData=getButtonData(button) if(buttonData.label){buttonData.label=getModalType(modal)+": "+buttonData.label} return buttonData} function getActionBarItemType(button){return button.classList.contains('di-modal')?"modal":"link"} function getModalType(modal){var head=modal.querySelector('.di-modal-head') if(head&&head.innerText){return head.innerText} return"Action Bar Modal"} function getProductData(){return{"name":"Action Bar","version":AdminBuilderData.Version,"contact":"#feature-support"}} function attachEvents(){document.addEventListener("click",function(e){sendActionBarItemClick(e) sendActionBarModalClick(e) sendActionBarModalFormSubmit(e)}) if(filteredSearchButton=document.querySelector('.filtered-search button')){filteredSearchButton.addEventListener("click",function(e){sendActionBarModalFormSubmit(e)})}} return{"attachEvents":attachEvents}} ActionBarTracking().attachEvents()} Widgets.register('[data-widget="block"]',function(){console.log('Blocks widget has loaded Javascript');});Widgets.register('[data-widget="footer-menu-column"]',function(context){var footerMenus=context.querySelectorAll('.menu-column') footerMenus.forEach(function(item,index){var footerHeading=item.querySelector('.menu-heading') footerHeading.addEventListener('click',function(){footerMenus.forEach(function(it,i){if(i===index&&it.classList.contains('menu-column--hideMenus')){it.classList.remove('menu-column--hideMenus') it.classList.add('menu-column--showMenus')}else if(it.classList.contains('menu-column--showMenus')){it.classList.remove('menu-column--showMenus') it.classList.add('menu-column--hideMenus')}})})})});Widgets.register('img.image',function(){console.log('Image widget has loaded Javascript');});Widgets.register('[data-widget="action-bar-desktop"]',function(context){var items=context.querySelectorAll('.bar-item.di-modal') var windowSize=window.innerWidth items.forEach(function(item){var centerX=item.offsetLeft+item.offsetWidth / 2 if(centerX>(windowSize / 2)){if(target=item.getAttribute('href')){target=target.replace(/\./g,'\\\.') var modal=document.querySelector(target) if(modal){var classes=modal.getAttribute('data-modal-classes')||'' modal.setAttribute('data-modal-classes',classes+' modal--corner-right')}}}})});Widgets.register('.bar-item--audio-eye',function(context){if(typeof parent.pagenow!=='undefined'&&parent.pagenow=='dealer-inspire_page_di_action_bar'){context.style.setProperty('display','flex','important');return;} context.style.display='none';context.classList.remove('hide');context.setAttribute('role','button');function callback(mutationsList,observer){mutationsList.forEach(mutation=>{if(mutation.attributeName==='class'){if(mutation.target.classList.contains('ae-launcher')){context.style.display='flex';ActionBar.deactivateItems();}else if(mutation.target.classList.contains('ae-toolbar')){context.style.display='flex';ActionBar.activateItem(context);}}else if(mutation.type==='attributes'){if(mutation.target.hasAttribute('data-audioeye-launcher')){context.style.display='flex';ActionBar.deactivateItems();}else if(mutation.target.hasAttribute('data-audioeye-toolbar')){context.style.display='flex';ActionBar.activateItem(context);}}})} const mutationObserver=new MutationObserver(callback) mutationObserver.observe(document.body,{attributes:true,attributeFilter:['class','data-audioeye-launcher','data-audioeye-toolbar']});function activateAudioEyeToolbar(e){e.preventDefault();if(typeof AudioEye!=='undefined'){if((document.body.classList.contains('ae-launcher')||document.body.hasAttribute('data-audioeye-launcher'))&&typeof AudioEye.activate=='function'){AudioEye.activate('toolbar');}}} context.addEventListener('click',activateAudioEyeToolbar);context.addEventListener('keydown',function(e){if(e.which===32){activateAudioEyeToolbar(e);}});});Widgets.register('#ab-modal--mobileMenu',function(context){var getMenuSiblings=function(elem){return Array.prototype.filter.call(elem.parentNode.children,function(sibling){return sibling!==elem})} var toggleSubMenu=function(menuItem){var clickedList=menuItem.parentNode if(!clickedList.classList.contains('active')){var siblings=getMenuSiblings(clickedList) for(var i=0;i a[aria-expanded]') if(button){button.setAttribute('aria-expanded','false')}} clickedList.classList.add('active') menuItem.setAttribute('aria-expanded','true')}else{clickedList.classList.remove('active') menuItem.setAttribute('aria-expanded','false')}} var menuItemsWithChildren=context.querySelectorAll('.nav .menu-item-has-children > a') for(var i=0;ires.json()).then(data=>{for(var i=0;i0){var filterRules=item.dataset[facet].split(',') var formattedRules=formatFiltersForAlgolia(filterRules,facet) filters.push('('+formattedRules+')')}} if(filters.length===0){query=item.parentNode.querySelector('.infoItem--name').innerHTML.trim()} wrappers.push(item.closest('[data-vehicle-item]')) searches.push({indexName:indexName,query:query,params:{facets:facets,filters:filters.join(' AND ')}})}) return{wrappers:wrappers,searches:searches}} function priceStatExists(hit){return hit.facets_stats&&hit.facets_stats.our_price&&hit.facets_stats.our_price.min} function formatPrice(priceValue){return priceValue.toLocaleString('en-US',{style:'currency',currency:'USD',minimumFractionDigits:0})} var queryObjects=assembleQueries(index.indexName) var algoliaSearches=queryObjects.searches var swipers={} var marker=0 client.search(algoliaSearches,function(err,data){if(err){console.log(err) throw err} data.results.forEach(function(res,i){var wrapper=queryObjects.wrappers[i] var priceEl=wrapper.querySelector('.alg-price') if(priceEl&&priceEl.innerHTML.trim()!==''){priceEl.parentNode.setAttribute('style','')} if(wrapper.parentNode.firstElementChild===wrapper){marker=i} if(priceEl&&priceStatExists(res)){if(typeof res.facets_stats.our_price.min=='number'&&res.facets_stats.our_price.min!==0){priceEl.parentNode.style.display='block' priceEl.innerHTML=formatPrice(res.facets_stats.our_price.min) priceEl.parentNode.setAttribute('style','')}}}) for(var name in swipers){var swiper=swipers[name] if(!isNaN(swiper.progress)){swiper.removeSlide(swiper.sbRemoveSlides) swiper.sbRemoveSlides=undefined swiper.update()}}})} function customSearchQuery(searchObject){return index.search(searchObject).catch(function(err){console.log(err)}).then(function(hits){return hits})} function usedSearchShouldIncludeCPO(){try{return includeCPO=sbInventorySettings.usedIncludeCPO==='enabled'}catch(err){return false}} var includeCPO=usedSearchShouldIncludeCPO() var searchHistory=[];function getSearchUrlBase(vehiclePage){vehiclePage=vehiclePage||false var searchString='/#action=im_ajax_call&perform=get_results' if(vehiclePage){return'/'+vehiclePage+searchString} try{var lightningRedirect=window.homePageLightningSettings.lightningDefaultRedirectType if(lightningRedirect.length===0){throw'lightningRedirect is empty'} return'/'+lightningRedirect+searchString}catch(err){console.log(err)} return'/used-vehicles'+searchString} function intializeSearchFilters(filterContext){var vehiclePage=false var initialSearch=true var resultsDisplay=null var cpoLabel='' var skipUpdate=[] var filters=[] var facets=[] var searchFacets=[] var submitBtn=filterContext.querySelector('[type="submit"]') if(submitBtn){submitBtn.addEventListener('click',performSearch)} function algoliaSearchWithFacets(){if(initialSearch===true&&sbInventorySettings.searchDefaults){searchFacets=sbInventorySettings.searchDefaults}else{searchFacets=Array.prototype.reduce.call(filters,searchFacetReducer,[])} if(includeCPO){cpoLabel=getCertifiedLabel() if(cpoLabel!==''){searchFacets.forEach(function(facet){if(usedFacet(facet)){facet.formatted=[facet.formatted,formatFilterRule(facet.name,cpoLabel)]}})}} var searchObject={query:'',facets:facets,facetFilters:searchFacets.map(getFormattedFacetFilters),responseFields:['facets','nbHits']} var searchKey=JSON.stringify(searchObject) var previousSearch=searchHistory.find(function(searchItem){return searchItem.key===searchKey}) if(previousSearch){processHits(previousSearch.hits,searchObject) return} index.search(searchObject).catch(function(err){console.log(err)}).then(function(hits){if(!hits&&initialSearch){return} processHits(hits,searchObject) searchHistory.push({key:searchKey,hits:hits}) initialSearch=false})} function compareAlpha(a,b){return a.toLowerCase().localeCompare(b.toLowerCase())} function compareYears(a,b){return parseInt(b,10)-parseInt(a,10)} function convertFacetFilterToParam(filter){if(filter.indexOf(':')<0){return''} var parts=filter.split(':') return'&'+parts[0]+'[]='+encodeURIComponent(parts[1])} function countTextReducer(acc,curr){return acc+' '+curr.value+''} function formatFilterRule(name,value){return name+':'+value} function getCertifiedLabel(){if(cpoLabel!==''){return cpoLabel} var typeFilter=Array.prototype.find.call(filters,function(filter){return filter.name==='type'}) if(!typeFilter){return''} var certifiedOpt=Array.prototype.find.call(typeFilter.querySelectorAll('option'),function(option){return option.value.toLowerCase().indexOf('cert')>-1}) if(certifiedOpt){return certifiedOpt.value} return''} function getFormattedFacetFilters(filter){return filter.formatted} function performSearch(event){event.preventDefault() window.location.href=searchFacets.reduce(searchParamReducer,getSearchUrlBase(vehiclePage))} function populateFilterDropdowns(facet,hits){try{if(skipUpdate.indexOf(facet)>-1&&!initialSearch){throw'Do not update the '+facet+' facet'} var select=filterContext.querySelector('select[name="'+facet+'"]') var defaultValue=select.querySelector('[value=""]') defaultValue.innerHTML=defaultValue.innerHTML.replace(/^\w/,function(t){return t.toUpperCase()}) select.innerHTML=defaultValue.outerHTML var facetOptions=Object.keys(hits.facets[facet]) switch(facet){case'year':facetOptions.sort(compareYears) break;case'type':facetOptions=sortTypes(facetOptions) break;case'make':case'model':facetOptions.sort(compareAlpha) break;} facetOptions.forEach(function(option){var opt=document.createElement('option') opt.value=option opt.text=option var facetFilterValues=searchFacets.map(function(facet){return facet.value}) if(facetFilterValues.indexOf(option)>-1){opt.selected=true} select.appendChild(opt)}) document.dispatchEvent(new CustomEvent('sb_alg_search_'+facet,{detail:{filter:select}}))}catch(err){}} function processHits(hits,searchObject){if(resultsDisplay){var countResults=searchFacets.reduce(countTextReducer,hits.nbHits) var message=resultsDisplay.getAttribute('data-message')||'' resultsDisplay.innerHTML=countResults+' '+message} searchObject.facets.forEach(function(facet){populateFilterDropdowns(facet,hits)})} function searchFacetReducer(acc,curr){var value=curr.value.trim() if(curr.name==='type'){setVehiclePage(value)} if(value===''){return acc} acc.push({name:curr.name,value:value,formatted:formatFilterRule(curr.name,value)}) return acc} function searchParamReducer(acc,curr){if(typeof curr.formatted==='string'){return acc+convertFacetFilterToParam(curr.formatted)} return acc+curr.formatted.reduce(function(acc,curr){return acc+convertFacetFilterToParam(curr)},'')} function setVehiclePage(value){if(value===''){vehiclePage=false return} vehiclePage=value.toLowerCase().indexOf('new')>-1?'new-vehicles':'used-vehicles'} function sortTypes(facetOptions){var newOpt=null var demoOpt=null var indexOfNew=facetOptions.indexOf('New') if(indexOfNew>-1){newOpt=facetOptions.splice(indexOfNew,1)} var indexOfDemo=facetOptions.indexOf('Demo') if(indexOfDemo>-1){demoOpt=facetOptions.splice(indexOfDemo,1)} facetOptions.sort(compareAlpha).reverse() if(newOpt){facetOptions.unshift(newOpt[0])} if(demoOpt){facetOptions.push(demoOpt[0])} return facetOptions} function usedFacet(facet){return facet.name==='type'&&['used','pre-owned'].indexOf(facet.value.toLowerCase())>-1} return{init:function(filterObjects,opts){filters=filterObjects if(opts.hasOwnProperty('resultsDisplay')&&opts.resultsDisplay){resultsDisplay=opts.resultsDisplay} if(opts.hasOwnProperty('enableLooseSearch')&&opts.enableLooseSearch){skipUpdate=['type','year','make'] var defaults=sbInventorySettings.searchDefaults||[] if(defaults.length>0){skipUpdate=skipUpdate.filter(function(facet){return defaults.find(function(d){return d.name!==facet});})}} filterObjects.forEach(function(filter){facets.push(filter.name) filter.addEventListener('change',algoliaSearchWithFacets)}) algoliaSearchWithFacets()}}} window.SBInventorySearchUtility={getVehiclePricing(context){return getVehiclePricing(context)},searchFilters:function(context){return intializeSearchFilters(context)},getSearchUrlBase:function(vehiclePage){return getSearchUrlBase(vehiclePage)},customSearchQuery:function(searchObject){return customSearchQuery(searchObject)},modifyDropdown:function(select,callback){if(select===undefined){return} const fallback=select.innerHTML const originalValue=select.value;try{const options=select.querySelectorAll('option');const optionsArray=[];for(let i=0;ioption.selected===true) select.innerHTML=updatedOptions.join('') select.value=currentlySelected?currentlySelected.value:originalValue}catch(err){console.error('Search Filter Modification Error:',err) select.innerHTML=fallback select.value=originalValue}}}},['algoliasearch']);Widgets.areAvailable()