{"version":3,"file":"search.min.js","sources":["scripts/search.min.js"],"sourcesContent":["/**************************************************************************\nName: search.js\nDescription: Fuzzy search script.\nDependencies: Fuse.js, jQuery\nDate Created: 08/31/2018 by Jenna Hart\nModified:\n**************************************************************************/\njQuery.noConflict();\n\n// var startTime = new Date().getTime();\nvar hasResults = true;\nvar hasSearch = false;\nvar hasSubmit = false;\nvar hasError = false;\nvar isWhatsNewAdmin = window.location.href.indexOf('itemAdmin.main');\nvar isPromoItemAdmin = window.location.href.indexOf('promoItemAdmin.editItems');\nvar isBannerAdmin = window.location.href.indexOf('bannerAdmin.editItems');\nvar iOS = navigator.userAgent.toLowerCase( ).match( /(iphone|ipod|ipad)/ );\nvar keyCodeBlacklist = [16,17,18,19,20,32,33,34,35,36,37,38,39,40,45,46,91,93,113,115,116,118,120,122,144,145];\nvar searchWorker; // initialized in document ready function\nvar hasSearchWorker = true;\nvar minCharLenth = 3;\nvar idList = '#keywords, #globalKeywords, #globalKeywordsMob, #globalKeywordsMobile, #globalKeywordsMobileHome, #headerKeywordsMob';\nvar trendingIDList = '#globalKeywords, #globalKeywordsMob, #globalKeywordsMobile, #globalKeywordsMobileHome, #headerKeywordsMob';\n\n//Prevent backspace from firing search on iOS\nif(iOS) keyCodeBlacklist.push(8);\n\njQuery(document).ready(function(){\n\t// Check that local storage and search data exist and are not out of date\n\tgetClearCacheDate();\n\n\t// Set up web worker\n\t// This allows FuseJS to search \"in the background\".\n\t// It isn't possible to do this any other way because the FuseJS library is written\n\t// completely synchronously, so there is no way to utilize async methods.\n\t// The web worker file imports fuse.min.js so we don't even need to attach it to the DOM.\n\tvar path = window.location.protocol + '//' + window.location.host;\n\tif(typeof(Worker) !== \"undefined\") {\n\t\tif(typeof(searchWorker) == \"undefined\") {\n\t\t\tvar dataObject = {method: 'getMinLocAJAX', asset:\"/scripts/searchWorker.js\"}\n\n\t\t\tjQuery.ajax( {\n\t\t\t\ttype : 'GET',\n\t\t\t\turl : '/cfcs/assetManager.cfc',\n\t\t\t\tcache : false,\n\t\t\t\tasync : false,\n\t\t\t\tdataType : 'json',\n\t\t\t\tdata : dataObject,\n\t\t\t\tsuccess : function(assetLoc){\n\t\t\t\t\tsearchWorker = new Worker(path + assetLoc);\n\t\t\t\t},\n\t\t\t\terror : function( data ) {\n\t\t\t\t\tsearchWorker = new Worker(path + '/scripts/searchWorker.js');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tsearchWorker.addEventListener('message', function(e) {\n\t\t\tvar result = e.data.result;\n\t\t\tvar submitForm = e.data.submitForm;\n\t\t\tvar input = jQuery('#' + e.data.inputID);\n\n\t\t\tif(result.length > 0 || hasSearch == true) {\n\t\t\t\tsetFaytResults(result, input, submitForm);\n\n\t\t\t\tif(submitForm != undefined && submitForm == true)\n\t\t\t\t{\n\t\t\t\t\tif(isPromoItemAdmin >= 0)\n\t\t\t\t\t\tsetPromoItems();\n\t\t\t\t\tif(isBannerAdmin >= 0)\n\t\t\t\t\t\tsetBannerItems();\n\t\t\t\t\telse\n\t\t\t\t\t\tinput.closest('form').submit();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// if there are no search results, search again with useExtendedSearch turned off\n\t\t\t\thasSearch = true;\n\t\t\t\tgetResults(input.val(), e.data.inputID, submitForm);\n\t\t\t}\n\t\t});\n\t\tsearchWorker.addEventListener('error', function(e) {\n\t\t\t// stop web worker\n\t\t\tsearchWorker.terminate();\n\n\t\t\tif(e.message.includes(\"Import Error\")) {\n\t\t\t\thasSearchWorker = false;\n\t\t\t\tjQuery.getScript('/scripts/fuse/dist/fuse.min.js');\n\t\t\t} else {\n\t\t\t\thasError = true;\n\t\t\t\tsendErrorEmail(e.message, e.filename, e.lineno);\n\t\t\t}\n\t\t});\n\t} else {\n\t\t// no web worker support\n\t\thasSearchWorker = false;\n\t\tjQuery.getScript('/scripts/fuse/dist/fuse.min.js');\n\t}\n\n\t//Add event listeners to the search form(s)\n\tsetSearchListeners();\n});\n\n//Adds event listeners to the search form(s) on the page\nfunction setSearchListeners(){\n\tjQuery(trendingIDList).on('focus', function (event) {\n\t\tlet input = jQuery(this);\n\t\tlet isHeaderMob = input.attr('id') == 'headerKeywordsMob' ? true : false;\n\t\tlet isHeaderMobActive = isHeaderMob && input.parents('.product-search').hasClass('is-active') ? true : false;\n\t\tlet timeout = isHeaderMob ? 300 : 0;\n\n\t\tif(!isHeaderMobActive)\n\t\t\tsetTimeout(() => { getTrending(input); }, timeout);\n\t});\n\n\t// Prevent '<' and '>' from being typed in the search field(s)\n\tjQuery(idList).on('keypress', function(event) {\n\t\tvar code = event.keyCode || event.which;\n\t\tif (code == 60 || code == 62) {\n\t\t\tevent.preventDefault();\n\t\t\treturn false;\n\t\t}\n\t});\n\n\t//Handle various key presses in the search field(s)\n\tjQuery(idList).keyup(function(event) {\n\t\t// Needs to be keyup so that backspace fires this event\n\t\tevent.preventDefault();\n\n\t\thasSearch = false;\n\t\tvar code = event.keyCode || event.which;\n\n\t\tjQuery('#slides').trigger('mouseover');\n\n\t\thasResults = false;\n\n\t\tvar input = jQuery(this);\n\n\t\tinput.val(input.val().replace(/[<>]/g, ''));\n\n\t\tvar inputID = input.attr('id');\n\t\tvar val = jQuery.trim(jQuery(this).val());\n\t\tvar isBlacklist = jQuery.inArray(code, keyCodeBlacklist) < 0 ? false : true;\n\n\t\tif(code == 27)\t//Escape key\n\t\t\tcloseFayt();\n\t\telse if(code == 13) {\t//Enter key\n\t\t\tif(!hasSubmit || isPromoItemAdmin >= 0 || isBannerAdmin >= 0) {\n\t\t\t\tif(jQuery(event.target).is('a')) {\n\t\t\t\t\tjQuery(event.target).trigger('click');\n\t\t\t\t} else {\n\t\t\t\t\tvar input = jQuery(event.target);\n\t\t\t\t\tvar isValid = input.val().trim().length >= minCharLenth ? true : false;\n\n\t\t\t\t\tif(isValid) submitSearchForm(input);\n\t\t\t\t\telse showMessage(input);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if(val.length >= minCharLenth && val.length <= 999 && !isBlacklist) {\n\t\t\tif(!input.next('.faytResults').hasClass('active')) {\n\t\t\t\tvar height = jQuery(window).width() > 768 ? '37px' : '40px';\n\t\t\t\tinput.next('.faytResults').html('').addClass('loading').css('height', height);\n\t\t\t}\n\n\t\t\tgetResults(val, inputID);\n\t\t}\n\t\telse if(!isBlacklist || (code == 8 && iOS)) {\n\t\t\tjQuery('input[name=\"sfitemList\"]').val('');\n\t\t\tjQuery('input[name=\"sfitemExact\"]').val('');\n\n\t\t\tif(input.attr('id') == 'keywords')\n\t\t\t\tcloseFayt();\n\t\t\telse\n\t\t\t\tgetTrending(input);\n\t\t}\n\t});\n\n\t//Close the search preview on blur\n\tjQuery(idList).on('blur', function() {\n\t\tsetTimeout(function() {\n\t\t\tlet activeEL = jQuery(document.activeElement);\n\t\t\t\n\t\t\tjQuery('.faytResults.active').each(function() {\n\t\t\t\tlet thisActiveParent = jQuery(this).parents('.product-search');\n\n\t\t\t\tif(thisActiveParent.find(activeEL).length <= 0) {\n\t\t\t\t\tlet fayt = thisActiveParent.find('.faytResults');\n\t\t\t\t\tcloseFayt(fayt);\n\t\t\t\t}\n\t\t\t});\n\t\t}, 50);\n\t});\n\n\t//Programatically click a search preview option when the enter key is pressed\n\tjQuery('.faytResults').on('keyup', function(evt) {\n\t\tvar code = evt.keyCode || evt.which;\n\n\t\tif(code == 13) {\n\t\t\tif(jQuery(evt.target).is('a'))\n\t\t\t\tjQuery(evt.target).trigger('click');\n\t\t}\n\t});\n\n\t//Close the search preview on focus loss\n\tjQuery('.faytResults').on('focusout', function() {\n\t\tsetTimeout(function() {\n\t\t\tif(!jQuery(document.activeElement).parent().parent().hasClass('faytResults') && document.activeElement.id != 'keywords' && document.activeElement.id != 'globalKeywords')\n\t\t\t\tcloseFayt();\n\t\t}, 50);\n\t});\n\n\tjQuery('body').on('click', '.faytResults a.result-trending', function (evt) {\n\t\tevt.preventDefault();\n\t\tsetTrendingForm(jQuery(this));\n\t});\n\n\t//Click listener for search preview options\n\tjQuery('body').on('click', '.faytResults a:not(.result-trending)', function(evt) {\n\t\tevt.preventDefault;\n\n\t\tvar link = jQuery(this);\n\t\tvar parent = link.closest('.faytResults');\n\t\tvar sfitem = link.attr('data-usfitem').length > 0 ? link.attr('data-usfitem') : link.attr('data-sfitem');\n\t\tvar itemdesc = link.text();\n \n\t\tif(sfitem != 'seeAll' && sfitem != 'specials') {\n\t\t\tjQuery('input[name=\"sfitemList\"]').val('');\n\t\t\tjQuery('input[name=\"sfitemExact\"]').val(sfitem);\n\n\t\t\tif(parent.hasClass('global'))\n\t\t\t\tjQuery('#globalKeywords').val(itemdesc);\n\t\t\telse if(parent.hasClass('globalMob'))\n\t\t\t\tjQuery('#globalKeywordsMob').val(itemdesc);\n\t\t\telse if(parent.hasClass('globalMob'))\n\t\t\t\tjQuery('#globalKeywordsMobile').val(itemdesc);\n\t\t\telse\n\t\t\t\tjQuery('#keywords').val(itemdesc);\n\t\t}\n\n\t\tcloseFayt();\n\n\t\tif(isPromoItemAdmin >= 0)\n\t\t\tsetPromoItems();\n\t\telse if(isBannerAdmin >= 0)\n\t\t\tsetBannerItems();\n\t\telse\n\t\t\tparent.closest('form').submit();\n\t});\n\n\t//Listener to prevent the enter key from auto-submitting the form, which would bypass the JS validation\n\tjQuery('.globalSearchForm, globalSearchForm .faytResults').on('keydown', function(evt) {\n\t\t//Needs to be keydown to prevent form submission\n\t\tvar code = evt.keyCode || evt.which;\n\n\t\tif(code == 13)\n\t\t\tevt.preventDefault();\n\t});\n\n\t//Click listener for search buttons\n\tjQuery('.globalSearchBtn, .deptSearchBtn, #submitPromoSearchBtn').on('click', function(evt) {\n\t\tevt.preventDefault();\n\n\t\tif(!hasSubmit || isPromoItemAdmin >= 0 || isBannerAdmin >= 0) {\n\t\t\tlet button = jQuery(this);\n\t\t\tlet container = button.parents('.keywordContainer');\n\t\t\tlet input = isPromoItemAdmin >= 0 || isBannerAdmin >= 0 ? button.parent().parent().find('input[name=\"keywords\"]') : button.siblings('input[name=\"keywords\"]');\n\t\t\tlet isMobileHeader = button.hasClass('global-search-btn-mobile');\n\t\t\tlet isValid = input.val().trim().length > 2 ? true : false;\n\n\t\t\tinput.focus();\n\n\t\t\tif (isMobileHeader && !isValid) {\n\t\t\t\tlet isActive = container.hasClass('is-active');\n\t\t\t\tlet timeout = isActive ? 460 : 0;\n\n\t\t\t\tif(isActive) closeFayt();\n\n\t\t\t\tsetTimeout(() => { container.toggleClass('is-active'); }, timeout);\n\t\t\t}\n\t\t\telse if(isValid) \n\t\t\t\tsubmitSearchForm(input);\n\t\t\telse \n\t\t\t\tshowMessage(input);\n\t\t}\n\t});\n\n\tjQuery('#searchType').on('change', function() {\n\t\thasResults = false;\n\t});\n}\n\n//Adds the search preview options to the preview box\nfunction setFaytResults(result, input, submitForm) {\n\t/*\n\tresult: A list of products which match the search term\n\tinput: The html input node which the search is being performed from\n\tsubmitForm: The hidden form which is used to store the search preview options along with other\n\t\tsearch parameters\n\t*/\n\tvar count = result.length <= 7 ? result.length : 7;\t//Limit the search preview to 7 options\n\n\t\n\tif(submitForm == undefined || submitForm == false) {\n\t\tvar html = jQuery('
');\n\t\tvar resultsContainer = input.next('.faytResults');\n\t\tvar tabindex = input.attr('tabindex');\n\n\t\tresultsContainer.html('');\n\n\t\tif(jQuery(window).width() <= 768 && count > 5)\tcount = 5;\t//Limit mobile layouts to 5 preview options\n\n\t\tif(count > 0) {\n\t\t\tfor( var i = 0; i < count; i++ ) {\n\t\t\t\tvar item = result[i].item;\n\t\t\t\tvar itemdesc = item.itemdesc.toLowerCase();\n\n\t\t\t\tvar enteredValue = input[0].value;\n\t\t\t\tvar enteredValue = enteredValue.trim();\n\t\t\t\t//enteredValue = enteredValue.replace(/'/g, \"~\");\n\n\t\t\t\t/* single string unbolding */\n\t\t\t\t//var enteredValueEscaped = enteredValue.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n\t\t\t\t/*This line is IE11 friendly:*/\n\t\t\t\t//itemdesc = itemdesc.replace(new RegExp(enteredValueEscaped, \"gi\"), \"\" + enteredValue + \"\");\n\t\t\t\t/*This line doesn't work with IE11:*/\n\t\t\t\t/*itemdesc = itemdesc.replace(new RegExp(input[0].value, \"gi\"), (match) => `${match}`);*/\n\n\t\t\t\t/* multiple words unbolding */\n\t\t\t\tvar words = enteredValue.split(\" \");\n \t\t\tfor (var w = 0; w < words.length; w++) {\n \t\t\t\tif (words[w].toLowerCase() != 'b' && words[w].toLowerCase() != '/' && words[w].toLowerCase() != '/b') {\n\t\t\t\t\t\twords[w] = words[w].replace(/'/g, \"~\");\t// straight single quote\n\t\t\t\t\t\twords[w] = words[w].replace(/‘/g, \"~\"); // iOS open single quote\n\t\t\t\t\t\twords[w] = words[w].replace(/’/g, \"~\"); // iOS close single quote\n\t\t\t\t\t\tvar enteredValueEscaped = words[w].replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n\t\t\t\t\t\titemdesc = itemdesc.replace(new RegExp(enteredValueEscaped, \"gi\"), \"\" + words[w] + \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titemdesc = itemdesc.replace(/~/g, \"'\");\n\t\t\t\titemdesc = '' + itemdesc + '';\n\n\t\t\t\thtml.append('' + itemdesc + '');\n\t\t\t}\n\n\t\t\tif(result.length > count ) {\n\t\t\t\tvar tabindex = parseInt(count) + 6;\n\t\t\t\thtml.append('See All');\n\t\t\t}\n\t\t} else {\n\t\t\thtml.append('No results found');\n\n\t\t\tif(localStorage.hasInventory != undefined && (localStorage.hasInventory == null || localStorage.hasInventory == 0))\n\t\t\t\thtml.append('View Current Specials');\n\n\t\t\tjQuery('input[name=\"sfitemExact\"]').val('');\n\t\t\tjQuery('input[name=\"sfitemList\"]').val(0);\n\t\t}\n\n\t\tresultsContainer.append(html);\n\n\t\tlet thisHeight = resultsContainer.find('div').height();\n\t\tresultsContainer.addClass('active').removeClass('loading').css('height', thisHeight + 'px');\n\t}\n\t\n\t// console.log(new Date().getTime() - startTime + ' ms');\n\n\t//Set the values of the sfitem inputs in the hidden search form\n\tif(count == 1) {\n\t\tvar sfitem = result[0].item.usfitem.length > 0 ? result[0].item.usfitem : result[0].item.sfitem;\n\t\tjQuery('input[name=\"sfitemExact\"]').val(sfitem);\n\t\tjQuery('input[name=\"sfitemList\"]').val('');\n\t} else if (count > 1) {\n\t\tvar adminInput = jQuery('input[name=\"isAdmin\"]');\n\t\tvar isAdmin = adminInput != undefined && adminInput.length ? adminInput.val() : false;\n\t\t// var isTPR = window.location.href.indexOf('/search/temporarypricereductions') < 0 ? false : true;\n\n\t\tif(isAdmin)\n\t\t\tvar sfitemList = result.map(function(result) { return result.item.usfitem != undefined && result.item.usfitem.length > 0 ? result.item.usfitem : result.item.sfitem; }).join();\n\t\telse\n\t\t\tvar sfitemList = result.slice(0,690).map(function(result) { return result.item.usfitem != undefined && result.item.usfitem.length > 0 ? result.item.usfitem : result.item.sfitem; }).join();\n\n\t\tinput.closest('form').find('input[name=\"sfitemList\"]').val(sfitemList);\n\t\tjQuery('input[name=\"sfitemExact\"]').val('');\n\n\t\t/* when an exact match is entered and search is clicked, without clicking the exact match, this simulates the click */\n\t\tif (input[0].value.toLowerCase() == result[0].item.itemdesc.toLowerCase()) {\n\t\t\tvar sfitem = result[0].item.usfitem.length != undefined && result[0].item.usfitem.length > 0 ? result[0].item.usfitem : result[0].item.sfitem;\n\t\t\tjQuery('input[name=\"sfitemExact\"]').val(sfitem);\n\t\t}\n\t}\n\n\thasResults = true;\n\tjQuery('#slides').trigger('mouseleave');\n}\n\nfunction searchFuse(options, val, inputID, submitForm) {\n\tif(hasError == true) {\n\t\t// display error message\n\t\tshowMessage(jQuery('#' + inputID), true);\n\t} else {\n\n\t\t/* To use advanced Extended Search options, you can parse 'val' here.\n\t\t\tFor details, see https://fusejs.io/examples.html#extended-search\n\t\t*/\n\t\t//console.log('val: ' + val );\n\n\t\tvar searchData = getSearchData();\n\n\t\tif(hasSearch == false) {\n\t\t\t//Clean up the search value\n\t\t\tvar val_fixed = ' ' + val.trim();\n\t\t\tval_fixed = val_fixed.replace(/\\s+(\\d)/g, ` '$1`);\n\t\t\tval_fixed = val_fixed.trim();\n\t\t}\n\t\telse\n\t\t\tval_fixed = val;\n\t\t\n\n\t\tif(hasSearchWorker) {\n\t\t\tsearchWorker.postMessage({\n\t\t\t\tsearchData: searchData,\n\t\t\t\toptions: options,\n\t\t\t\tval: val_fixed,\n\t\t\t\tinputID: inputID,\n\t\t\t\tsubmitForm: submitForm\n\t\t\t});\n\t\t} else {\n\n\t\t\t// Create the Fuse index\n\t\t\t//const fuseIndex = Fuse.createIndex(options.keys, searchData)\n\t\t\t//var fuse = new Fuse(searchData, options, fuseIndex);\n\n\t\t\tvar fuse = new Fuse(searchData, options);\n\t\t\tvar result = fuse.search(val_fixed);\n\t\t\tvar input = jQuery('#' + inputID);\n\n\t\t\tif(result.length > 0 || hasSearch == true) {\n\t\t\t\tsetFaytResults(result, input, submitForm);\n\n\t\t\t\tif(submitForm != undefined && submitForm == true)\n\t\t\t\t\tinput.closest('form').submit();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// if there are no search results, search again with useExtendedSearch turned off\n\t\t\t\thasSearch = true;\n\t\t\t\tgetResults(val_fixed, inputID, submitForm);\n\t\t\t}\n\t\t}\n\t}\n}\n\n//Closes the search preview\nvar closeFayt = debounce(function(fayt) {\n\tlet thisFayt = fayt != undefined && fayt.length > 0 ? fayt : jQuery('.faytResults');\n\tlet faytParent = thisFayt.parents('.product-search');\n\t\n\tthisFayt.removeClass('active loading').css('height', 0);\n\n\tif(faytParent.hasClass('keyword-container-mobile'))\n\t\tsetTimeout(() => { faytParent.removeClass('is-active'); }, 215);\n\n\tsetTimeout(function() {\n\t\tthisFayt.html('');\n\t\tthisFayt.removeClass('active loading').css('height', 0);\n\t}, 200);\n}, 245);\n\nvar showMessage = debounce(function(input, isWorkerIssue) {\n\tvar html = jQuery('
');\n\tvar resultsContainer = input.next('.faytResults');\n\tresultsContainer.html('');\n\n\tif(isWorkerIssue != undefined && isWorkerIssue == true)\n\t\thtml.append('Sorry, an issue has occurred. The admin has been notified.');\n\telse\n\t\thtml.append('Minimum of three characters required');\n\n\tresultsContainer.append(html).removeClass('loading');\n\n\tvar thisHeight = resultsContainer.find('div').height();\n\tresultsContainer.addClass('active').css('height', thisHeight + 'px');\n}, 450);\n\n//Gets a list of results for a search query\nvar getResults = debounce(function(val, inputID, submitForm) {\n\tvar adminInput = jQuery('input[name=\"isAdmin\"]');\n\tvar isAdmin = adminInput != undefined && adminInput.length ? adminInput.val() : false;\n\n\t// Priority needs to stay in the first keys position\n\tvar keys = [\n\t\t{name: \"priority\", weight: 0.01},\n\t\t{name: \"itemdesc\", weight: 0.01},\n\t\t{name: \"keywords\", weight: 0.9},\n\t\t{name: \"category\", weight: 0.8}];\n\n\tif (jQuery.isNumeric(val)) {\t//Product number search\n\t\tvar threshold = 0.1;\n\n\t\tif(val.length > 7) {\n\t\t\tkeys.push({name: \"upc\", weight: 0.99});\n\t\t}\n\t\telse if(val.length == 7){\t//USF Item Number search\n\t\t\tkeys.push({name: \"usfitem\", weight: 0.99});\n\t\t}\n\t\telse if(val.length == 5){\t//SF Item Number search\n\t\t\tkeys.push(\n\t\t\t\t{name: \"sfitem\", weight: 0.99},\n\t\t\t\t{name: \"usfitem\", weight: 0.9});\n\t\t}\n\t\telse{\t//Unclear, search all product numbers\n\t\t\tkeys.push(\n\t\t\t\t{name: \"sfitem\", weight: 0.99},\n\t\t\t\t{name: \"usfitem\", weight: 0.99},\n\t\t\t\t{name: \"upc\", weight: 0.99});\n\t\t}\n\t}\n\telse{\t//Standard string search\n\t\tvar threshold = 0.3;\n\t}\n\n\t/* useExtendedSearch helps some searches and hinders others.\n\t If no results are returned with useExtendedSearch on, \n\t search again with useExtendedSearch turned off\n\t*/\n\tif(hasSearch == false) var extendedSearch = true;\n\t\t\t\t\t else var extendedSearch = false;\n\n\tvar options = {\n\t\t/* Options: https://fusejs.io/api/options.html#basic-options */\n\t\tuseExtendedSearch: extendedSearch,\n\t\t// ignoreLocation: true,\n\t\tignoreFieldNorm: true,\n\t\tshouldSort: true,\n\t\tincludeScore: true,\n\t\tthreshold: threshold,\n\t\tlocation: 0,\n\t\tdistance: 1000,\n\t\tminMatchCharLength: 1,\n\t\tkeys: keys\n\t};\n\n\ttry {\n\t\tsearchFuse(options, val, inputID, submitForm);\n\t} catch(e) {\n\t\tjQuery.getScript(\"/scripts/fuse/dist/fuse.min.js\", function(data, textStatus, jqxhr) {\n\t\t\tsearchFuse(options, val, inputID, submitForm);\n\t\t});\n\t}\n}, 450);\n\nfunction submitSearchForm(input) {\n\tif(!hasSubmit || isPromoItemAdmin >= 0 || isBannerAdmin >= 0) {\n\t\thasSubmit = true;\n\n\t\tinput.next('.faytResults').removeClass('active loading').css('height', 0);\n\t\tjQuery('.submitSearch').addClass('disabled');\n\n\t\tif(hasResults) {\n\t\t\tif(isPromoItemAdmin >= 0)\n\t\t\t\tsetPromoItems()\n\t\t\telse if(isBannerAdmin >= 0)\n\t\t\t\tsetBannerItems();\n\t\t\telse\n\t\t\t\tinput.closest('form').submit();\n\t\t}\n\t\telse {\n\t\t\tvar val = jQuery.trim(input.val());\n\t\t\tvar inputID = input.attr('id');\n\t\t\tgetResults(val, inputID, true);\n\t\t}\n\t}\n}\n\nfunction setSearchData(clearCache, storeNumber, options={}) {\n\t/* Fetches the product JSON for use in the search functionality */\n\tif(clearCache == undefined || clearCache == null)\n\t\tvar clearCache = false;\n\n\tvar dataObject = { method : 'setItemJsonAJAX' }\n\n\tdataObject.whatsNew = isWhatsNewAdmin >= 0 || isPromoItemAdmin >= 0 || isBannerAdmin >= 0 ? true : false;\n\tdataObject.clearCache = clearCache;\n\n\tif(storeNumber != undefined)\n\t\tdataObject.storeNum = storeNumber;\n\n\tjQuery.ajax({\n\t\ttype : 'GET',\n\t\turl : '/cfcs/shopDAO.cfc',\n\t\tcache : false,\n\t\tasync : (\"ajaxAsync\" in options && typeof options.ajaxAsync === \"boolean\")? options.ajaxAsync : false,\n\t\tdataType : 'json',\n\t\tdata : dataObject,\n\t\tsuccess : function( data ){\n\t\t\tif(data.ERROR == undefined) {\n\t\t\t\tlocalStorage.clear();\n\n\t\t\t\ttry {\n\t\t\t\t\tif(isWhatsNewAdmin >= 0 || isPromoItemAdmin >= 0 || isBannerAdmin >= 0) {\n\t\t\t\t\t\tlocalStorage.setItem('whatsNewProductJSON', data.PRODUCTS.WHATSNEWPRODUCTJSON);\n\t\t\t\t\t\tlocalStorage.setItem('whatsNewAllProductJSON', data.PRODUCTS.WHATSNEWALLPRODUCTJSON);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlocalStorage.setItem('newProductJSON', data.PRODUCTS.NEWPRODUCTJSON);\n\t\t\t\t\t\tlocalStorage.setItem('tprProductJSON', data.PRODUCTS.TPRPRODUCTJSON);\n\t\t\t\t\t\tlocalStorage.setItem('allProductJSON', data.PRODUCTS.ALLPRODUCTJSON);\n\t\t\t\t\t\tlocalStorage.setItem('storeNum', data.PRODUCTS.STORENUM);\n\t\t\t\t\t\tlocalStorage.setItem('hasInventory', data.PRODUCTS.HASINVENTORY);\n\t\t\t\t\t}\n\n\t\t\t\t\tlocalStorage.setItem('timeStamp', new Date());\n\t\t\t\t} catch (e) {\n\t\t\t\t\talert('Local Storage is full. Please empty data or contact AVIBE for assistance.')\n\t\t\t\t}\n\n\t\t\t\tif(isWhatsNewAdmin >= 0 && clearCache == true) {\n\t\t\t\t\tjQuery('.grayBtn.reset').removeClass('disabled');\n\t\t\t\t\tjQuery('.successMsg').show('fast');\n\t\t\t\t\tjQuery('.errorMsg').hide('fast');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\terror : function( data ) {\n\t\t\t// Error handling\n\t\t\tif(isWhatsNewAdmin >= 0 && clearCache == true) {\n\t\t\t\tjQuery('.grayBtn.reset').removeClass('disabled');\n\t\t\t\tjQuery('.successMsg').hide('fast');\n\t\t\t\tjQuery('.errorMsg').show('fast');\n\t\t\t}\n\t\t},\n\t\tcomplete: function(){\n\t\t\t//Run the passed callback when the request is complete and the localStorage is updated\n\t\t\tif(\"callback\" in options && typeof options.callback === \"function\"){\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction checkSearchData(clearCacheDate, storeNumber) {\n\t// Check that local storage and search data exist and are not out of date\n\ttry {\n\t\tvar hasTime = localStorage.timeStamp == undefined || localStorage.timeStamp == null ? false : true;\n\t\tvar hasAll = localStorage.allProductJSON == undefined || localStorage.allProductJSON == null ? false : true;\n\t\tvar hasNew = localStorage.whatsNewProductJSON == undefined || localStorage.whatsNewProductJSON == null ? false : true;\n\t\tvar hasStore = localStorage.storeNum == undefined || localStorage.storeNum == null || localStorage.storeNum == 0 ? false : true;\n\t\tvar isItemAdmin = isWhatsNewAdmin < 0 && isPromoItemAdmin < 0 && isBannerAdmin < 0 ? false : true;\n\n\t\tif(!hasTime || (!hasAll && !isItemAdmin) || (!hasNew && isItemAdmin) || ((!hasStore || localStorage.storeNum != storeNumber) && !isItemAdmin)) {\n\t\t\tsetSearchData(false, storeNumber);\n\t\t} else {\n\t\t\tvar today = new Date(); today.setHours(0, 0, 0, 0);\n\t\t\tvar storageDate = new Date(localStorage.timeStamp); storageDate.setHours(0, 0, 0, 0);\n\t\t\tvar storageDateTime = new Date(localStorage.timeStamp).toISOString();\n\t\t\tvar clearDateTime = clearCacheDate != undefined && clearCacheDate != '' && Date.parse(clearCacheDate) ? new Date(clearCacheDate).toISOString() : '';\n\n\t\t\tif(storageDate < today || (clearDateTime != '' && storageDateTime < clearDateTime))\n\t\t\t\tsetSearchData(false, storeNumber);\n\t\t}\n\t} catch(e) {\n\t\tjQuery('.incompatible .noLocalStorage').css('display', 'block');\n\t\tjQuery('.incompatible').removeClass('hidden').addClass('visible');\n\t}\n\n\tif(isWhatsNewAdmin >= 0 || isPromoItemAdmin >= 0 || isBannerAdmin >= 0)\n\t\tjQuery('.admin-loading').removeClass('active');\n}\n\nfunction getClearCacheDate() {\n\tvar clearCacheDate = '';\n\tvar dataObject = { method : 'getClearCacheDateAJAX' }\n\n\tvar url = window.location.href,\n\t\tmyString = 'clickCarryAdmin.edit&oid=',\n\t\tisCCAdmin = url.indexOf(myString);\n\n\tif(isCCAdmin > 0)\n\t\tdataObject.oid = url.split(myString).pop();\n\n\tjQuery.ajax( {\n\t\ttype : 'GET',\n\t\turl : '/cfcs/shopGW.cfc',\n\t\tcache : false,\n\t\tdataType : 'json',\n\t\tdata : dataObject,\n\t\tsuccess : function(data) {\n\t\t\tcheckSearchData(data.CLEARCACHEDATE, data.STORENUM);\n\t\t},\n\t\terror : function(data) {\n\t\t\tcheckSearchData(data.CLEARCACHEDATE, data.STORENUM);\n\t\t}\n\t});\n}\n\nfunction getTrending(input) {\n\tvar dataObject = { method: 'getTrendingAJAX' }\n\n\tdataObject.isMobile = jQuery(window).width() <= 768 ? 1 : 0;\n\n\tjQuery.ajax({\n\t\ttype: 'GET',\n\t\turl: '/cfcs/searchGW.cfc',\n\t\tcache: false,\n\t\tdataType: 'json',\n\t\tdata: dataObject,\n\t\tsuccess: function (data) {\n\t\t\tif(input.val().length < minCharLenth)\n\t\t\t\tshowTrending(input, data);\n\t\t},\n\t\terror: function (data) {\n\t\t\tconsole.log('error');\n\t\t}\n\t});\n}\n\nfunction showTrending(input, data) {\n\tvar html = jQuery('
');\n\tvar resultsContainer = input.next('.faytResults');\n\tvar tabindex = input.attr('tabindex');\n\n\tif(data.length > 0) {\n\t\tresultsContainer.html('');\n\t\thtml.append(data);\n\n\t\tresultsContainer.append(html);\n\n\t\tlet thisHeight = resultsContainer.find('div').height();\n\t\tresultsContainer.addClass('active').removeClass('loading').css('height', thisHeight + 'px');\n\t}\n}\n\nfunction setTrendingForm(link) {\n\tlet parent = link.closest('.faytResults');\n\tlet isGlobalVal = parent.closest('form').find('input[name=\"isGlobal\"]').val();\n\tlet isGlobal = isGlobalVal == true ? 1 : 0;\n\n\tvar dataObject = { method: 'setTrendingAJAX' }\n\tdataObject.isGlobal = isGlobal;\n\n\tjQuery.ajax({\n\t\ttype: 'GET',\n\t\turl: '/cfcs/searchDAO.cfc',\n\t\tcache: false,\n\t\tdataType: 'json',\n\t\tdata: dataObject,\n\t\tsuccess: function (data) {\n\t\t\twindow.location = link.attr('href');\n\t\t},\n\t\terror: function (data) {\n\t\t\twindow.location = link.attr('href');\n\t\t}\n\t});\n}\n\nfunction sendErrorEmail(message, filename, linenumber) {\n\tvar dataObject = { \n\t\tmethod : 'searchErrorNotificationAjax',\n\t\tmessage : message,\n\t\tfilename : filename,\n\t\tlinenumber : linenumber,\n\t\turl : window.location.href,\n\t\tuserAgent : navigator.userAgent\n\t};\n\n\tjQuery.ajax( {\n\t\ttype : 'GET',\n\t\turl : '/cfcs/shopDAO.cfc',\n\t\tcache : false,\n\t\tdataType : 'json',\n\t\tdata : dataObject\n\t});\n}\n\n"],"names":["jQuery","noConflict","searchWorker","hasResults","hasSearch","hasSubmit","hasError","isWhatsNewAdmin","window","location","href","indexOf","isPromoItemAdmin","isBannerAdmin","iOS","navigator","userAgent","toLowerCase","match","keyCodeBlacklist","hasSearchWorker","minCharLenth","idList","trendingIDList","setSearchListeners","on","event","let","input","this","isHeaderMob","attr","parents","hasClass","setTimeout","getTrending","code","keyCode","which","preventDefault","keyup","trigger","inputID","val","replace","trim","isBlacklist","inArray","closeFayt","target","is","length","submitSearchForm","showMessage","next","height","width","html","addClass","css","getResults","activeEL","document","activeElement","each","thisActiveParent","find","fayt","evt","parent","id","setTrendingForm","link","closest","sfitem","itemdesc","text","setPromoItems","setBannerItems","submit","button","container","timeout","siblings","isMobileHeader","isValid","focus","isActive","toggleClass","setFaytResults","result","submitForm","count","undefined","resultsContainer","tabindex","i","enteredValueEscaped","item","words","value","split","w","RegExp","append","usfitem","parseInt","localStorage","hasInventory","thisHeight","removeClass","sfitemList","adminInput","map","slice","join","searchFuse","options","val_fixed","searchData","getSearchData","postMessage","Fuse","search","push","ready","getClearCacheDate","path","protocol","host","ajax","type","url","cache","async","dataType","data","method","asset","success","assetLoc","Worker","error","addEventListener","e","terminate","message","includes","getScript","sendErrorEmail","filename","lineno","debounce","thisFayt","faytParent","isWorkerIssue","threshold","keys","name","weight","isNumeric","useExtendedSearch","ignoreFieldNorm","shouldSort","includeScore","distance","minMatchCharLength","textStatus","jqxhr","setSearchData","clearCache","storeNumber","dataObject","whatsNew","storeNum","ajaxAsync","ERROR","clear","setItem","PRODUCTS","WHATSNEWPRODUCTJSON","WHATSNEWALLPRODUCTJSON","NEWPRODUCTJSON","TPRPRODUCTJSON","ALLPRODUCTJSON","STORENUM","HASINVENTORY","Date","alert","show","hide","complete","callback","checkSearchData","clearCacheDate","today","storageDate","storageDateTime","clearDateTime","hasTime","timeStamp","hasAll","allProductJSON","hasNew","whatsNewProductJSON","hasStore","isItemAdmin","setHours","toISOString","parse","myString","oid","pop","CLEARCACHEDATE","isMobile","showTrending","console","log","isGlobalVal","isGlobal","linenumber"],"mappings":"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"}