PageSourceSearch

https://www.keyence.com.cn/js/search/master.js?var=20261006143014

js keyence.com.cn collected 2026-10-08 03:28:14 UTC 230,030 bytes, 5,740 lines download raw bytes

1(function (win, doc, util) {
2    'use strict';
3
4    var GLOBAL;
5    var KEYENCE_SEARCH = {};
6    var K_S = KEYENCE_SEARCH;
7
8    K_S.init = function () {
9        var self = this;
10
11        GLOBAL = {
12            SITE_LANG: win.kpi_languageSettings.siteLang,
13            MANUAL_LANG: win.kpi_languageSettings.manualLang ? win.kpi_languageSettings.manualLang : win.kpi_languageSettings.siteLang,
14            SELECT_LANG: win.kpi_languageSettings.lang,
15            SELECT_LANG1: win.kpi_languageSettings.lang1,
16            SELECT_LANG2: win.kpi_languageSettings.lang2,
17            SELECT_FILE_TYPE: win.kpi_fileTypeSettings,
18            ORIGINAL_DOMAIN: win.kpi_originalDomain,
19            TRANSLATION: win.kpi_translation,
20            ASSET_TYPE_ID: win.kpi_assetTypeId ? win.kpi_assetTypeId : '',
21            CURRENT_SERIESE_ID: win.kpi_currentSeriesId ? win.kpi_currentSeriesId : '',
22            WEB_PRODUCT_ID: win.kpi_webProductId ? win.kpi_webProductId : '',
23            SITE_ID: win.kpi_siteSettings.siteId,
24            SITE_SETTINGS_LANG: win.kpi_siteSettings.siteLang,
25            API_VERSION: win.kpi_search_api?.version,
26            API_PATHNAME: win.kpi_search_api?.pathnames,
27        };
28        self.AFFIX = {
29            COOKIE: encodeURIComponent(GLOBAL.ORIGINAL_DOMAIN.split('www.keyence.')[1]),
30            TLD: (() => {
31                const domainMarker = 'www.keyence.';
32                const hostname = new URL(GLOBAL.ORIGINAL_DOMAIN).hostname;
33
34                return hostname.split(domainMarker)[1] ?? "";
35            })(),
36            ENVIRONMENT: (() => {
37                let prefix = '';
38                const envStr = GLOBAL.ORIGINAL_DOMAIN.match(/dev-|dev2-|dev3-|dev4-|stg-/)?.[0];
39
40                switch (envStr) {
41                    case undefined:
42                        break;
43                    case 'dev3-':
44                        prefix = 'dev-';
45                        break;
46                    case 'dev4-':
47                        prefix = 'dev2-';
48                        break;
49                    default:
50                        prefix = envStr;
51                }
52
53                if (GLOBAL.API_VERSION === 2 && /^dev/.test(envStr)) {
54                    prefix = 'dev-';
55                }
56
57                return prefix;
58            })(),
59        };
60        self.PARAMS = {
61            STG_FLAG: (() => {
62                let param = '';
63                const key = 'stg_flag';
64                const envStr = GLOBAL.ORIGINAL_DOMAIN.match(/dev-|dev2-|dev3-|dev4-|stg-/)?.[0];
65
66                if (envStr === 'dev-' || envStr === 'dev3-') {
67                    param = `${key}=0&`;
68                } else if (envStr === 'dev2-' || envStr === 'dev4-' || envStr === 'stg-') {
69                    param = `${key}=1&`;
70                }
71
72                return param;
73            })(),
74        };
75        self.CONFIG = {
76            SMALL_SCREEN_MQ: win.matchMedia('only screen and (max-width: 768px)'),
77            LARGE_SCREEN_MQ: win.matchMedia('only screen and (max-width: 969px)'),
78            FOCUSABLE: 'a, area, [tabindex], input, button, select, option, textarea, output, summary, video, audio, object, embed',
79            ONE_TIME_DATA_LOAD_MAX_NUM: 12,
80            ONE_TIME_DISPLAY_MAX_NUM: 12,
81            HISTORY_MAX_SAVED_NUM: 5,
82            HIDDEN_ATTR: 'IsHidden',
83            SHOW_ATTR: 'IsShow',
84            OPEN_ATTR: 'IsOpen',
85            LOAD_ATTR: 'IsLoad',
86            ACTIVE_ATTR: 'IsActive',
87            CHECKED_ATTR: 'IsChecked',
88            NORESULT_ATTR: 'IsNoResult',
89            SUGGEST_SHOW_ATTR: 'is-suggest-show',
90            SELECT_LANG_COOKIE_NAME: 'kpi_has_selectLang_' + self.AFFIX.COOKIE,
91            SELECT_MANUAL_LANG_COOKIE_NAME: 'kpi_has_selectLang_' + self.AFFIX.COOKIE + '_ma',
92            SELECT_FILE_COOKIE_NAME: 'kpi_has_selectFile_' + self.AFFIX.COOKIE,
93            SELECT_CATEGORY_COOKIE_NAME: 'kpi_has_selectCategory_' + self.AFFIX.COOKIE,
94            HISTORY_COOKIE_NAME: 'kpi_has_searchHistory_' + self.AFFIX.COOKIE,
95            DISCONTINUED_COOKIE_NAME: 'kpi_has_discontinued_' + self.AFFIX.COOKIE,
96            VIEW_COOKIE_NAME: 'kpi_has_view_' + self.AFFIX.COOKIE,
97            API_DOMAIN: GLOBAL.API_VERSION === 2 ?
98                `https://${self.AFFIX.ENVIRONMENT}api-web.keyence.${self.AFFIX.TLD}` :
99                GLOBAL.SITE_ID === 21 ?
100                    `https://${self.AFFIX.ENVIRONMENT}api-web.keyence.com.cn` :
101                    `https://${self.AFFIX.ENVIRONMENT}api-web.keyence.com`,
102            API_SITE_SETTINGS_PARAM: `${self.PARAMS.STG_FLAG}site_id=${GLOBAL.SITE_ID}&language_id=${GLOBAL.SITE_SETTINGS_LANG}`,
103        };
104        self.API_PATHNAME = {
105            PAGE: GLOBAL.API_PATHNAME?.PAGE ?? '/ajax/search/content/',
106            ASSET: GLOBAL.API_PATHNAME?.ASSET ?? '/ajax/search/asset/',
107            PRODUCT: GLOBAL.API_PATHNAME?.PRODUCT ?? '/ajax/search/product/',
108            DATA_SHEET: GLOBAL.API_PATHNAME?.DATA_SHEET ?? '/ajax/search/datasheet/',
109            SUGGEST_SERIES: GLOBAL.API_PATHNAME?.SUGGEST_SERIES ?? '/ajax/suggest/product_series/',
110            SUGGEST_MODEL: GLOBAL.API_PATHNAME?.SUGGEST_MODEL ?? '/ajax/suggest/product_model/',
111            SUGGEST_PAGE: GLOBAL.API_PATHNAME?.SUGGEST_PAGE ?? '/ajax/suggest/keyword/',
112            SUGGEST_ASSET: GLOBAL.API_PATHNAME?.SUGGEST_ASSET ?? '/ajax/suggest/asset/',
113            PRODUCT_COMPLETE_MATCH: GLOBAL.API_PATHNAME?.PRODUCT_COMPLETE_MATCH ?? '/ajax/search/perfect_match_product/',
114            DID_YOU_MEAN_MODEL: GLOBAL.API_PATHNAME?.DID_YOU_MEAN_MODEL ?? '/ajax/didyoumean/product_model/',
115        };
116        self.API_PATH = {
117            PAGE: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.PAGE}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
118            ASSET: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.ASSET}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
119            PRODUCT: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.PRODUCT}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
120            DATA_SHEET: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.DATA_SHEET}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
121            SUGGEST_SERIES: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.SUGGEST_SERIES}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
122            SUGGEST_MODEL: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.SUGGEST_MODEL}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
123            SUGGEST_PAGE: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.SUGGEST_PAGE}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
124            SUGGEST_ASSET: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.SUGGEST_ASSET}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
125            PRODUCT_COMPLETE_MATCH: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.PRODUCT_COMPLETE_MATCH}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
126            DID_YOU_MEAN_MODEL: `${self.CONFIG.API_DOMAIN}${self.API_PATHNAME.DID_YOU_MEAN_MODEL}?${self.CONFIG.API_SITE_SETTINGS_PARAM}&`,
127        };
128        self.getElem = {
129            docElement: doc.documentElement ? doc.documentElement : doc.body,
130            loadMoreBtn: doc.getElementById('JSLoadMoreBtn') ?
131                doc.getElementById('JSLoadMoreBtn') :
132                doc.getElementById('js-loadMoreResults-button'),
133            loadMoreBtnWrap: doc.getElementById('JSSearchMoreBtnWrapper') ?
134                doc.getElementById('JSSearchMoreBtnWrapper') :
135                doc.getElementById('js-loadMoreResults'),
136            loadMoreBtnLabel: doc.getElementById('js-loadMoreResults-label'),
137            searchPageList: doc.getElementById('JSSearchPageList') ?
138                doc.getElementById('JSSearchPageList') :
139                doc.getElementById('js-loadPageList'),
140            searchPageListTemplate: doc.getElementById('JSSearchPageListTemplate'),
141            searchDL: doc.getElementById('JSSearchDownloadList') ?
142                doc.getElementById('JSSearchDownloadList') :
143                doc.getElementById('js-loadAssets'),
144            searchDLCA: doc.getElementById('JSSearchDownloadListCA'),
145            searchDLTG: doc.getElementById('JSSearchDownloadListTG'),
146            searchDLSo: doc.getElementById('js-loadSoAssets'),
147            searchDLCd: doc.getElementById('js-loadCdAssets'),
148            searchDLMa: doc.getElementById('js-loadMaAssets'),
149            searchDLCa: doc.getElementById('js-loadCaAssets'),
150            searchDLTemplate: doc.getElementById('JSSearchDownloadListTemplate'),
151            searchDLSoTemplate: doc.getElementById('JSSearchDownloadSoListTemplate'),
152            searchDLCdTemplate: doc.getElementById('JSSearchDownloadCdListTemplate'),
153            searchDataSheetList: doc.getElementById('js-loadDataSheets'),
154            searchDataSheetListTemplate: doc.getElementById('JSSearchDataSheetListTemplate'),
155            searchSeriesList: doc.getElementById('JSSearchSeriesList'),
156            searchSeriesListTemplate: doc.getElementById('JSSearchSeriesListTemplate'),
157            searchModelList: doc.getElementById('JSSearchModelList'),
158            searchProbablyModelList: doc.getElementById('JSSearchProbablyModelList'),
159            searchModelListTemplate: doc.getElementById('JSSearchModelListTemplate'),
160            searchKISeriesListTemplate: doc.getElementById('JSSearchKISeriesListTemplate'),
161            searchHistoryTemplate: doc.getElementById('JSSearchHistoryTemplate'),
162            suggestKeywordsTemplate: doc.getElementById('JSSuggestKeywordsTemplate'),
163            suggestSeriesTemplate: doc.getElementById('JSSuggestSeriesTemplate'),
164            suggestModelTemplate: doc.getElementById('JSSuggestModelTemplate'),
165            suggestAssetTemplate: doc.getElementById('JSSuggestAssetTemplate'),
166            modelsListTemplate: doc.getElementById('JSModelsListTemplate'),
167            selectedModelsTemplate: doc.getElementById('JSSelectedModelsTemplate'),
168            loadResultsNav: doc.getElementById('js-loadResults-navigation'),
169            changeView: doc.getElementById('JSChangeView'),
170            selectTypes: doc.getElementById('JSSelectTypes'),
171            langSelectWrap: doc.getElementById('js-selectAssetslanguage'),
172            filterModels: doc.getElementById('js-filterModels'),
173            filterModelsBtn: doc.getElementById('js-filterModels-button'),
174            selectModels: doc.getElementById('js-selectModels'),
175            ModelsList: doc.getElementById('js-setModelsList'),
176            filterFileTypes: doc.getElementById('js-filterFileTypes'),
177            filterCategories: doc.getElementById('js-filterCategories'),
178            selectTypesHook: doc.getElementById('JSSelectTypesHook'),
179            selectTypesPulldown: doc.getElementById('JSSelectTypesPulldown'),
180            selectTypesLabel: doc.getElementById('JSSelectTypesLabel'),
181            selectTypesLength: doc.getElementById('JSSelectTypesLength'),
182            selectTypesBox: doc.getElementById('JSSelectTypesBox'),
183            selectTypesBtn: doc.getElementById('JSSelectTypesBtn'),
184            langSelectOpener: doc.getElementById('js-selectAssetslanguage-opener'),
185            langList: doc.getElementById('JSLangList') ?
186                doc.getElementById('JSLangList') :
187                doc.getElementById('js-selectAssetslanguage-list'),
188            allLangTemp: doc.getElementById('JSAllLangTemplate'),
189            lang1Temp: doc.getElementById('JSLang1Template'),
190            lang2Temp: doc.getElementById('JSLang2Template'),
191            discontinuedToggle: doc.getElementById('JSDiscontinuedToggle'),
192            drillDownNav: doc.getElementById('JSDrillDownNav'),
193            groupListTemplate: doc.getElementById('JSDrillDownNavGroupListTemplate'),
194            typeListTemplate: doc.getElementById('JSDrillDownNavTypeListTemplate'),
195            seriesListTemplate: doc.getElementById('JSDrillDownNavSeriesListTemplate'),
196            utilSuggestSeriesList: doc.getElementById('JSUtilSuggestSeriesList'),
197            suggestSeriesListWithPrioritySort: doc.getElementById('js-loadSeriesWithPrioritySort-list'),
198            utilSuggestModelList: doc.getElementById('JSUtilSuggestModelList'),
199            suggestModelsListWithPrioritySort: doc.getElementById('js-loadModelsWithPrioritySort-list'),
200            utilSuggestKeywordsList: doc.getElementById('JSUtilSuggestKeywordsList'),
201            utilSuggestAssetList: doc.getElementById('JSUtilSuggestAssetList'),
202            headerSuggestSeriesList: doc.getElementById('JSHeaderSuggestSeriesList'),
203            headerSuggestModelList: doc.getElementById('JSHeaderSuggestModelList'),
204            headerSuggestKeywordsList: doc.getElementById('JSHeaderSuggestKeywordsList'),
205            mainContForm: doc.getElementById('form0'),
206            productsSuggestFilter: doc.getElementById('IncludeDiscontinuedProducts'),
207            categorySPLabel: doc.getElementById('JSCategorySPLabel'),
208            categoryPCLabel: doc.getElementById('JSCategoryPCLabel'),
209            drillDownSPButtonList: doc.getElementById('JSDrillDownSPButtonList'),
210            drillDownSPSelect: doc.getElementById('JSDrillDownSPSelect'),
211            drillDownSPReset: doc.getElementById('JSDrillDownSPReset'),
212            menuOverlay: doc.getElementById('js-menu-overlay'),
213        };
214        self.getAttr = {
215            loadStartText: K_S.getElem.loadMoreBtn ? K_S.getElem.loadMoreBtn.getAttribute('data-load-text') : null,
216            loadingText: K_S.getElem.loadMoreBtn ? K_S.getElem.loadMoreBtn.getAttribute('data-loading-text') : null,
217            openText: K_S.getElem.drillDownNav ? K_S.getElem.drillDownNav.getAttribute('data-open-text') : null,
218            closeText: K_S.getElem.drillDownNav ? K_S.getElem.drillDownNav.getAttribute('data-close-text') : null,
219            groupHierarchy: K_S.getElem.groupListTemplate ? K_S.getElem.groupListTemplate.getAttribute('data-hierarchy') : null,
220            typeHierarchy: K_S.getElem.typeListTemplate ? K_S.getElem.typeListTemplate.getAttribute('data-hierarchy') : null,
221            seriesHierarchy: K_S.getElem.seriesListTemplate ? K_S.getElem.seriesListTemplate.getAttribute('data-hierarchy') : null,
222        };
223
224        self.polyfill.setChildNodeRemove();
225        self.polyfill.setNodeListForEach();
226        self.polyfill.setElemClosest();
227        self.polyfill.setObjectAssign();
228    };
229
230    doc.addEventListener('DOMContentLoaded', function () {
231        K_S.runDomReady();
232    }, false);
233
234    win.addEventListener('popstate', function (e) {
235        if (e.state) {
236            return;
237        }
238
239        if (!win.location.search && win.location.hash) {
240            return;
241        }
242
243        if (!win.location.hash && win.location.href.split('#')[1] === '') {
244            return;
245        }
246
247        win.location.reload();
248    }, false);
249
250    win.addEventListener('pageshow', function (e) {
251        var userAgent = win.navigator.userAgent.toLowerCase();
252
253        if (userAgent.indexOf('safari') !== -1 && userAgent.indexOf('chrome') === -1 && userAgent.indexOf('edge') === -1) {
254            if (e.persisted) {
255                win.location.reload();
256            }
257        }
258    }, false);
259
260    win.addEventListener('load', function () {
261        K_S.runLoad();
262    }, false);
263
264    win.addEventListener('unload', function () {
265    }, false);
266
267    K_S.fn = {};
268    K_S.fn.setSuggest = {};
269    K_S.fn.setDrillDown = {};
270    K_S.runDomReady = function () {
271        var self = this;
272        var promise = Promise.resolve();
273
274        K_S.init();
275        promise.then(function () {
276            self.fn.setChangeSubmitDestination();
277            self.fn.setSearchQueryTakeover();
278            self.fn.setLangPulldown();
279            self.fn.setFilePulldown();
280            self.fn.setFilterByFileTypes();
281            self.fn.setFilterByCategories();
282            self.fn.setFilterByModels();
283            self.fn.setDiscontinuedCookie();
284            self.fn.setToggleDiscontinued();
285            self.fn.setSearchString();
286            self.fn.setDrillDown.filterClear();
287            K_S.fn.setDrillDown.selectTarget();
288        }).then(function () {
289            self.fn.setSelectTypes();
290            self.fn.updateAssetsByLangSelect();
291            self.fn.updateAssetsByFileTypeSelect();
292            self.fn.updateAssetsByCategorySelect();
293            self.fn.updateAssetsByModelSelect();
294            self.fn.setLoadAssets(K_S.getElem.searchDL);
295            self.fn.setLoadAssets(K_S.getElem.searchDLCA);
296            self.fn.setLoadAssets(K_S.getElem.searchDLTG);
297            self.fn.setLoadAssets(K_S.getElem.searchDLSo);
298            self.fn.setLoadAssets(K_S.getElem.searchDLCd);
299            self.fn.setLoadAssets(K_S.getElem.searchDLMa);
300            self.fn.setLoadAssets(K_S.getElem.searchDLCa);
301            self.fn.setLoadDataSheets();
302            self.fn.setLoadSeries();
303            self.fn.setLoadPages();
304            self.fn.setLoadModels();
305            self.fn.setLoadProbablyTheseModels();
306            self.fn.setSuggest.run();
307            self.fn.setSubmit();
308            self.fn.setChangeView();
309            self.fn.setLoadMore();
310            self.fn.setSearchModal();
311        });
312    };
313
314    K_S.runLoad = function () {
315    };
316
317    K_S.fn.setChangeSubmitDestination = function () {
318        var root = doc.querySelectorAll('.JSChangeSubmitDestination');
319        var setWhenClick;
320
321        if (!root.length) {
322            return;
323        }
324
325        setWhenClick = function (e) {
326            var self = this;
327            var href = self.href;
328            var form = self.closest('form') ? self.closest('form') : self.closest('.JSSearchSuggest').querySelector('form');
329
330            e.preventDefault();
331            form.setAttribute('action', href);
332            form.submit();
333        };
334
335        root.forEach(function (selector) {
336            selector.querySelectorAll('a').forEach(function (items) {
337                items.addEventListener('click', setWhenClick, false);
338            });
339        });
340    };
341
342    K_S.fn.setSearchQueryTakeover = function () {
343        var root = doc.querySelectorAll('.JSSearchQueryTakeover');
344        var assetPageParamElm = doc.getElementById('JSAssetPageParam');
345        var input;
346        var fn = {};
347
348        if (!root.length || !K_S.getElem.mainContForm) {
349            return;
350        }
351
352        fn.createGroupIDHidden = function (dict) {
353            var groupIDInput = doc.createElement('input');
354
355            groupIDInput.type = 'hidden';
356            groupIDInput.id = 'JSGroupIDPageParam';
357            groupIDInput.name = 'group_id';
358            if (dict.group_id) {
359                groupIDInput.value = decodeURIComponent(dict.group_id);
360                K_S.getElem.mainContForm.appendChild(groupIDInput);
361            }
362        };
363
364        fn.createTypeIDHidden = function (dict) {
365            var typeIDInput = doc.createElement('input');
366
367            typeIDInput.type = 'hidden';
368            typeIDInput.id = 'JSTypeIDPageParam';
369            typeIDInput.name = 'type_id';
370            if (dict.type_id) {
371                typeIDInput.value = decodeURIComponent(dict.type_id);
372                K_S.getElem.mainContForm.appendChild(typeIDInput);
373            }
374        };
375
376        fn.createSeriesIDHidden = function (dict) {
377            var seriesIDInput = doc.createElement('input');
378
379            seriesIDInput.type = 'hidden';
380            seriesIDInput.id = 'JSSeriesIDPageParam';
381            seriesIDInput.name = 'webseries_id';
382            if (dict.webseries_id) {
383                seriesIDInput.value = decodeURIComponent(dict.webseries_id);
384                K_S.getElem.mainContForm.appendChild(seriesIDInput);
385            }
386        };
387
388        input = K_S.getElem.mainContForm.querySelector('.JSSearchSuggestInput');
389        fn.setWhenClick = function (e) {
390            var self = this;
391            var href = self.href;
392            var dict = util.makeQueryIntoDict();
393            var pageParam = '';
394            var value;
395
396            e.preventDefault();
397            value = input.value.trim();
398            if (value) {
399                input.value = value;
400            } else {
401                input.value = '';
402            }
403
404            if (href.split('mode=')[1]) {
405                pageParam = href.split('mode=')[1];
406                pageParam = pageParam.slice(0, 2);
407                if (assetPageParamElm) {
408                    assetPageParamElm.value = pageParam;
409                }
410            } else {
411                if (assetPageParamElm) {
412                    assetPageParamElm.value = '';
413                }
414            }
415
416            fn.createGroupIDHidden(dict);
417            fn.createTypeIDHidden(dict);
418            fn.createSeriesIDHidden(dict);
419
420            K_S.getElem.mainContForm.setAttribute('action', self.href);
421            K_S.getElem.mainContForm.submit();
422        };
423
424        root.forEach(function (selector) {
425            selector.querySelectorAll('a').forEach(function (items) {
426                items.addEventListener('click', fn.setWhenClick, false);
427            });
428        });
429    };
430
431    K_S.fn.setLangPulldown = function () {
432        var siteLang = GLOBAL.SITE_LANG ? GLOBAL.SITE_LANG : [];
433        var manualLang = GLOBAL.MANUAL_LANG ? GLOBAL.MANUAL_LANG : [];
434        var lang1Vals = GLOBAL.SELECT_LANG1 ? GLOBAL.SELECT_LANG1 : {};
435        var lang2Vals = GLOBAL.SELECT_LANG2 ? GLOBAL.SELECT_LANG2 : {};
436        var allLangVals = GLOBAL.SELECT_LANG ? GLOBAL.SELECT_LANG : {};
437        var lang1ValsKeys = Object.keys(lang1Vals);
438        var lang2ValsKeys = Object.keys(lang2Vals);
439        var allLangValsKeys = Object.keys(allLangVals);
440        var dict = util.makeQueryIntoDict();
441        var langCookie = dict.mode === 'ma' ?
442            util.getCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME) :
443            util.getCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME);
444        var langParam = dict.language_type_id;
445        var optionDefautlVal = null;
446        var fragment = doc.createDocumentFragment();
447        var defaultOptionElem = doc.createElement('option');
448        var optionArr = [];
449        var cookieArr = [];
450        var lang1Arr = [];
451        var lang2Arr = [];
452        var langAllArr = [];
453        var fn = {};
454        var selectedLangLabel = '';
455        var unselectedLabel = '';
456
457        if (!K_S.getElem.langList) {
458            return;
459        }
460
461        fn.setDefaultLang = function (langValue) {
462            var langArr = util.removeEmptyArr(langValue);
463
464            langArr.forEach(function (items) {
465                K_S.getElem.langList.querySelectorAll('[value="' + items + '"]').forEach(function (selector) {
466                    if (selector.nodeName === 'OPTION') {
467                        optionArr.push(selector);
468                    } else {
469                        selector.checked = true;
470                    }
471                });
472            });
473            if (optionArr.length) {
474                if (K_S.getElem.selectTypesPulldown) {
475                    K_S.getElem.selectTypesPulldown.disabled = false;
476                    K_S.getElem.selectTypesPulldown.value = optionArr[0].value;
477                }
478                if (K_S.getElem.langList.querySelector('[value="other"]')) {
479                    K_S.getElem.langList.querySelector('[value="other"]').checked = true;
480                }
481            }
482        };
483
484        fn.createMainLangElem = function (target, array, callback) {
485            if (!K_S.getElem.lang1Temp) {
486                return;
487            }
488
489            target.forEach(function (items) {
490                var lang1NodeClone = util.createNodeClone(K_S.getElem.lang1Temp, 'li');
491                var lang1Selector = lang1NodeClone.querySelector('[name="lang1"]');
492                var lang1Label = lang1NodeClone.querySelector('.LangLabel');
493
494                if (array && array.indexOf(items) > -1) {
495                    return;
496                }
497
498                if (lang1Selector) {
499                    lang1Selector.value = items;
500                }
501                if (lang1Label) {
502                    lang1Label.textContent = lang1Vals[items] || lang2Vals[items];
503                }
504                if (langCookie && lang1Selector) {
505                    langCookie.forEach(function (cookies) {
506                        if (items === cookies) {
507                            lang1Selector.checked = true;
508                        }
509                    });
510                }
511                fragment.appendChild(lang1NodeClone);
512
513                if (callback) {
514                    callback(items);
515                }
516            });
517        };
518
519        fn.createOtherLangElem = function () {
520            if (!K_S.getElem.lang2Temp) {
521                return;
522            }
523
524            lang2ValsKeys.forEach(function (items) {
525                var lang2NodeClone = util.createNodeClone(K_S.getElem.lang2Temp, 'div');
526                var lang2Selector = lang2NodeClone.querySelector('option');
527
528                if (lang2Arr.indexOf(items) > -1) {
529                    return;
530                }
531
532                if (lang2Selector) {
533                    lang2Selector.value = items;
534                    lang2Selector.textContent = lang2Vals[items];
535
536                    if (langCookie) {
537                        langCookie.forEach(function (cookies) {
538                            if (items === cookies) {
539                                if (K_S.getElem.selectTypesPulldown) {
540                                    K_S.getElem.selectTypesPulldown.disabled = false;
541                                }
542                                lang2Selector.selected = true;
543                                if (K_S.getElem.langList.querySelector('[value="other"]')) {
544                                    K_S.getElem.langList.querySelector('[value="other"]').checked = true;
545                                }
546                            }
547                        });
548                    }
549                    fragment.appendChild(lang2Selector);
550                }
551            });
552        };
553
554        fn.createAllLangElem = function (target, array, callback) {
555            if (K_S.getElem.lang1Temp ||
556               !K_S.getElem.allLangTemp ||
557               !K_S.getElem.langSelectWrap ||
558               !K_S.getElem.langSelectOpener
559            ) {
560                return;
561            }
562
563            target.forEach(function (items) {
564                var langNodeClone = util.createNodeClone(K_S.getElem.allLangTemp, 'p');
565                var langSelector = langNodeClone.querySelector('[name="lang"]');
566                var langLabel = langNodeClone.querySelector('.js-selectAssetslanguage-label');
567
568                if (array && array.indexOf(items) > -1) {
569                    return;
570                }
571
572                if (langSelector) {
573                    langSelector.value = items;
574                }
575                if (langLabel) {
576                    langLabel.textContent = allLangVals[items];
577                }
578                if (langCookie && langSelector) {
579                    langCookie.forEach(function (cookies) {
580                        if (items === cookies) {
581                            langSelector.checked = true;
582                            selectedLangLabel += ', ' + langLabel.textContent;
583                        }
584                    });
585                }
586                fragment.appendChild(langNodeClone);
587
588                if (callback) {
589                    callback(items);
590                }
591            });
592
593            selectedLangLabel = selectedLangLabel.replace(/^, /, '');
594            K_S.getElem.langSelectOpener.textContent = selectedLangLabel;
595            K_S.getElem.langSelectOpener.setAttribute('aria-label', GLOBAL.TRANSLATION.Selected + ': ' + selectedLangLabel);
596        };
597
598        fn.setLangArr = function (items) {
599            if (lang1Vals.hasOwnProperty(items)) {
600                lang1Arr.push(items);
601            }
602            if (lang2Vals.hasOwnProperty(items)) {
603                lang2Arr.push(items);
604            }
605        };
606
607        fn.setLangAllArr = function (items) {
608            if (allLangVals.hasOwnProperty(items)) {
609                langAllArr.push(items);
610            }
611        };
612
613        fn.updateCookies = function () {
614            if (langParam) {
615                langParam.split(',').forEach(function (items) {
616                    if (K_S.getElem.lang1Temp && lang1ValsKeys.indexOf(items) > -1) {
617                        cookieArr.push(items);
618                    }
619                    if (K_S.getElem.lang2Temp && lang2ValsKeys.indexOf(items) > -1) {
620                        cookieArr.push(items);
621                    }
622                    if (K_S.getElem.allLangTemp && allLangValsKeys.indexOf(items) > -1) {
623                        cookieArr.push(items);
624                    }
625                });
626                if (cookieArr.length) {
627                    if (dict.mode === 'ma') {
628                        util.setCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME, JSON.stringify(cookieArr));
629                    } else {
630                        util.setCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME, JSON.stringify(cookieArr));
631                    }
632                } else {
633                    if (!langCookie) {
634                        if (dict.mode === 'ma') {
635                            util.setCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME, JSON.stringify(manualLang));
636                        } else {
637                            util.setCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME, JSON.stringify(siteLang));
638                        }
639                    }
640                }
641            } else {
642                if (!langCookie) {
643                    if (dict.mode === 'ma') {
644                        util.setCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME, JSON.stringify(manualLang));
645                    } else {
646                        util.setCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME, JSON.stringify(siteLang));
647                    }
648                }
649            }
650        };
651
652        fn.outputElems = function () {
653            langCookie = dict.mode === 'ma' ?
654                util.getCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME) :
655                util.getCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME);
656
657            if (langCookie) {
658                langCookie = JSON.parse(langCookie);
659            }
660
661            if (dict.mode === 'ma') {
662                fn.createMainLangElem(manualLang, null, fn.setLangArr);
663                fn.createAllLangElem(manualLang, null, fn.setLangAllArr);
664            } else {
665                fn.createMainLangElem(siteLang, null, fn.setLangArr);
666                fn.createAllLangElem(siteLang, null, fn.setLangAllArr);
667            }
668
669            fn.createMainLangElem(Object.keys(lang1Vals), lang1Arr, null);
670            fn.createAllLangElem(Object.keys(allLangVals), langAllArr, null);
671
672            if (!selectedLangLabel && K_S.getElem.langSelectWrap &&
673                K_S.getElem.langSelectWrap.dataset.languagesSelectUnselectedLabelValue
674            ) {
675                unselectedLabel = K_S.getElem.langSelectWrap.dataset.languagesSelectUnselectedLabelValue;
676                K_S.getElem.langSelectOpener.textContent = unselectedLabel;
677            }
678
679            K_S.getElem.langList.insertBefore(fragment, K_S.getElem.langList.firstChild);
680
681            fn.createOtherLangElem();
682
683            if (K_S.getElem.selectTypesPulldown) {
684                optionDefautlVal = K_S.getElem.selectTypesPulldown.getAttribute('data-default-value');
685            }
686            defaultOptionElem.value = '';
687            defaultOptionElem.textContent = optionDefautlVal;
688            if (K_S.getElem.selectTypesPulldown) {
689                K_S.getElem.selectTypesPulldown.appendChild(defaultOptionElem);
690                K_S.getElem.selectTypesPulldown.appendChild(fragment);
691            }
692        };
693
694        fn.init = function () {
695            fn.updateCookies();
696            fn.outputElems();
697        };
698
699        fn.init();
700    };
701
702    K_S.fn.setFilterByModels = function () {
703        var downloadsModels = win.tkt_downloadModels;
704        var listFragment = doc.createDocumentFragment();
705        var selectedFragment = doc.createDocumentFragment();
706        var dict = util.makeQueryIntoDict();
707        var productIDParam = dict.modelId;
708        var fn = {};
709        var disabledLength = 0;
710
711        if (!K_S.getElem.modelsListTemplate ||
712            !K_S.getElem.selectedModelsTemplate ||
713            !K_S.getElem.ModelsList ||
714            !K_S.getElem.selectModels ||
715            !K_S.getElem.filterModels ||
716            !K_S.getElem.filterModelsBtn ||
717            !downloadsModels
718        ) {
719            return;
720        }
721
722        fn.createPseudoFocusElem = function () {
723            var newElem = doc.createElement('div');
724            var modelList = K_S.getElem.ModelsList;
725
726            newElem.tabIndex = 0;
727            newElem.style.outline = 0;
728            modelList.parentNode.insertBefore(newElem, modelList);
729        };
730
731        fn.createModelsList = function () {
732            if (win.createModelsListCompleted === true) {
733                return;
734            }
735
736            downloadsModels.models.forEach(function (items) {
737                var modelsNodeClone = util.createNodeClone(K_S.getElem.modelsListTemplate, 'div');
738                var models = util.checkSupportsTemp() ?
739                    modelsNodeClone.querySelector('.js-setModelsList-child') :
740                    modelsNodeClone;
741                var modelsCheckbox = modelsNodeClone.querySelector('.js-setModelsList-checkbox');
742                var modelsLabel = modelsNodeClone.querySelector('.js-setModelsList-label');
743                var selectedNodeClone = util.createNodeClone(K_S.getElem.selectedModelsTemplate, 'li');
744                var selected = util.checkSupportsTemp() ?
745                    selectedNodeClone.querySelector('.js-selectModels-child') :
746                    selectedNodeClone;
747                var selectedLabel = selectedNodeClone.querySelector('.js-selectModels-label');
748                var deleteButton = selectedNodeClone.querySelector('.js-selectModels-deleteButton');
749
750                if (models) {
751                    models.setAttribute('data-id', items.id);
752                }
753
754                if (modelsCheckbox) {
755                    modelsCheckbox.value = items.name;
756
757                    if (!items.hasAssets) {
758                        modelsCheckbox.disabled = true;
759                        disabledLength++;
760                    }
761                }
762
763                if (modelsLabel) {
764                    modelsLabel.textContent = items.name;
765                }
766
767                listFragment.appendChild(modelsNodeClone);
768
769                if (selected) {
770                    selected.setAttribute('data-value', items.name);
771                    selected.hidden = true;
772                    selected.setAttribute('data-id', items.id);
773                }
774
775                if (selectedLabel) {
776                    selectedLabel.textContent = items.name;
777                }
778
779                if (deleteButton) {
780                    deleteButton.value = items.name;
781                    deleteButton.setAttribute('aria-label', deleteButton.dataset.defaultLabel + ': ' + items.name);
782                }
783
784                selectedFragment.appendChild(selectedNodeClone);
785            });
786
787            K_S.getElem.ModelsList.appendChild(listFragment);
788            K_S.getElem.selectModels.appendChild(selectedFragment);
789
790            if (downloadsModels.models.length === disabledLength) {
791                fn.createPseudoFocusElem();
792            }
793
794            win.createModelsListCompleted = true;
795        };
796
797        fn.setDefaultLabel = function () {
798            if (K_S.getElem.filterModels.dataset.downloadModelFilterUnselectedLabelValue
799            ) {
800                K_S.getElem.filterModelsBtn.textContent = K_S.getElem.filterModels.dataset.downloadModelFilterUnselectedLabelValue;
801            }
802
803        };
804
805        fn.showSelectedModels = function () {
806            var selectedItems = K_S.getElem.selectModels.querySelectorAll('.js-selectModels-child');
807            var models = K_S.getElem.ModelsList.querySelectorAll('.js-setModelsList-child');
808
809            if (!selectedItems.length ||
810                !models.length
811            ) {
812                return;
813            }
814
815            downloadsModels.selected.forEach(function (items) {
816                selectedItems.forEach(function (lists) {
817                    if (items === lists.dataset.id) {
818                        lists.hidden = false;
819                    }
820                });
821
822                models.forEach(function (lists) {
823                    if (items === lists.dataset.id) {
824                        lists.querySelector('.js-setModelsList-checkbox').checked = true;
825                    }
826                });
827            });
828        };
829
830        fn.initDisplayByParams = function () {
831            var selectedItems = K_S.getElem.selectModels.querySelectorAll('.js-selectModels-child');
832            var models = K_S.getElem.ModelsList.querySelectorAll('.js-setModelsList-child');
833            var uncheckAllButton = document.querySelector('[data-download-model-filter-target="uncheckAllButton"]');
834            var uncheckFlag = false;
835
836            if (!selectedItems.length ||
837                !models.length
838            ) {
839                return;
840            }
841
842            if (productIDParam) {
843                K_S.getElem.filterModelsBtn.textContent = '';
844                productIDParam.split(',').forEach(function (items) {
845                    selectedItems.forEach(function (lists) {
846                        if (items === lists.dataset.id) {
847                            lists.hidden = false;
848                        }
849                    });
850
851                    models.forEach(function (lists) {
852                        if (items === lists.dataset.id) {
853                            lists.querySelector('.js-setModelsList-checkbox').checked = true;
854                            uncheckFlag = true;
855                        }
856                    });
857                });
858
859                if (uncheckAllButton) {
860                    if (uncheckFlag) {
861                        uncheckAllButton.disabled = false;
862                    }
863                }
864            }
865        };
866
867        fn.setModelsResultsNum = function () {
868            var resultsNumberElm = K_S.getElem.filterModels.querySelectorAll('.js-setModelsList-resultsNumber');
869
870            if (!resultsNumberElm.length) {
871                return;
872            }
873
874            resultsNumberElm.forEach(function (items) {
875                items.textContent = downloadsModels.models.length;
876            });
877        };
878
879        fn.init = function () {
880            fn.createModelsList();
881            fn.setDefaultLabel();
882            fn.setModelsResultsNum();
883            fn.initDisplayByParams();
884        };
885
886        fn.init();
887    };
888
889    K_S.fn.updateAssetsByModelSelect = function () {
890        var observer = null;
891        var observerConfig = {
892            subtree: true,
893            attributes: true,
894        };
895        var fn = {};
896
897        if (!K_S.getElem.selectModels) {
898            return;
899        }
900
901        fn.update = function () {
902            var dict = util.makeQueryIntoDict();
903            var selectModelsList = K_S.getElem.selectModels.querySelectorAll('.js-selectModels-child:not([hidden])');
904            var modelsArr = [];
905
906            selectModelsList.forEach(function (items) {
907                modelsArr.push(items.dataset.id);
908            });
909
910            dict.modelId = modelsArr.join(',');
911            dict.o = 0;
912
913            util.updateBrowserHistory(dict);
914
915            setTimeout(function () {
916                K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&o=0');
917            }, 200);
918        };
919
920        observer = new MutationObserver(function () {
921            fn.update();
922        });
923
924        observer.observe(K_S.getElem.selectModels, observerConfig);
925    };
926
927    K_S.fn.setFilterByFileTypes = function () {
928        var defaultFileArr = [];
929        var cookieArr = [];
930        var fileCookie = util.getCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME);
931        var fileTypeKeys = Object.keys(GLOBAL.SELECT_FILE_TYPE);
932        var dict = util.makeQueryIntoDict();
933        var fileParam = dict.assetdetail_type_id;
934        var fileTypes;
935        var checkedFileTypes;
936        var fileTypesGroup;
937        var checkedCount = 0;
938
939        if (!K_S.getElem.filterFileTypes) {
940            return;
941        }
942
943        fileTypes = K_S.getElem.filterFileTypes.querySelectorAll('[name="ft"]');
944        checkedFileTypes = K_S.getElem.filterFileTypes.querySelectorAll('[name="ft"]:checked');
945        fileTypesGroup = K_S.getElem.filterFileTypes.querySelector('[name="all"]');
946
947        if (fileParam) {
948            fileParam.split(',').forEach(function (items) {
949                if (fileTypeKeys.indexOf(items) > -1) {
950                    cookieArr.push(items);
951                }
952            });
953            if (cookieArr.length) {
954                util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify(cookieArr));
955            } else {
956                if (!fileCookie) {
957                    util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify([]));
958                }
959            }
960        } else {
961            if (!fileCookie) {
962                util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify([]));
963            }
964        }
965
966        fileCookie = util.getCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME);
967
968        if (fileCookie) {
969            fileCookie = JSON.parse(fileCookie);
970
971            if (!fileTypes.length) {
972                return;
973            }
974
975            fileTypes.forEach(function (items) {
976                items.checked = false;
977                fileCookie.forEach(function (cookies) {
978                    if (items.value === cookies) {
979                        items.checked = true;
980                        checkedCount++;
981                    }
982                });
983            });
984
985            if (checkedCount && fileTypesGroup) {
986                fileTypesGroup.indeterminate = true;
987            }
988
989            if (fileTypes.length === checkedCount && fileTypesGroup) {
990                fileTypesGroup.indeterminate = false;
991                fileTypesGroup.checked = true;
992            }
993
994            if (!checkedCount) {
995                util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify([]));
996            }
997        } else {
998            if (checkedFileTypes.length) {
999                checkedFileTypes.forEach(function (items) {
1000                    defaultFileArr.push(items.value);
1001                });
1002            }
1003            util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify(defaultFileArr));
1004        }
1005    };
1006
1007    K_S.fn.setFilePulldown = function () {
1008        var defaultFileArr = [];
1009        var selectTypesData;
1010        var changeElem;
1011        var checkedElem;
1012        var fileCookie = util.getCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME);
1013        var fileTypeKeys = Object.keys(GLOBAL.SELECT_FILE_TYPE);
1014        var dict = util.makeQueryIntoDict();
1015        var fileParam = dict.assetdetail_type_id;
1016        var cookieArr = [];
1017
1018        if (!K_S.getElem.selectTypes) {
1019            return;
1020        }
1021
1022        selectTypesData = K_S.getElem.selectTypes.getAttribute('data-type');
1023        changeElem = K_S.getElem.selectTypes.querySelectorAll('[type="checkbox"]');
1024        checkedElem = K_S.getElem.selectTypes.querySelectorAll(':checked');
1025
1026        if (selectTypesData === 'file') {
1027            if (fileParam) {
1028                fileParam.split(',').forEach(function (items) {
1029                    if (fileTypeKeys.indexOf(items) > -1) {
1030                        cookieArr.push(items);
1031                    }
1032                });
1033                if (cookieArr.length) {
1034                    util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify(cookieArr));
1035                } else {
1036                    if (!fileCookie) {
1037                        util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify([]));
1038                    }
1039                }
1040            } else {
1041                if (!fileCookie) {
1042                    util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify([]));
1043                }
1044            }
1045
1046            fileCookie = util.getCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME);
1047
1048            if (fileCookie) {
1049                fileCookie = JSON.parse(fileCookie);
1050                changeElem.forEach(function (items) {
1051                    items.checked = false;
1052                    fileCookie.forEach(function (cookies) {
1053                        if (items.value === cookies) {
1054                            items.checked = true;
1055                        }
1056                    });
1057                });
1058            } else {
1059                if (checkedElem.length) {
1060                    checkedElem.forEach(function (items) {
1061                        defaultFileArr.push(items.value);
1062                    });
1063                }
1064                util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify(defaultFileArr));
1065            }
1066        }
1067    };
1068
1069    K_S.fn.updateAssetsByFileTypeSelect = function () {
1070        var fileTypeCheckbox = null;
1071        var observer = null;
1072        var observerConfig = {
1073            attributes: true,
1074            attributeOldValue: true,
1075        };
1076        var fn = {};
1077
1078        if (!K_S.getElem.filterFileTypes) {
1079            return;
1080        }
1081
1082        fileTypeCheckbox = K_S.getElem.filterFileTypes.querySelectorAll('[name="ft"]');
1083
1084        fn.writeDataChecked = function () {
1085            var fileTypeArr = [];
1086
1087            if (!fileTypeCheckbox.length) {
1088                return;
1089            }
1090
1091            K_S.getElem.filterFileTypes.querySelectorAll('[name="ft"]:checked').forEach(function (items) {
1092                fileTypeArr.push(items.value);
1093            });
1094            K_S.getElem.filterFileTypes.setAttribute('data-checked', fileTypeArr.join(','));
1095        };
1096
1097        fn.update = function () {
1098            var dict = util.makeQueryIntoDict();
1099            var checkedFileTypes = K_S.getElem.filterFileTypes.querySelectorAll('[name="ft"]:checked');
1100            var fileArr = [];
1101
1102            checkedFileTypes.forEach(function (items) {
1103                fileArr.push(items.value);
1104            });
1105
1106            util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify(fileArr));
1107            dict.assetdetail_type_id = fileArr.join(',');
1108            dict.o = 0;
1109            util.updateBrowserHistory(dict);
1110
1111            setTimeout(function () {
1112                K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&o=0');
1113            }, 200);
1114        };
1115
1116        fileTypeCheckbox.forEach(function (items) {
1117            items.addEventListener('change', fn.writeDataChecked);
1118        });
1119
1120        observer = new MutationObserver(function (e) {
1121            if (e[0].oldValue !== e[0].target.dataset.checked) {
1122                fn.update();
1123            }
1124        });
1125
1126        observer.observe(K_S.getElem.filterFileTypes, observerConfig);
1127    };
1128
1129    K_S.fn.setFilterByCategories = function () {
1130        var elems = {
1131            root: K_S.getElem.filterCategories,
1132        };
1133        var categoryCookieName = util.addAssetTypeToString(K_S.CONFIG.SELECT_CATEGORY_COOKIE_NAME);
1134        var categoryCookie = util.getCookie(categoryCookieName);
1135        var dict = util.makeQueryIntoDict();
1136        var categoryParam = dict.mode === 'ds' ? dict.product_type_id : dict.assetdetail_type_id;
1137        var cookieArr = [];
1138        var categoryValues = [];
1139        var checkedCount = 0;
1140        var fn = {};
1141
1142        if (!elems.root) {
1143            return;
1144        }
1145
1146        fn.configElems = function () {
1147            elems.categories = elems.root.querySelectorAll('[name="category"]');
1148            elems.categoriesGroup = elems.root.querySelector('[name="all"]');
1149
1150            elems.categories.forEach(function (items) {
1151                categoryValues.push(items.value);
1152            });
1153        };
1154
1155        fn.setCategoryCookie = function () {
1156            if (categoryParam) {
1157                categoryParam.split(',').forEach(function (items) {
1158                    if (categoryValues.indexOf(items) > -1) {
1159                        cookieArr.push(items);
1160                    }
1161                });
1162                if (cookieArr.length) {
1163                    util.setCookie(categoryCookieName, JSON.stringify(cookieArr));
1164                } else {
1165                    if (!categoryCookie) {
1166                        util.setCookie(categoryCookieName, JSON.stringify([]));
1167                    }
1168                }
1169            } else {
1170                if (!categoryCookie) {
1171                    util.setCookie(categoryCookieName, JSON.stringify([]));
1172                }
1173            }
1174        };
1175
1176        fn.display = function () {
1177            categoryCookie = util.getCookie(categoryCookieName);
1178
1179            if (categoryCookie) {
1180                categoryCookie = JSON.parse(categoryCookie);
1181
1182                elems.categories.forEach(function (items) {
1183                    items.checked = false;
1184                    categoryCookie.forEach(function (cookies) {
1185                        if (items.value === cookies) {
1186                            items.checked = true;
1187                            checkedCount++;
1188                        }
1189                    });
1190                });
1191
1192                if (checkedCount && elems.categoriesGroup) {
1193                    elems.categoriesGroup.indeterminate = true;
1194                }
1195
1196                if (elems.categories.length === checkedCount && elems.categoriesGroup) {
1197                    elems.categoriesGroup.indeterminate = false;
1198                    elems.categoriesGroup.checked = true;
1199                }
1200
1201                if (!checkedCount) {
1202                    util.setCookie(categoryCookieName, JSON.stringify([]));
1203                }
1204            }
1205        };
1206
1207        fn.init = function () {
1208            fn.configElems();
1209            fn.setCategoryCookie();
1210            fn.display();
1211        };
1212
1213        fn.init();
1214    };
1215
1216    K_S.fn.updateAssetsByCategorySelect = function () {
1217        var elems = {
1218            root: K_S.getElem.filterCategories,
1219        };
1220        var categoryCookieName = util.addAssetTypeToString(K_S.CONFIG.SELECT_CATEGORY_COOKIE_NAME);
1221        var observer = null;
1222        var observerConfig = {
1223            attributes: true,
1224            attributeOldValue: true,
1225        };
1226        var fn = {};
1227
1228        if (!elems.root) {
1229            return;
1230        }
1231
1232        elems.categories = elems.root.querySelectorAll('[name="category"]');
1233
1234        fn.writeDataChecked = function () {
1235            var checkedCategories = elems.root.querySelectorAll('[name="category"]:checked');
1236            var categories = [];
1237
1238            checkedCategories.forEach(function (items) {
1239                categories.push(items.value);
1240            });
1241            elems.root.setAttribute('data-checked', categories.join(','));
1242        };
1243
1244        fn.update = function () {
1245            var checkedCategories = elems.root.querySelectorAll('[name="category"]:checked');
1246            var dict = util.makeQueryIntoDict();
1247            var categories = [];
1248
1249            checkedCategories.forEach(function (items) {
1250                categories.push(items.value);
1251            });
1252
1253            util.setCookie(categoryCookieName, JSON.stringify(categories));
1254
1255            if (dict.mode === 'ds') {
1256                dict.product_type_id = categories.join(',');
1257            } else {
1258                dict.assetdetail_type_id = categories.join(',');
1259            }
1260
1261            dict.o = 0;
1262            util.updateBrowserHistory(dict);
1263
1264            setTimeout(function () {
1265                if (dict.mode === 'ds') {
1266                    K_S.fn.setLoadDataSheets('&o=0');
1267                } else {
1268                    K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&o=0');
1269                }
1270            }, 200);
1271        };
1272
1273        elems.categories.forEach(function (items) {
1274            items.addEventListener('change', fn.writeDataChecked);
1275        });
1276
1277        observer = new MutationObserver(function (e) {
1278            if (e[0].oldValue !== e[0].target.dataset.checked) {
1279                fn.update();
1280            }
1281        });
1282
1283        observer.observe(elems.root, observerConfig);
1284    };
1285
1286    K_S.fn.updateAssetsByLangSelect = function () {
1287        var observer = null;
1288        var observerConfig = {
1289            childList: true,
1290        };
1291        var fn = {};
1292
1293        if (!K_S.getElem.langSelectWrap ||
1294            !K_S.getElem.langSelectOpener
1295        ) {
1296            return;
1297        }
1298
1299        fn.update = function () {
1300            var dict = util.makeQueryIntoDict();
1301            var checkedLangs = K_S.getElem.langSelectWrap.querySelectorAll('[type="checkbox"]:checked');
1302            var langArr = [];
1303
1304            checkedLangs.forEach(function (items) {
1305                langArr.push(items.value);
1306            });
1307
1308            if (dict.mode === 'ma') {
1309                util.setCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME, JSON.stringify(langArr));
1310            } else {
1311                util.setCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME, JSON.stringify(langArr));
1312            }
1313
1314            dict.language_type_id = langArr.join(',');
1315            dict.o = 0;
1316            util.updateBrowserHistory(dict);
1317
1318            setTimeout(function () {
1319                K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&o=0');
1320            }, 200);
1321        };
1322
1323        observer = new MutationObserver(function () {
1324            fn.update();
1325        });
1326
1327        observer.observe(K_S.getElem.langSelectOpener, observerConfig);
1328    };
1329
1330    K_S.fn.setSelectTypes = function () {
1331        var checkedArr = [];
1332        var height = 0;
1333        var isAnimate = false;
1334        var selectTypesData;
1335        var selectTypesDefaultLabel;
1336        var checkedElem;
1337        var cbOther;
1338        var isOpen;
1339        var slideToggle;
1340        var changeTxt;
1341        var updateData;
1342        var runForEachScreen;
1343
1344        if (!K_S.getElem.selectTypes ||
1345            !K_S.getElem.selectTypesBtn ||
1346            !K_S.getElem.selectTypesBox ||
1347            !K_S.getElem.selectTypesLabel ||
1348            !K_S.getElem.selectTypesLength ||
1349            !K_S.getElem.selectTypesHook ||
1350            !GLOBAL.SELECT_LANG1 ||
1351            !GLOBAL.SELECT_LANG2
1352        ) {
1353            return;
1354        }
1355
1356        doc.querySelector('body').setAttribute('data-select-types', 'true');
1357        selectTypesData = K_S.getElem.selectTypes.getAttribute('data-type');
1358        selectTypesDefaultLabel = K_S.getElem.selectTypesLabel.getAttribute('data-label');
1359        checkedElem = K_S.getElem.selectTypes.querySelectorAll(':checked');
1360        changeTxt = function (label, checkedLen) {
1361            K_S.getElem.selectTypesLabel.textContent = label;
1362            K_S.getElem.selectTypesLength.textContent = checkedLen;
1363        };
1364
1365        if (!checkedElem.length) {
1366            changeTxt(selectTypesDefaultLabel, '');
1367        }
1368
1369        checkedElem.forEach(function (items) {
1370            if (items.value && items.value !== 'other') {
1371                checkedArr.push(items.value);
1372            }
1373        });
1374
1375        if (checkedArr.length === 1) {
1376            if (GLOBAL.SELECT_LANG1[checkedArr[0]]) {
1377                changeTxt(GLOBAL.SELECT_LANG1[checkedArr[0]], '');
1378            } else if (GLOBAL.SELECT_LANG2[checkedArr[0]]) {
1379                changeTxt(GLOBAL.SELECT_LANG2[checkedArr[0]], '');
1380            } else {
1381                changeTxt(checkedArr[0], '');
1382            }
1383        }
1384
1385        if (checkedArr.length > 1) {
1386            changeTxt(selectTypesDefaultLabel, checkedArr.length);
1387            K_S.getElem.selectTypesLength.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
1388        }
1389
1390        if (checkedArr.length === 0) {
1391            changeTxt(selectTypesDefaultLabel, '');
1392        }
1393
1394        slideToggle = {
1395            slideDown: function () {
1396                if (K_S.getElem.selectTypesBox.offsetHeight !== 0) {
1397                    requestAnimationFrame(slideToggle.slideDown);
1398
1399                    return;
1400                }
1401                K_S.getElem.selectTypesBox.style.height = height + 'px';
1402            },
1403            slideUp: function () {
1404                if (K_S.getElem.selectTypesBox.offsetHeight !== height) {
1405                    requestAnimationFrame(slideToggle.slideUp);
1406
1407                    return;
1408                }
1409                K_S.getElem.selectTypesBox.style.height = 0;
1410            },
1411            init: function () {
1412                if (isAnimate) {
1413                    return;
1414                }
1415
1416                isOpen = K_S.getElem.selectTypes.classList.contains(K_S.CONFIG.OPEN_ATTR);
1417                isAnimate = true;
1418
1419                if (isOpen) {
1420                    height = K_S.getElem.selectTypesBox.offsetHeight;
1421                    K_S.getElem.selectTypesBox.style.height = height + 'px';
1422                    slideToggle.slideUp();
1423
1424                    return;
1425                }
1426
1427                K_S.getElem.selectTypes.classList.add(K_S.CONFIG.OPEN_ATTR);
1428                height = K_S.getElem.selectTypesBox.offsetHeight;
1429                K_S.getElem.selectTypesBox.style.height = 0;
1430                slideToggle.slideDown();
1431            },
1432        };
1433
1434
1435        runForEachScreen = function () {
1436            if (K_S.CONFIG.LARGE_SCREEN_MQ.matches) {
1437                K_S.getElem.selectTypesHook.removeEventListener('click', slideToggle.init, false);
1438            } else {
1439                K_S.getElem.selectTypesHook.addEventListener('click', slideToggle.init, false);
1440            }
1441        };
1442
1443        runForEachScreen();
1444        K_S.CONFIG.LARGE_SCREEN_MQ.addListener(runForEachScreen);
1445
1446        K_S.getElem.selectTypesBox.addEventListener('transitionend', function () {
1447            if (isOpen) {
1448                K_S.getElem.selectTypes.classList.remove(K_S.CONFIG.OPEN_ATTR);
1449            }
1450            K_S.getElem.selectTypesBox.style.height = '';
1451            isAnimate = false;
1452        }, false);
1453
1454        if (K_S.getElem.selectTypesPulldown) {
1455            cbOther = K_S.getElem.selectTypes.querySelector('input[value="other"]');
1456            K_S.getElem.selectTypesPulldown.addEventListener('change', function () {
1457                if (this.value) {
1458                    cbOther.checked = true;
1459                } else {
1460                    cbOther.checked = false;
1461                }
1462            }, false);
1463        }
1464
1465        updateData = function (e) {
1466            var cbChecked = K_S.getElem.selectTypes.querySelectorAll('[type="checkbox"]:checked');
1467            var cbCheckedLen = cbChecked.length;
1468            var promise = Promise.resolve();
1469            var dict = util.makeQueryIntoDict();
1470            var langArr = [];
1471            var fileArr = [];
1472
1473            e.preventDefault();
1474            cbChecked.forEach(function (items) {
1475                if (items.value === 'other') {
1476                    if (Boolean(K_S.getElem.selectTypesPulldown.value) === false) {
1477                        if ((cbCheckedLen - 1) > 1) {
1478                            changeTxt(selectTypesDefaultLabel, (cbCheckedLen - 1));
1479                            K_S.getElem.selectTypesLength.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
1480                        } else if ((cbCheckedLen - 1) === 1) {
1481                            changeTxt(GLOBAL.SELECT_LANG1[cbChecked[0].value], '');
1482                            K_S.getElem.selectTypesLength.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1483                        } else {
1484                            changeTxt(selectTypesDefaultLabel, '');
1485                            K_S.getElem.selectTypesLength.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1486                        }
1487                    } else {
1488                        if (cbCheckedLen > 1) {
1489                            changeTxt(selectTypesDefaultLabel, cbCheckedLen);
1490                            K_S.getElem.selectTypesLength.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
1491                        } else {
1492                            changeTxt(GLOBAL.SELECT_LANG2[K_S.getElem.selectTypesPulldown.value], '');
1493                            K_S.getElem.selectTypesLength.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1494                        }
1495                        if (selectTypesData !== 'file') {
1496                            langArr.push(K_S.getElem.selectTypesPulldown.value);
1497                        }
1498                    }
1499                } else {
1500                    if (cbCheckedLen > 1) {
1501                        changeTxt(selectTypesDefaultLabel, cbCheckedLen);
1502                        K_S.getElem.selectTypesLength.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
1503                    } else {
1504                        if (GLOBAL.SELECT_LANG1[cbChecked[0].value]) {
1505                            changeTxt(GLOBAL.SELECT_LANG1[cbChecked[0].value], '');
1506                        } else {
1507                            changeTxt(cbChecked[0].nextElementSibling.textContent, '');
1508                        }
1509                        K_S.getElem.selectTypesLength.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1510                    }
1511                    if (selectTypesData === 'file') {
1512                        fileArr.push(items.value);
1513                    } else {
1514                        langArr.push(items.value);
1515                    }
1516                }
1517            });
1518
1519            if (!cbCheckedLen) {
1520                changeTxt(selectTypesDefaultLabel, '');
1521                K_S.getElem.selectTypesLength.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1522            }
1523
1524            if (selectTypesData === 'file') {
1525                util.setCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME, JSON.stringify(fileArr));
1526                dict.assetdetail_type_id = fileArr.join(',');
1527            } else {
1528                if (dict.mode === 'ma') {
1529                    util.setCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME, JSON.stringify(langArr));
1530                } else {
1531                    util.setCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME, JSON.stringify(langArr));
1532                }
1533                dict.language_type_id = langArr.join(',');
1534            }
1535
1536            util.updateBrowserHistory(dict);
1537
1538            promise.then(function () {
1539                if (!doc.body.getAttribute('data-search-modal')) {
1540                    slideToggle.init();
1541                }
1542            }).then(function () {
1543                var modalWrapper = doc.getElementById('SearchModal');
1544                var focusTarget = modalWrapper && modalWrapper.childNodes[1] ?
1545                    doc.querySelector('[data-modal-target="' + modalWrapper.childNodes[1].id + '"]') : null;
1546
1547                if (focusTarget) {
1548                    focusTarget.classList.add(K_S.CONFIG.ACTIVE_ATTR);
1549                    focusTarget.addEventListener('animationend', function () {
1550                        this.classList.remove(K_S.CONFIG.ACTIVE_ATTR);
1551                    }, false);
1552                }
1553                K_S.fn.closeSearchModal();
1554                setTimeout(function () {
1555                    K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&o=0');
1556                }, 200);
1557            });
1558        };
1559
1560        K_S.getElem.selectTypesBtn.addEventListener('click', updateData, false);
1561    };
1562
1563    K_S.fn.setChangeView = function () {
1564        var viewAttr = 'data-view';
1565        var viewData1 = 'Grid';
1566        var viewData2 = 'List';
1567        var tabList;
1568        var activeHref;
1569        var setWhenClick;
1570        var changeViewList;
1571        var changeViewHook;
1572        var viewCookie;
1573        var pageParam;
1574        var setCtrlColumns;
1575
1576        if (!K_S.getElem.changeView || !K_S.getElem.searchDL) {
1577            return;
1578        }
1579
1580        tabList = doc.querySelector('.SearchTabList');
1581        changeViewList = K_S.getElem.changeView.querySelectorAll('#' + K_S.getElem.changeView.id + '>li');
1582        if (tabList) {
1583            activeHref = tabList.querySelector('li.' + K_S.CONFIG.ACTIVE_ATTR + '> a').href;
1584            pageParam = activeHref.split('mode=')[1].slice(0, 2);
1585            viewCookie = util.getCookie(K_S.CONFIG.VIEW_COOKIE_NAME + '_' + pageParam);
1586        }
1587
1588        setCtrlColumns = function (targetVal) {
1589            if (targetVal === viewData1 + '_2') {
1590                K_S.getElem.searchDL.classList.remove('Col4');
1591                K_S.getElem.searchDL.classList.add('Col2');
1592            } else if (targetVal === viewData1 + '_4') {
1593                K_S.getElem.searchDL.classList.remove('Col2');
1594                K_S.getElem.searchDL.classList.add('Col4');
1595            }
1596        };
1597
1598        if (viewCookie && viewCookie !== viewData1) {
1599            K_S.getElem.changeView.querySelector('li.' + K_S.CONFIG.ACTIVE_ATTR).classList.remove(K_S.CONFIG.ACTIVE_ATTR);
1600            K_S.getElem.changeView.querySelector('[' + viewAttr + '="' + viewCookie + '"]').parentNode.classList.add(K_S.CONFIG.ACTIVE_ATTR);
1601            if (viewCookie.indexOf(viewData1) > -1) {
1602                setCtrlColumns(viewCookie);
1603                viewCookie = viewData1;
1604            }
1605            K_S.getElem.searchDL.setAttribute(viewAttr, viewCookie);
1606        }
1607
1608        setWhenClick = function (e) {
1609            var self = this;
1610            var btnData = self.getAttribute(viewAttr);
1611            var activeList = K_S.getElem.changeView.querySelector('.' + K_S.CONFIG.ACTIVE_ATTR);
1612            var parent = self.parentNode;
1613
1614            e.preventDefault();
1615            if (!parent.classList.contains(K_S.CONFIG.ACTIVE_ATTR)) {
1616                activeList.classList.remove(K_S.CONFIG.ACTIVE_ATTR);
1617                parent.classList.add(K_S.CONFIG.ACTIVE_ATTR);
1618
1619                if (btnData.indexOf(viewData1) > -1) {
1620                    setCtrlColumns(btnData);
1621                    K_S.getElem.searchDL.setAttribute(viewAttr, viewData1);
1622                } else {
1623                    K_S.getElem.searchDL.setAttribute(viewAttr, viewData2);
1624                }
1625            }
1626
1627            if (tabList) {
1628                util.setCookie(K_S.CONFIG.VIEW_COOKIE_NAME + '_' + pageParam, btnData);
1629            }
1630        };
1631
1632        changeViewList.forEach(function (items) {
1633            changeViewHook = items.querySelector('button');
1634            changeViewHook.addEventListener('click', setWhenClick, false);
1635        });
1636    };
1637
1638    K_S.fn.setSuggest.run = function () {
1639        var setSuggest = this;
1640        var dict = util.makeQueryIntoDict();
1641        var searchSuggest = doc.querySelectorAll('.JSSearchSuggest');
1642        var timer = null;
1643        var loadMS = 400;
1644        var historyStr = 'History';
1645        var eventFn = {};
1646        var langCookie;
1647        var fileCookie;
1648        var discontinuedCookie;
1649        var loadData;
1650        var assetParam;
1651        var seriesParam;
1652        var modelParam;
1653        var keywordsParam;
1654        var setParam;
1655        var selectLangParam;
1656        var selectFileParam;
1657        var discontinuedParam;
1658        var setFilter;
1659
1660        if (!searchSuggest.length) {
1661            return;
1662        }
1663
1664        setFilter = function () {
1665            langCookie = dict.mode === 'ma' ? util.getCookie(K_S.CONFIG.SELECT_MANUA
1665L_LANG_COOKIE_NAME) : util.getCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME);
1666            fileCookie = util.getCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME);
1667            discontinuedCookie = util.getCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME);
1668            selectLangParam = '';
1669            selectFileParam = '';
1670            if (langCookie) {
1671                langCookie = JSON.parse(langCookie);
1672                langCookie.forEach(function (cookies) {
1673                    selectLangParam += cookies + ',';
1674                });
1675                selectLangParam = selectLangParam.slice(0, -1);
1676            }
1677
1678            if (fileCookie) {
1679                fileCookie = JSON.parse(fileCookie);
1680                fileCookie.forEach(function (cookies) {
1681                    selectFileParam += GLOBAL.SELECT_FILE_TYPE[cookies] + ',';
1682                });
1683                selectFileParam = selectFileParam.slice(0, -1);
1684            }
1685
1686            if (typeof discontinuedCookie !== 'undefined') {
1687                if (discontinuedCookie === '1') {
1688                    discontinuedParam = 1;
1689                } else {
1690                    discontinuedParam = 0;
1691                }
1692            } else {
1693                discontinuedParam = 0;
1694            }
1695
1696            if (!K_S.getElem.selectTypes) {
1697                if (!K_S.getElem.langSelectWrap) {
1698                    selectLangParam = '';
1699
1700                    if (!K_S.getElem.filterFileTypes) {
1701                        selectFileParam = '';
1702                    }
1703                }
1704
1705                if (K_S.getElem.langSelectWrap || !K_S.getElem.filterFileTypes) {
1706                    selectFileParam = '';
1707                }
1708            }
1709
1710            if (K_S.getElem.selectTypes) {
1711                if (K_S.getElem.selectTypes.getAttribute('data-type') === 'file') {
1712                    selectLangParam = '';
1713                } else {
1714                    selectFileParam = '';
1715                }
1716            }
1717        };
1718
1719        setParam = function (trimVal) {
1720            setFilter();
1721            assetParam = K_S.API_PATH.SUGGEST_ASSET
1722                         + 'language_type_id='
1723                         + selectLangParam
1724                         + '&assetdetail_type_id='
1725                         + selectFileParam
1726                         + '&asset_type_id='
1727                         + GLOBAL.ASSET_TYPE_ID
1728                         + '&q='
1729                         + trimVal
1730                         + '&l='
1731                         + 4;
1732            seriesParam = K_S.API_PATH.SUGGEST_SERIES
1733                          + 'discontinued_flag='
1734                          + discontinuedParam
1735                          + '&q='
1736                          + trimVal;
1737            modelParam = K_S.API_PATH.SUGGEST_MODEL
1738                         + 'discontinued_flag='
1739                         + discontinuedParam
1740                         + '&q='
1741                         + trimVal
1742                         + '&l='
1743                         + 10;
1744            keywordsParam = K_S.API_PATH.SUGGEST_PAGE
1745                            + 'q_word='
1746                            + trimVal
1747                            + '&l='
1748                            + 10;
1749        };
1750
1751        loadData = function (root, suggestTarget) {
1752            if (!suggestTarget.classList.contains('SearchAllCategory')) {
1753                if (root.classList.contains('JSUtilSuggest')) {
1754                    setSuggest.loadAssets(K_S.getElem.utilSuggestAssetList, assetParam);
1755                    setSuggest.loadSeries(K_S.getElem.utilSuggestSeriesList, seriesParam + '&l=4');
1756                    setSuggest.loadModels(K_S.getElem.utilSuggestModelList, modelParam);
1757                    setSuggest.loadSeriesWithPrioritySort(K_S.getElem.suggestSeriesListWithPrioritySort, seriesParam + '&l=3');
1758                    setSuggest.loadModelsWithPrioritySort(K_S.getElem.suggestModelsListWithPrioritySort, modelParam);
1759                }
1760            } else {
1761                if (root.classList.contains('JSHeaderSuggest')) {
1762                    setSuggest.loadSeries(K_S.getElem.headerSuggestSeriesList, seriesParam + '&l=3');
1763                    setSuggest.loadModels(K_S.getElem.headerSuggestModelList, modelParam);
1764                }
1765                if (root.classList.contains('JSUtilSuggest')) {
1766                    setSuggest.loadSeries(K_S.getElem.utilSuggestSeriesList, seriesParam + '&l=3');
1767                    setSuggest.loadModels(K_S.getElem.utilSuggestModelList, modelParam);
1768                }
1769            }
1770        };
1771
1772        searchSuggest.forEach(function (selector) {
1773            var suggestInput = selector.querySelector('.JSSearchSuggestInput');
1774            var suggestTarget = selector.querySelector('.JSSearchSuggestTarget');
1775            var suggestHistory = selector.querySelector('.JSSearchHistory');
1776            var suggestHistoryList = selector.querySelector('.JSSearchHistoryList');
1777            var suggestColumn = selector.querySelector('.JSSuggestColumn');
1778            var arrPageX = [];
1779            var arrPageY = [];
1780
1781            if (suggestInput && suggestInput.placeholder) {
1782                suggestInput.setAttribute('data-placeholder', suggestInput.placeholder);
1783            }
1784
1785            eventFn = {
1786                runWhenInput: function (e) {
1787                    var self = this;
1788
1789                    if (timer !== null) {
1790                        clearTimeout(timer);
1791                    }
1792
1793                    timer = setTimeout(function () {
1794                        var trimVal = encodeURIComponent(self.value.trim());
1795
1796                        setParam(trimVal);
1797                        if (!trimVal.length) {
1798                            if (suggestHistory && util.getCookie(K_S.CONFIG.HISTORY_COOKIE_NAME)) {
1799                                if (suggestHistoryList && suggestInput) {
1800                                    setSuggest.loadHistory(suggestHistoryList, suggestInput);
1801                                }
1802                                if (suggestTarget) {
1803                                    suggestTarget.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
1804                                    suggestTarget.classList.add(historyStr);
1805                                }
1806                                if (suggestColumn) {
1807                                    suggestColumn.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1808                                }
1809                                suggestHistory.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
1810                                if (e.target.closest('.JSHeaderSuggest')) {
1811                                    doc.body.classList.add(K_S.CONFIG.SUGGEST_SHOW_ATTR);
1812                                    if (K_S.getElem.menuOverlay) {
1813                                        K_S.getElem.menuOverlay.setAttribute('data-owner', 'suggest');
1814                                    }
1815                                }
1816                            } else {
1817                                if (suggestTarget) {
1818                                    suggestTarget.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1819                                }
1820                                if (suggestColumn) {
1821                                    suggestColumn.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1822                                }
1823                                if (e.target.closest('.JSHeaderSuggest')) {
1824                                    doc.body.classList.remove(K_S.CONFIG.SUGGEST_SHOW_ATTR);
1825                                }
1826                                if (suggestHistory) {
1827                                    suggestHistory.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1828                                }
1829                            }
1830                        } else {
1831                            if (suggestTarget) {
1832                                loadData(selector, suggestTarget);
1833                            }
1834                        }
1835                    }, loadMS);
1836                },
1837                runWhenFocusin: function (e) {
1838                    var self = this;
1839
1840                    if (timer !== null) {
1841                        clearTimeout(timer);
1842                    }
1843
1844                    self.placeholder = '';
1845                    doc.querySelectorAll('.JSSearchSuggestTarget').forEach(function (items) {
1846                        items.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1847                    });
1848
1849                    timer = setTimeout(function () {
1850                        var trimVal = encodeURIComponent(self.value.trim());
1851
1852                        setParam(trimVal);
1853                        if (!trimVal.length) {
1854                            if (suggestHistory && util.getCookie(K_S.CONFIG.HISTORY_COOKIE_NAME)) {
1855                                if (suggestHistoryList && suggestInput) {
1856                                    setSuggest.loadHistory(suggestHistoryList, suggestInput);
1857                                }
1858                                if (suggestTarget) {
1859                                    suggestTarget.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
1860                                    suggestTarget.classList.add(historyStr);
1861                                }
1862                                if (suggestColumn) {
1863                                    suggestColumn.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1864                                }
1865                                if (suggestHistory) {
1866                                    suggestHistory.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
1867                                }
1868                                if (e.target.closest('.JSHeaderSuggest')) {
1869                                    doc.body.classList.add(K_S.CONFIG.SUGGEST_SHOW_ATTR);
1870                                    if (K_S.getElem.menuOverlay) {
1871                                        K_S.getElem.menuOverlay.setAttribute('data-owner', 'suggest');
1872                                    }
1873                                }
1874                            }
1875                        } else {
1876                            if (suggestHistory) {
1877                                if (suggestTarget) {
1878                                    suggestTarget.classList.remove(historyStr);
1879                                }
1880                                suggestHistory.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1881                            }
1882                            if (suggestTarget) {
1883                                loadData(selector, suggestTarget);
1884                            }
1885                        }
1886                    }, loadMS);
1887                },
1888                closeSuggestBox: function (e) {
1889                    if (!e.target.closest('.JSSearchSuggestTarget') &&
1890                        !e.target.classList.contains('JSSearchSuggestInput')) {
1891                        clearTimeout(timer);
1892                        if (suggestTarget) {
1893                            suggestTarget.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1894                        }
1895                        doc.body.classList.remove(K_S.CONFIG.SUGGEST_SHOW_ATTR);
1896                    }
1897                },
1898                restorePlaceholder: function () {
1899                    var self = this;
1900                    var dataPlaceholder = self.getAttribute('data-placeholder');
1901
1902                    if (!dataPlaceholder) {
1903                        return;
1904                    }
1905
1906                    if (!encodeURIComponent(self.value.trim()).length) {
1907                        self.placeholder = dataPlaceholder;
1908                    }
1909                },
1910                onTouchstart: function (e) {
1911                    arrPageX.length = 0;
1912                    arrPageY.length = 0;
1913                    arrPageX.push(e.touches[0].pageX);
1914                    arrPageY.push(e.touches[0].pageY);
1915                },
1916                onTouchend: function (e) {
1917                    if (e.changedTouches[0].pageX === arrPageX[0] || e.changedTouches[0].pageY === arrPageY[0]) {
1918                        if (!e.target.closest('.JSSearchSuggestTarget') &&
1919                            !e.target.classList.contains('JSSearchSuggestInput')) {
1920                            clearTimeout(timer);
1921                            if (suggestTarget) {
1922                                suggestTarget.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1923                            }
1924                            doc.body.classList.remove(K_S.CONFIG.SUGGEST_SHOW_ATTR);
1925                        }
1926                    }
1927                },
1928            };
1929
1930            if (suggestInput) {
1931                suggestInput.addEventListener('input', eventFn.runWhenInput, false);
1932                suggestInput.addEventListener('focusin', eventFn.runWhenFocusin, false);
1933                suggestInput.addEventListener('focusout', eventFn.restorePlaceholder, false);
1934            }
1935            doc.addEventListener('click', eventFn.closeSuggestBox, false);
1936            doc.addEventListener('touchstart', eventFn.onTouchstart, false);
1937            doc.addEventListener('touchend', eventFn.onTouchend, false);
1938            doc.querySelectorAll(K_S.CONFIG.FOCUSABLE).forEach(function (selectors) {
1939                selectors.addEventListener('focusin', function (e) {
1940                    if (!e.target.closest('.JSSearchSuggest')) {
1941                        clearTimeout(timer);
1942                        if (suggestTarget) {
1943                            suggestTarget.classList.add(K_S.CONFIG.HIDDEN_ATTR);
1944                        }
1945                        doc.body.classList.remove(K_S.CONFIG.SUGGEST_SHOW_ATTR);
1946                    }
1947                }, false);
1948            });
1949        });
1950    };
1951
1952    K_S.fn.setSuggest.loadKeywords = function (outputSelector, loadPath) {
1953        var setSuggest = this;
1954        var fragment = doc.createDocumentFragment();
1955        var nodeClone;
1956        var keywords;
1957        var setWhenClick;
1958        var suggestBox;
1959
1960        if (!K_S.getElem.suggestKeywordsTemplate || !outputSelector) {
1961            return;
1962        }
1963
1964        setWhenClick = function (e) {
1965            var self = this;
1966            var suggestWrapper = self.closest('.JSSearchSuggest');
1967
1968            e.preventDefault();
1969            setSuggest.saveHistory(self);
1970            suggestWrapper.querySelector('.JSSearchSuggestInput').value = self.textContent;
1971            suggestWrapper.querySelector('.JSSearchButton').click();
1972        };
1973
1974        suggestBox = outputSelector.closest('.JSSearchSuggestTarget');
1975        outputSelector.querySelectorAll('#' + outputSelector.id + '>li').forEach(function (items) {
1976            items.remove();
1977        });
1978
1979        util.getJSON(loadPath).then(function (response) {
1980            if (response.length) {
1981                console.log('Keywords Suggest API: ' + loadPath);
1982                response.forEach(function (items) {
1983                    nodeClone = util.createNodeClone(K_S.getElem.suggestKeywordsTemplate, 'li');
1984                    keywords = nodeClone.querySelector('.Keywords');
1985
1986                    if (keywords) {
1987                        keywords.textContent = items.label;
1988                        keywords.addEventListener('click', setWhenClick, false);
1989                    }
1990
1991                    fragment.appendChild(nodeClone);
1992                });
1993
1994                outputSelector.appendChild(fragment);
1995            }
1996
1997            if (suggestBox) {
1998                setSuggest.changeDisplay(response, suggestBox, '.KeywordArea');
1999            }
2000
2001            if (!response.length) {
2002                if (suggestBox.classList.contains('SearchAllCategory')) {
2003                    suggestBox.querySelector('.KeywordArea').closest('.Column').classList.add(K_S.CONFIG.HIDDEN_ATTR);
2004                }
2005            }
2006        }).catch(function (error) {
2007            console.log(error);
2008        });
2009    };
2010
2011    K_S.fn.setSuggest.loadSeries = function (outputSelector, loadPath) {
2012        var setSuggest = this;
2013        var fragment = doc.createDocumentFragment();
2014        var trackingParam = 'search_sl';
2015        var trackingVal = 1;
2016        var nodeClone;
2017        var series;
2018        var thumbnail;
2019        var thumbnailLink;
2020        var catalog;
2021        var spec;
2022        var model;
2023        var price;
2024        var setWhenClick;
2025        var commonName;
2026        var name;
2027        var disconLabel;
2028        var suggestBox;
2029        var dlAssetId;
2030
2031        if (!K_S.getElem.suggestSeriesTemplate || !outputSelector) {
2032            return;
2033        }
2034
2035        setWhenClick = function (e) {
2036            var self = this;
2037
2038            e.preventDefault();
2039            setSuggest.saveHistory(self);
2040            location.href = self.href;
2041        };
2042
2043        suggestBox = outputSelector.closest('.JSSearchSuggestTarget');
2044
2045        util.getJSON(loadPath).then(function (response) {
2046            outputSelector.querySelectorAll('#' + outputSelector.id + '>li').forEach(function (items) {
2047                items.remove();
2048            });
2049            if (response.result.series.length) {
2050                console.log('Series Suggest API: ' + loadPath);
2051                suggestBox.querySelectorAll('.JSSuggestSeriesResultNum').forEach(function (items) {
2052                    items.textContent = response.result.attribute.total;
2053                });
2054                response.result.series.forEach(function (items) {
2055                    nodeClone = util.createNodeClone(K_S.getElem.suggestSeriesTemplate, 'li');
2056                    series = nodeClone.querySelector('.Series');
2057                    commonName = nodeClone.querySelector('.CommonName');
2058                    name = nodeClone.querySelector('.Name');
2059                    disconLabel = nodeClone.querySelector('.DisconLabel');
2060                    thumbnailLink = nodeClone.querySelector('.ThumbnailLink');
2061                    thumbnail = nodeClone.querySelector('.Thumbnail img');
2062                    catalog = nodeClone.querySelector('.Catalog');
2063                    spec = nodeClone.querySelector('.Spec');
2064                    model = nodeClone.querySelector('.Model');
2065                    price = nodeClone.querySelector('.Price');
2066                    dlAssetId = '';
2067
2068                    if (series) {
2069                        series.href = items.url + '?' + trackingParam + '=' + trackingVal;
2070                        series.addEventListener('click', setWhenClick, false);
2071                    }
2072
2073                    if (commonName) {
2074                        commonName.textContent = items.webseriescommon_name;
2075                    }
2076
2077                    if (name) {
2078                        name.textContent = ' ' + items.display_name;
2079                    }
2080
2081                    if (thumbnail) {
2082                        thumbnail.src = GLOBAL.ORIGINAL_DOMAIN
2083                                        + '/img/products/series/'
2084                                        + items.product_thumbnail_id
2085                                        + '_M.jpg';
2086
2087                        if (thumbnailLink) {
2088                            thumbnailLink.href = items.url + '?' + trackingParam + '=' + trackingVal;
2089                        }
2090                    }
2091
2092                    if (catalog) {
2093                        if (items.catalog_id) {
2094                            items.catalog_id.split(',').forEach(function (assetId) {
2095                                dlAssetId += 'dlAssetId=' + assetId + '&';
2096                            });
2097                            catalog.href = GLOBAL.ORIGINAL_DOMAIN
2098                                           + '/download/download/confirmation/?'
2099                                           + dlAssetId.slice(0, -1)
2100                                           + '&' + trackingParam + '=' + trackingVal;
2101                        } else {
2102                            catalog.parentNode.remove();
2103                        }
2104                    }
2105
2106                    if (disconLabel) {
2107                        disconLabel.remove();
2108                    }
2109
2110                    if (spec) {
2111                        if (items.spec_url) {
2112                            spec.href = items.spec_url + '?' + trackingParam + '=' + trackingVal;
2113                        } else {
2114                            spec.parentNode.remove();
2115                        }
2116                    }
2117
2118                    if (model) {
2119                        if (items.model_url) {
2120                            model.href = items.model_url + '?' + trackingParam + '=' + trackingVal;
2121                        } else {
2122                            model.parentNode.remove();
2123                        }
2124                    }
2125
2126                    if (price) {
2127                        price.href = `${items.url}get-pricing/?${trackingParam}=${trackingVal}`;
2128                    }
2129
2130                    fragment.appendChild(nodeClone);
2131                });
2132
2133                outputSelector.appendChild(fragment);
2134            }
2135
2136            if (suggestBox) {
2137                setSuggest.changeDisplay(response.result.series, suggestBox, '.SeriesArea');
2138            }
2139        }).catch(function (error) {
2140            console.log(error);
2141        });
2142    };
2143
2144    K_S.fn.setSuggest.loadSeriesWithPrioritySort = function (outputSelector, loadPath) {
2145        const setSuggest = this;
2146        const seriesArea = doc.querySelector('.js-loadSeriesWithPrioritySort-target');
2147        const suggestBox = outputSelector ? outputSelector.closest('.JSSearchSuggestTarget') : null;
2148        const template = K_S.getElem.suggestSeriesTemplate;
2149        const fragment = doc.createDocumentFragment();
2150        const fn = {};
2151
2152        if (!seriesArea || !template || !outputSelector || !suggestBox) {
2153            return;
2154        }
2155
2156        fn.setWhenClick = function (e) {
2157            const self = this;
2158            const inputElm = self.closest('.JSSearchSuggest') ?
2159                self.closest('.JSSearchSuggest').querySelector('.JSSearchSuggestInput') : null;
2160
2161            e.preventDefault();
2162            if (inputElm) {
2163                inputElm.value = self.dataset.webseriesName;
2164            }
2165            suggestBox.classList.add(K_S.CONFIG.HIDDEN_ATTR);
2166
2167            const dict = util.makeQueryIntoDict();
2168            const promise = Promise.resolve();
2169            const loadMoreTarget = doc.querySelector('.JSLoadMoreTarget');
2170            const searchLinkList = K_S.getElem.drillDownNav ? K_S.getElem.drillDownNav.querySelector('.SearchLinkList01') : null;
2171            const webSeriesId = self.dataset.webseriesId;
2172
2173            if (!loadMoreTarget || !searchLinkList) {
2174                return;
2175            }
2176
2177            promise.then(() => {
2178                loadMoreTarget.setAttribute('data-group-id', '');
2179                loadMoreTarget.setAttribute('data-type-id', '');
2180                loadMoreTarget.setAttribute('data-series-id', webSeriesId);
2181                dict.q = '';
2182                dict.s = 1;
2183                dict.group_id = '';
2184                dict.type_id = '';
2185                dict.webseries_id = webSeriesId;
2186                dict.o = 0;
2187
2188                util.updateBrowserHistory(dict);
2189                if (K_S.getElem.categorySPLabel && K_S.getElem.categoryPCLabel) {
2190                    K_S.getElem.categorySPLabel.textContent = K_S.getElem.categoryPCLabel.textContent;
2191                }
2192            }).then(() => {
2193                K_S.fn.setSuggest.saveHistory(self);
2194                K_S.fn.setLoadAssets(K_S.getElem.searchDL, `&webseries_id=${webSeriesId}&s=1&o=0`, false, false, true);
2195                searchLinkList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2196            });
2197        };
2198
2199        util.getJSON(loadPath).then((response) => {
2200            outputSelector.textContent = '';
2201            outputSelector.dataset.hasResults = false;
2202
2203            if (response.result.series.length) {
2204                win.console.log(`Series Suggest API: ${loadPath}`);
2205                outputSelector.dataset.hasResults = true;
2206
2207                response.result.series.forEach((item) => {
2208                    const nodeClone = util.createNodeClone(template);
2209                    const series = nodeClone.querySelector('.Series');
2210                    const commonName = nodeClone.querySelector('.CommonName');
2211                    const name = nodeClone.querySelector('.Name');
2212                    const disconLabel = nodeClone.querySelector('.DisconLabel');
2213                    const thumbnail = nodeClone.querySelector('.Thumbnail img');
2214                    const catalog = nodeClone.querySelector('.Catalog');
2215                    const price = nodeClone.querySelector('.Price');
2216                    const list = nodeClone.querySelector('.prd-layout-cluster');
2217
2218                    if (series) {
2219                        series.dataset.webseriesId = item.webseries_id;
2220                        series.dataset.webseriesName = item.webseries_name;
2221                        series.addEventListener('click', fn.setWhenClick, false);
2222                    }
2223
2224                    if (commonName) {
2225                        commonName.textContent = item.webseriescommon_name;
2226                    }
2227
2228                    if (name) {
2229                        name.textContent = item.display_name;
2230                    }
2231
2232                    if (thumbnail) {
2233                        thumbnail.src = `${GLOBAL.ORIGINAL_DOMAIN}/img/products/series/${item.product_thumbnail_id}_M.jpg`;
2234                    }
2235
2236                    if (disconLabel) {
2237                        disconLabel.remove();
2238                    }
2239
2240                    if (catalog) {
2241                        if (catalog.closest('li')) {
2242                            catalog.closest('li').remove();
2243                        }
2244                    }
2245
2246                    if (price) {
2247                        if (price.closest('li')) {
2248                            price.closest('li').remove();
2249                        }
2250                    }
2251
2252                    if (list) {
2253                        if (!list.children.length) {
2254                            list.remove();
2255                        }
2256                    }
2257
2258                    fragment.appendChild(nodeClone);
2259                });
2260
2261                outputSelector.appendChild(fragment);
2262            }
2263
2264            setSuggest.changeDisplay(response.result.series, suggestBox, '.js-loadSeriesWithPrioritySort-target');
2265        }).catch((error) => {
2266            win.console.log(error);
2267        });
2268    };
2269
2270    K_S.fn.setSuggest.loadModels = function (outputSelector, loadPath) {
2271        var setSuggest = this;
2272        var fragment = doc.createDocumentFragment();
2273        var trackingParam = 'search_sl';
2274        var trackingVal = 1;
2275        var nodeClone;
2276        var model;
2277        var modelName;
2278        var setWhenClick;
2279        var suggestBox;
2280
2281        if (!K_S.getElem.suggestModelTemplate || !outputSelector) {
2282            return;
2283        }
2284
2285        setWhenClick = function (e) {
2286            var self = this;
2287
2288            e.preventDefault();
2289            setSuggest.saveHistory(self);
2290            location.href = self.href;
2291        };
2292
2293        suggestBox = outputSelector.closest('.JSSearchSuggestTarget');
2294
2295        util.getJSON(loadPath).then(function (response) {
2296            outputSelector.querySelectorAll('#' + outputSelector.id + '>li').forEach(function (items) {
2297                items.remove();
2298            });
2299            if (response.result.models.length) {
2300                console.log('Model Suggest API: ' + loadPath);
2301                suggestBox.querySelectorAll('.JSSuggestModelResultNum').forEach(function (items) {
2302                    items.textContent = response.result.attribute.total;
2303                });
2304                response.result.models.forEach(function (items) {
2305                    nodeClone = util.createNodeClone(K_S.getElem.suggestModelTemplate, 'li');
2306                    model = nodeClone.querySelector('.Model');
2307                    modelName = nodeClone.querySelector('.Name');
2308
2309                    if (model) {
2310                        if (!modelName) {
2311                            model.textContent = items.webproduct_name;
2312                        }
2313                        model.href = items.url + '?' + trackingParam + '=' + trackingVal;
2314                        model.addEventListener('click', setWhenClick, false);
2315                    }
2316
2317                    if (modelName) {
2318                        modelName.textContent = items.webproduct_name;
2319                    }
2320
2321                    fragment.appendChild(nodeClone);
2322                });
2323
2324                outputSelector.appendChild(fragment);
2325            }
2326            if (suggestBox) {
2327                setSuggest.changeDisplay(response.result.models, suggestBox, '.ModelArea');
2328            }
2329        }).catch(function (error) {
2330            console.log(error);
2331        });
2332    };
2333
2334    K_S.fn.setSuggest.loadModelsWithPrioritySort = function (outputSelector, loadPath) {
2335        const setSuggest = this;
2336        const modelsArea = doc.querySelector('.js-loadModelsWithPrioritySort-target');
2337        const suggestBox = outputSelector ? outputSelector.closest('.JSSearchSuggestTarget') : null;
2338        const template = K_S.getElem.suggestModelTemplate;
2339        const fragment = doc.createDocumentFragment();
2340        const fn = {};
2341
2342        if (!modelsArea || !template || !outputSelector || !suggestBox) {
2343            return;
2344        }
2345
2346        fn.setWhenClick = function (e) {
2347            const self = this;
2348            const inputElm = self.closest('.JSSearchSuggest') ?
2349                self.closest('.JSSearchSuggest').querySelector('.JSSearchSuggestInput') : null;
2350            const displayName = self.querySelector('.Name').innerHTML;
2351
2352            e.preventDefault();
2353            if (inputElm) {
2354                inputElm.value = displayName;
2355            }
2356            suggestBox.classList.add(K_S.CONFIG.HIDDEN_ATTR);
2357
2358            const dict = util.makeQueryIntoDict();
2359            const promise = Promise.resolve();
2360            const loadMoreTarget = doc.querySelector('.JSLoadMoreTarget');
2361            const searchLinkList = K_S.getElem.drillDownNav ? K_S.getElem.drillDownNav.querySelector('.SearchLinkList01') : null;
2362            const webProductId = self.dataset.webproductId;
2363
2364            if (!loadMoreTarget || !searchLinkList) {
2365                return;
2366            }
2367
2368            promise.then(() => {
2369                loadMoreTarget.setAttribute('data-group-id', '');
2370                loadMoreTarget.setAttribute('data-type-id', '');
2371                loadMoreTarget.setAttribute('data-series-id', '');
2372                dict.q = '';
2373                dict.s = 2;
2374                dict.group_id = '';
2375                dict.type_id = '';
2376                dict.webseries_id = '';
2377                dict.o = 0;
2378
2379                util.updateBrowserHistory(dict);
2380                if (K_S.getElem.categorySPLabel && K_S.getElem.categoryPCLabel) {
2381                    K_S.getElem.categorySPLabel.textContent = K_S.getElem.categoryPCLabel.textContent;
2382                }
2383            }).then(() => {
2384                K_S.fn.setSuggest.saveHistory(self);
2385                K_S.fn.setLoadAssets(K_S.getElem.searchDL, `&webproduct_id=${webProductId}&s=2&o=0`, false, false, true);
2386                searchLinkList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2387            });
2388        };
2389
2390        util.getJSON(loadPath).then((response) => {
2391            outputSelector.textContent = '';
2392            outputSelector.dataset.hasResults = false;
2393
2394            if (response.result.models.length) {
2395                win.console.log(`Model Suggest API: ${loadPath}`);
2396                outputSelector.dataset.hasResults = true;
2397
2398                response.result.models.forEach((item) => {
2399                    const nodeClone = util.createNodeClone(template);
2400                    const modelLink = nodeClone.querySelector('.Model');
2401                    const modelText = nodeClone.querySelector('.Name');
2402
2403                    if (modelLink) {
2404                        modelLink.dataset.webproductId = item.webproduct_id;
2405                        modelLink.addEventListener('click', fn.setWhenClick, false);
2406                    }
2407
2408                    if (modelText) {
2409                        modelText.textContent = item.webproduct_name;
2410                    }
2411
2412                    fragment.appendChild(nodeClone);
2413                });
2414
2415                outputSelector.appendChild(fragment);
2416            }
2417            setSuggest.changeDisplay(response.result.models, suggestBox, '.js-loadModelsWithPrioritySort-target');
2418        }).catch((error) => {
2419            win.console.log(error);
2420        });
2421    };
2422
2423    K_S.fn.setSuggest.changeDisplay = function (response, suggestBox, selfArea) {
2424        var suggestColumn = suggestBox.querySelector('.JSSuggestColumn');
2425        var searchHistory = suggestBox.querySelector('.JSSearchHistory');
2426        var seriesArea = suggestBox.querySelector('.SeriesArea');
2427        var modelArea = suggestBox.querySelector('.ModelArea');
2428        var keywordArea = suggestBox.querySelector('.KeywordArea');
2429
2430        if (keywordArea) {
2431            keywordArea.classList.add(K_S.CONFIG.HIDDEN_ATTR);
2432        }
2433
2434        if (response.length) {
2435            suggestBox.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2436            if (suggestColumn) {
2437                suggestColumn.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2438            }
2439            if (suggestBox.classList.contains('SearchAllCategory')) {
2440                if (searchHistory) {
2441                    suggestBox.classList.remove('History');
2442                    searchHistory.classList.add(K_S.CONFIG.HIDDEN_ATTR);
2443                }
2444                if (suggestBox.querySelector(selfArea)) {
2445                    suggestBox.querySelector(selfArea).classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2446                    suggestBox.querySelector(selfArea).closest('.Column').classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2447                    if (suggestBox.closest('.JSHeaderSuggest')) {
2448                        doc.body.classList.add(K_S.CONFIG.SUGGEST_SHOW_ATTR);
2449                        if (K_S.getElem.menuOverlay) {
2450                            K_S.getElem.menuOverlay.setAttribute('data-owner', 'suggest');
2451                        }
2452                    }
2453                }
2454            } else {
2455                if (suggestBox.querySelector(selfArea)) {
2456                    suggestBox.querySelector(selfArea).classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2457                    if (suggestBox.closest('.JSHeaderSuggest')) {
2458                        doc.body.classList.add(K_S.CONFIG.SUGGEST_SHOW_ATTR);
2459                        if (K_S.getElem.menuOverlay) {
2460                            K_S.getElem.menuOverlay.setAttribute('data-owner', 'suggest');
2461                        }
2462                    }
2463                }
2464            }
2465        } else {
2466            if (suggestBox.classList.contains('SearchAllCategory')) {
2467                if (suggestBox.querySelector(selfArea)) {
2468                    suggestBox.querySelector(selfArea).classList.add(K_S.CONFIG.HIDDEN_ATTR);
2469                }
2470                if (seriesArea && seriesArea.classList.contains(K_S.CONFIG.HIDDEN_ATTR)
2471                    && modelArea && modelArea.classList.contains(K_S.CONFIG.HIDDEN_ATTR)) {
2472                    seriesArea.closest('.Column').classList.add(K_S.CONFIG.HIDDEN_ATTR);
2473                    if (suggestBox.closest('.JSHeaderSuggest')) {
2474                        doc.body.classList.remove(K_S.CONFIG.SUGGEST_SHOW_ATTR);
2475                    }
2476                }
2477                if (seriesArea && seriesArea.classList.contains(K_S.CONFIG.HIDDEN_ATTR)
2478                    && modelArea && modelArea.classList.contains(K_S.CONFIG.HIDDEN_ATTR)
2479                    && keywordArea && keywordArea.classList.contains(K_S.CONFIG.HIDDEN_ATTR)) {
2480                    suggestBox.classList.add(K_S.CONFIG.HIDDEN_ATTR);
2481                    if (suggestColumn) {
2482                        suggestColumn.classList.add(K_S.CONFIG.HIDDEN_ATTR);
2483                    }
2484                    if (suggestBox.closest('.JSHeaderSuggest')) {
2485                        doc.body.classList.remove(K_S.CONFIG.SUGGEST_SHOW_ATTR);
2486                    }
2487                }
2488            } else {
2489                if (suggestBox.querySelector(selfArea)) {
2490                    suggestBox.querySelector(selfArea).classList.add(K_S.CONFIG.HIDDEN_ATTR);
2491                }
2492
2493                if (suggestBox.querySelectorAll('[data-has-results="true"]').length) {
2494                    suggestBox.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2495                } else {
2496                    suggestBox.classList.add(K_S.CONFIG.HIDDEN_ATTR);
2497                }
2498            }
2499        }
2500    };
2501
2502    K_S.fn.setSuggest.loadAssets = function (outputSelector, loadPath) {
2503        var setSuggest = this;
2504        var fragment = doc.createDocumentFragment();
2505        var nodeClone;
2506        var link;
2507        var title;
2508        var lang;
2509        var thumbnail;
2510        var setWhenClick;
2511        var suggestBox;
2512        var assetArea;
2513
2514        if (!K_S.getElem.suggestAssetTemplate || !outputSelector) {
2515            return;
2516        }
2517
2518        setWhenClick = function (e) {
2519            var self = this;
2520
2521            e.preventDefault();
2522            setSuggest.saveHistory(self);
2523            location.href = self.href;
2524        };
2525
2526        suggestBox = outputSelector.closest('.JSSearchSuggestTarget');
2527        assetArea = outputSelector.closest('.CategoryList');
2528
2529        util.getJSON(loadPath).then(function (response) {
2530            outputSelector.dataset.hasResults = false;
2531
2532            if (!response.length) {
2533                if (assetArea) {
2534                    assetArea.hidden = true;
2535                }
2536
2537                if (suggestBox.querySelectorAll('[data-has-results="true"]').length) {
2538                    suggestBox.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2539                } else {
2540                    suggestBox.classList.add(K_S.CONFIG.HIDDEN_ATTR);
2541                }
2542
2543                return;
2544            }
2545
2546            console.log('Asset Suggest API: ' + loadPath);
2547            outputSelector.dataset.hasResults = true;
2548
2549            if (assetArea) {
2550                assetArea.hidden = false;
2551            }
2552
2553            outputSelector.querySelectorAll('#' + outputSelector.id + '>li').forEach(function (items) {
2554                items.remove();
2555            });
2556
2557            response.forEach(function (items) {
2558                nodeClone = util.createNodeClone(K_S.getElem.suggestAssetTemplate, 'li');
2559                link = nodeClone.querySelector('.Link');
2560                title = nodeClone.querySelector('.Title');
2561                lang = nodeClone.querySelector('.Lang');
2562                thumbnail = nodeClone.querySelector('.Thumbnail img');
2563
2564                if (link) {
2565                    link.href = GLOBAL.ORIGINAL_DOMAIN
2566                                + '/download/download/confirmation/'
2567                                + '?dlAssetId='
2568                                + items.asset_id
2569                                + '&dlSeriesId='
2570                                + '&dlModelId='
2571                                + '&dlLangId='
2572                                + '&dlLangType='
2573                                + items.language_type_id;
2574                    link.addEventListener('click', setWhenClick, false);
2575                }
2576
2577                if (title) {
2578                    title.textContent = items.asset_name;
2579                }
2580
2581                if (lang) {
2582                    if (GLOBAL.SELECT_LANG1 && GLOBAL.SELECT_LANG1[items.language_type_id]) {
2583                        lang.textContent = GLOBAL.SELECT_LANG1[items.language_type_id];
2584                    } else if (GLOBAL.SELECT_LANG2 && GLOBAL.SELECT_LANG2[items.language_type_id]) {
2585                        lang.textContent = GLOBAL.SELECT_LANG2[items.language_type_id];
2586                    } else if (GLOBAL.SELECT_LANG && GLOBAL.SELECT_LANG[items.language_type_id]) {
2587                        lang.textContent = GLOBAL.SELECT_LANG[items.language_type_id];
2588                    }
2589                }
2590
2591                if (thumbnail) {
2592                    thumbnail.src = GLOBAL.ORIGINAL_DOMAIN + '/img/asset/' + items.asset_thumbnail + '.jpg';
2593                }
2594
2595                fragment.appendChild(nodeClone);
2596            });
2597
2598            outputSelector.appendChild(fragment);
2599            suggestBox.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2600            suggestBox.querySelector('.JSSuggestColumn').classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2601        }).catch(function (error) {
2602            console.log(error);
2603        });
2604    };
2605
2606    K_S.fn.setSuggest.loadHistory = function (outputSelector, inputElem) {
2607        var setSuggest = this;
2608        var fragment = doc.createDocumentFragment();
2609        var cookie = util.getCookie(K_S.CONFIG.HISTORY_COOKIE_NAME);
2610        var nodeClone;
2611        var history;
2612        var historyTxt;
2613        var setWhenClick;
2614
2615        if (!K_S.getElem.searchHistoryTemplate || !cookie) {
2616            return;
2617        }
2618
2619        setWhenClick = function (e) {
2620            var self = this;
2621
2622            e.preventDefault();
2623            inputElem.value = this.title;
2624            inputElem.focus();
2625            setSuggest.saveHistory(self);
2626        };
2627
2628        JSON.parse(cookie).forEach(function (items) {
2629            items = decodeURIComponent(items);
2630            nodeClone = util.createNodeClone(K_S.getElem.searchHistoryTemplate, 'li');
2631            history = nodeClone.querySelector('.History');
2632            historyTxt = nodeClone.querySelector('.Text');
2633
2634            if (history) {
2635                history.title = items;
2636                if (!historyTxt) {
2637                    history.textContent = items;
2638                }
2639                history.addEventListener('click', setWhenClick, false);
2640            }
2641
2642            if (historyTxt) {
2643                historyTxt.textContent = items;
2644            }
2645
2646            fragment.appendChild(nodeClone);
2647        });
2648
2649        if (!outputSelector) {
2650            return;
2651        }
2652        outputSelector.querySelectorAll('li').forEach(function (items) {
2653            items.remove();
2654        });
2655        outputSelector.appendChild(fragment);
2656    };
2657
2658    K_S.fn.setSuggest.saveHistory = function (eventElem) {
2659        var existingCookie = util.getCookie(K_S.CONFIG.HISTORY_COOKIE_NAME);
2660        var historyArr = [];
2661        var text;
2662
2663        if (existingCookie) {
2664            historyArr = JSON.parse(existingCookie);
2665        }
2666
2667        text = eventElem.textContent;
2668        text = encodeURIComponent(text);
2669        historyArr.unshift(text);
2670        historyArr = util.removeOverlapArr(historyArr);
2671
2672        if (historyArr.length > K_S.CONFIG.HISTORY_MAX_SAVED_NUM) {
2673            historyArr.pop();
2674        }
2675
2676        util.setCookie(K_S.CONFIG.HISTORY_COOKIE_NAME, JSON.stringify(historyArr));
2677    };
2678
2679    K_S.fn.setSearchString = function () {
2680        var input;
2681        var pageParamInput;
2682        var dict;
2683
2684        if (!K_S.getElem.mainContForm) {
2685            return;
2686        }
2687
2688        doc.querySelector('body').setAttribute('data-main-suggest', 'true');
2689        input = K_S.getElem.mainContForm.querySelector('.JSSearchSuggestInput');
2690        pageParamInput = doc.getElementById('JSAssetPageParam');
2691        dict = util.makeQueryIntoDict();
2692        if (dict.q) {
2693            dict.q = dict.q.replace(/\+/g, ' ');
2694            input.value = decodeURIComponent(dict.q);
2695        }
2696        if (dict.mode) {
2697            pageParamInput.value = decodeURIComponent(dict.mode);
2698        }
2699    };
2700
2701    K_S.fn.setSubmit = function () {
2702        var searchButton = doc.querySelectorAll('.JSSearchButton');
2703        var searchLinkList;
2704        var setWhenClick;
2705        var hasTouchScreen = false;
2706        var ua = win.navigator.userAgent;
2707        var mQ;
2708
2709        if (!searchButton.length) {
2710            return;
2711        }
2712
2713        setWhenClick = function (e) {
2714            var self = this;
2715            var dict = util.makeQueryIntoDict();
2716            var existingCookie = util.getCookie(K_S.CONFIG.HISTORY_COOKIE_NAME);
2717            var historyArr = [];
2718            var form = self.closest('form');
2719            var inputElem = self.closest('.JSSearchSuggest').querySelector('.JSSearchSuggestInput');
2720            var trackingParam = 'search_dl';
2721            var disabledClass = 'IsDisabled';
2722            var trackingVal = 1;
2723            var value;
2724            var loadPath;
2725            var activeHref;
2726            var legacyTabList;
2727            var tabList;
2728
2729            e.preventDefault();
2730            value = inputElem.value.trim();
2731
2732            if ('maxTouchPoints' in navigator) {
2733                hasTouchScreen = win.navigator.maxTouchPoints > 0;
2734                if (ua.indexOf('Edge') !== -1) {
2735                    if (ua.indexOf('Windows Phone') === -1 && ua.indexOf('IEMobile') === -1) {
2736                        hasTouchScreen = false;
2737                    }
2738                }
2739            } else if ('msMaxTouchPoints' in navigator) {
2740                hasTouchScreen = win.navigator.msMaxTouchPoints > 0;
2741            } else {
2742                mQ = win.matchMedia && matchMedia('(pointer:coarse)');
2743
2744                if (mQ && mQ.media === '(pointer:coarse)') {
2745                    hasTouchScreen = Boolean(mQ.matches);
2746                } else if ('orientation' in win) {
2747                    hasTouchScreen = true;
2748                } else {
2749                    hasTouchScreen = (
2750                        /\b(BlackBerry|webOS|iPhone|IEMobile)\b/i.test(ua) ||
2751                        /\b(Android|Windows Phone|iPad|iPod)\b/i.test(ua)
2752                    );
2753                }
2754            }
2755
2756            if (value) {
2757                inputElem.value = value;
2758
2759                if (existingCookie) {
2760                    historyArr = JSON.parse(existingCookie);
2761                }
2762
2763                value = encodeURIComponent(value);
2764                historyArr.unshift(value);
2765                historyArr = util.removeOverlapArr(historyArr);
2766
2767                if (historyArr.length >
2767 K_S.CONFIG.HISTORY_MAX_SAVED_NUM) {
2768                    historyArr.pop();
2769                }
2770
2771                util.setCookie(K_S.CONFIG.HISTORY_COOKIE_NAME, JSON.stringify(historyArr));
2772
2773                loadPath = K_S.API_PATH.PRODUCT_COMPLETE_MATCH + 'q=' + value.toUpperCase();
2774                dict.q = value;
2775                dict.o = 0;
2776                dict.s = 3;
2777
2778                if (self.closest('#HeaderSearch') || self.closest('#TopSearchForm')) {
2779                    util.getJSON(loadPath).then(function (response) {
2780                        if (response[0].url && /\/all/.test(form.action)) {
2781                            location.href = response[0].url + '?' + trackingParam + '=' + trackingVal;
2782                        } else {
2783                            form.submit();
2784                        }
2785                    }).catch(function (error) {
2786                        console.log(error);
2787                        form.submit();
2788                    });
2789                } else {
2790                    if (hasTouchScreen) {
2791                        inputElem.blur();
2792                    }
2793                    if (self.classList.contains(disabledClass)) {
2794                        return;
2795                    }
2796                    self.classList.add(disabledClass);
2797                    setTimeout(function () {
2798                        self.classList.remove(disabledClass);
2799                    }, 500);
2800                    util.updateBrowserHistory(dict);
2801                    if (K_S.getElem.searchDL) {
2802                        K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&s=3&o=0');
2803                    }
2804                    if (K_S.getElem.searchDLSo) {
2805                        K_S.fn.setLoadAssets(K_S.getElem.searchDLSo, '&s=3&o=0');
2806                    }
2807                    if (K_S.getElem.searchDLCd) {
2808                        K_S.fn.setLoadAssets(K_S.getElem.searchDLCd, '&s=3&o=0');
2809                    }
2810                    if (K_S.getElem.searchDLMa) {
2811                        K_S.fn.setLoadAssets(K_S.getElem.searchDLMa, '&s=3&o=0');
2812                    }
2813                    if (K_S.getElem.searchDLCa) {
2814                        K_S.fn.setLoadAssets(K_S.getElem.searchDLCa, '&s=3&o=0');
2815                    }
2816                    if (K_S.getElem.searchDLCA) {
2817                        K_S.fn.setLoadAssets(K_S.getElem.searchDLCA, '&o=0');
2818                    }
2819                    if (K_S.getElem.searchDLTG) {
2820                        K_S.fn.setLoadAssets(K_S.getElem.searchDLTG, '&o=0');
2821                    }
2822                    K_S.fn.setLoadDataSheets('&s=3&o=0');
2823                    K_S.fn.setLoadSeries('&s=3&o=0');
2824                    K_S.fn.setLoadPages('&s=3&o=0');
2825                    K_S.fn.setLoadModels('&s=3&o=0');
2826                    K_S.fn.setLoadProbablyTheseModels();
2827                    if (K_S.getElem.drillDownNav) {
2828                        searchLinkList = K_S.getElem.drillDownNav.querySelector('.SearchLinkList01');
2829                        searchLinkList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2830                    }
2831                }
2832            } else {
2833                inputElem.value = '';
2834                if (self.closest('#HeaderSearch') || self.closest('#TopSearchForm')) {
2835                    form.submit();
2836                } else {
2837                    legacyTabList = doc.querySelector('.JSSearchQueryTakeover.SearchTabList');
2838                    tabList = K_S.getElem.loadResultsNav;
2839
2840                    if (legacyTabList) {
2841                        activeHref = legacyTabList.querySelector('li.' + K_S.CONFIG.ACTIVE_ATTR + '> a').href;
2842                    }
2843
2844                    if (tabList) {
2845                        activeHref = tabList.querySelector('a[aria-current="page"]').href;
2846                    }
2847
2848                    form.setAttribute('action', activeHref);
2849                    form.submit();
2850                }
2851            }
2852        };
2853
2854        searchButton.forEach(function (selector) {
2855            selector.addEventListener('click', setWhenClick, false);
2856        });
2857    };
2858
2859    K_S.fn.setResultDisplay = function (list) {
2860        var promise = Promise.resolve();
2861        var setWhenAnimateEnd = function () {
2862            var self = this;
2863
2864            self.tabIndex = 0;
2865            self.focus();
2866        };
2867
2868        list.forEach(function (items, index) {
2869            if (items.classList.contains(K_S.CONFIG.HIDDEN_ATTR)) {
2870                items.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
2871                if (index > 0 &&
2872                    index % K_S.CONFIG.ONE_TIME_DISPLAY_MAX_NUM === 0 &&
2873                    items.closest('ul').getAttribute('data-filter') !== 'all'
2874                ) {
2875                    if (items.closest('ul').getBoundingClientRect().bottom - items.getBoundingClientRect().height < 0) {
2876                        promise.then(function () {
2877                            items.addEventListener('animationend', setWhenAnimateEnd, false);
2878                        }).then(function () {
2879                            K_S.getElem.docElement.scrollTop = items.getBoundingClientRect().top + K_S.getElem.docElement.scrollTop;
2880                        });
2881                    } else {
2882                        items.addEventListener('animationend', setWhenAnimateEnd, false);
2883                    }
2884                }
2885            } else {
2886                if (index > 0 &&
2887                    index % K_S.CONFIG.ONE_TIME_DISPLAY_MAX_NUM === 0 &&
2888                    items.closest('ul').getAttribute('data-filter') !== 'all'
2889                ) {
2890                    if (items.closest('ul').getBoundingClientRect().bottom - items.getBoundingClientRect().height < 0) {
2891                        promise.then(function () {
2892                            items.tabIndex = 0;
2893                            items.focus();
2894                        }).then(function () {
2895                            K_S.getElem.docElement.scrollTop = items.getBoundingClientRect().top + K_S.getElem.docElement.scrollTop;
2896                        });
2897                    } else {
2898                        items.tabIndex = 0;
2899                        items.focus();
2900                    }
2901                }
2902            }
2903        });
2904    };
2905
2906    K_S.fn.setLoadPages = function (addOffsetParam, callback) {
2907        var dict = util.makeQueryIntoDict();
2908        var displayMaxNum;
2909        var fragment;
2910        var nodeClone;
2911        var list;
2912        var loadPath;
2913        var outputSelectorGroup;
2914
2915        if (!K_S.getElem.searchPageList || !K_S.getElem.searchPageListTemplate) {
2916            return;
2917        }
2918
2919        displayMaxNum = K_S.getElem.searchPageList.getAttribute('data-limit');
2920        fragment = doc.createDocumentFragment();
2921        loadPath = K_S.fn.getPagesLoadPath();
2922
2923        if (typeof dict.o === 'undefined') {
2924            dict.o = 0;
2925        }
2926
2927        if (typeof dict.s === 'undefined') {
2928            dict.s = '';
2929        }
2930
2931        if (!addOffsetParam) {
2932            addOffsetParam = `&o=${dict.o}&s=${dict.s}`;
2933        }
2934
2935        console.log('Keywords API: ' + loadPath + addOffsetParam);
2936
2937        util.getJSON(loadPath + addOffsetParam).then(function (response) {
2938            var contentsArr = response.result.contents;
2939            var resultTotal = response.result.attribute.total;
2940            var resultOffset = response.result.attribute.offset;
2941            var updateListStr = '#' + K_S.getElem.searchPageList.id + '>li';
2942
2943            if (resultOffset === 0) {
2944                K_S.getElem.searchPageList.querySelectorAll(updateListStr).forEach(function (items) {
2945                    items.remove();
2946                });
2947            }
2948
2949            if (!resultTotal) {
2950                K_S.getElem.searchPageList.classList.add(K_S.CONFIG.NORESULT_ATTR);
2951            } else {
2952                K_S.getElem.searchPageList.classList.remove(K_S.CONFIG.NORESULT_ATTR);
2953            }
2954
2955            outputSelectorGroup = K_S.getElem.searchPageList.closest('.SearchDownloadListGroup');
2956            if (outputSelectorGroup) {
2957                if (resultTotal > 0) {
2958                    outputSelectorGroup.hidden = false;
2959                } else {
2960                    outputSelectorGroup.hidden = true;
2961                }
2962            }
2963
2964            doc.querySelectorAll('.JSPagesResultNum').forEach(function (items) {
2965                items.textContent = resultTotal;
2966            });
2967
2968            contentsArr.forEach(function (items, index) {
2969                if (displayMaxNum && index > (displayMaxNum - 1)) {
2970                    return;
2971                }
2972                nodeClone = util.createNodeClone(K_S.getElem.searchPageListTemplate, 'li');
2973                K_S.fn.setPagesDisplay(nodeClone, items);
2974
2975                fragment.appendChild(nodeClone);
2976            });
2977
2978            K_S.getElem.searchPageList.appendChild(fragment);
2979            list = K_S.getElem.searchPageList.querySelectorAll(updateListStr);
2980            K_S.fn.setMoreBtnDisplay(resultOffset, resultTotal);
2981            K_S.fn.setResultDisplay(list);
2982        }).then(function () {
2983            if (callback) {
2984                callback();
2985            }
2986        }).catch(function (error) {
2987            console.log(error);
2988        });
2989    };
2990
2991    K_S.fn.getPagesLoadPath = function () {
2992        var inputValue;
2993        var loadPath;
2994
2995        if (K_S.getElem.mainContForm) {
2996            inputValue = K_S.getElem.mainContForm.querySelector('.JSSearchSuggestInput').value;
2997            inputValue = inputValue.replace(/\+/g, ' ');
2998            inputValue = encodeURIComponent(inputValue.trim());
2999        } else {
3000            inputValue = '';
3001        }
3002
3003        loadPath = K_S.API_PATH.PAGE
3004                   + 'q='
3005                   + inputValue
3006                   + '&l='
3007                   + K_S.CONFIG.ONE_TIME_DATA_LOAD_MAX_NUM;
3008
3009        return loadPath;
3010    };
3011
3012    K_S.fn.setPagesDisplay = function (nodeClone, JSONItems) {
3013        var legacyElems = {
3014            title: nodeClone.querySelector('.Title'),
3015            description: nodeClone.querySelector('.Description'),
3016            url: nodeClone.querySelector('.Url'),
3017        };
3018
3019        var elems = {
3020            title: legacyElems.title ?
3021                legacyElems.title :
3022                nodeClone.querySelector('.js-setPagesDisplay-title'),
3023            titleUrl: nodeClone.querySelector('.js-setPagesDisplay-titleUrl'),
3024            description: legacyElems.description ?
3025                legacyElems.description :
3026                nodeClone.querySelector('.js-setPagesDisplay-description'),
3027            url: legacyElems.url ?
3028                legacyElems.url :
3029                nodeClone.querySelector('.js-setPagesDisplay-url'),
3030            urlText: nodeClone.querySelector('.js-setPagesDisplay-urlText'),
3031        };
3032
3033        if (elems.title) {
3034            elems.title.textContent = JSONItems.title;
3035            elems.title.href = JSONItems.content_url;
3036        }
3037
3038        if (elems.titleUrl) {
3039            elems.titleUrl.href = JSONItems.content_url;
3040        }
3041
3042        if (elems.description) {
3043            if (JSONItems.description) {
3044                elems.description.textContent = util.getOmittedText(JSONItems.description, elems.description);
3045            }
3046        }
3047
3048        if (elems.url) {
3049            if (elems.url === legacyElems.url) {
3050                elems.url.textContent = JSONItems.content_url;
3051            }
3052            elems.url.href = JSONItems.content_url;
3053        }
3054
3055        if (elems.urlText) {
3056            elems.urlText.textContent = JSONItems.content_url;
3057        }
3058    };
3059
3060    K_S.fn.setLoadModels = function (addOffsetParam, callback) {
3061        var dict = util.makeQueryIntoDict();
3062        var displayMaxNum;
3063        var fragment;
3064        var nodeClone;
3065        var loadPath;
3066        var outputSelectorGroup;
3067        var probablyModelGroup;
3068
3069        if (!K_S.getElem.searchModelList || !K_S.getElem.searchModelListTemplate) {
3070            return;
3071        }
3072
3073        displayMaxNum = K_S.getElem.searchModelList.getAttribute('data-limit');
3074        fragment = doc.createDocumentFragment();
3075        loadPath = K_S.fn.getModelsLoadPath();
3076
3077        if (typeof dict.o === 'undefined') {
3078            dict.o = 0;
3079        }
3080
3081        if (typeof dict.s === 'undefined') {
3082            dict.s = '';
3083        }
3084
3085        if (!addOffsetParam) {
3086            addOffsetParam = `&o=${dict.o}&s=${dict.s}`;
3087        }
3088
3089        console.log('Models API: ' + loadPath + addOffsetParam);
3090
3091        util.getJSON(loadPath + addOffsetParam).then(function (response) {
3092            var modelsArr = response.result.models;
3093            var resultTotal = response.result.attribute.total;
3094            var resultOffset = response.result.attribute.offset;
3095            var updateListStr = '#' + K_S.getElem.searchModelList.id + '>li';
3096
3097            if (resultOffset === 0) {
3098                K_S.getElem.searchModelList.querySelectorAll(updateListStr).forEach(function (items) {
3099                    items.remove();
3100                });
3101            }
3102
3103            doc.querySelectorAll('.JSModelsResultNum').forEach(function (items) {
3104                items.textContent = resultTotal;
3105            });
3106
3107            outputSelectorGroup = K_S.getElem.searchModelList.closest('.SearchDownloadListGroup');
3108            probablyModelGroup = K_S.getElem.searchProbablyModelList.closest('.SearchDownloadListGroup');
3109            if (outputSelectorGroup) {
3110                if (resultTotal > 0) {
3111                    outputSelectorGroup.hidden = false;
3112
3113                    if (probablyModelGroup.hidden === false) {
3114                        probablyModelGroup.hidden = true;
3115                    }
3116                } else {
3117                    outputSelectorGroup.hidden = true;
3118                }
3119            }
3120
3121            modelsArr.forEach(function (items, index) {
3122                if (displayMaxNum && index > (displayMaxNum - 1)) {
3123                    return;
3124                }
3125                nodeClone = util.createNodeClone(K_S.getElem.searchModelListTemplate, 'li');
3126                K_S.fn.setModelsDisplay(nodeClone, items);
3127
3128                fragment.appendChild(nodeClone);
3129            });
3130
3131            K_S.getElem.searchModelList.appendChild(fragment);
3132        }).then(function () {
3133            if (callback) {
3134                callback();
3135            }
3136        }).catch(function (error) {
3137            console.log(error);
3138        });
3139    };
3140
3141    K_S.fn.setLoadProbablyTheseModels = function (callback) {
3142        var displayMaxNum;
3143        var fragment;
3144        var nodeClone;
3145        var loadPath;
3146        var outputSelectorGroup;
3147        var modelGroup;
3148
3149        if (!K_S.getElem.searchProbablyModelList || !K_S.getElem.searchModelListTemplate) {
3150            return;
3151        }
3152
3153        displayMaxNum = K_S.getElem.searchModelList.getAttribute('data-limit');
3154        fragment = doc.createDocumentFragment();
3155        loadPath = K_S.fn.getProbablyTheseModelsLoadPath();
3156
3157        console.log('Probably These Models API: ' + loadPath);
3158
3159        util.getJSON(loadPath).then(function (response) {
3160            var modelsArr = response.didyoumean_product_model;
3161            var updateListStr = '#' + K_S.getElem.searchProbablyModelList.id + '>li';
3162            var resultTotal = response.didyoumean_product_model.length;
3163
3164            K_S.getElem.searchProbablyModelList.querySelectorAll(updateListStr).forEach(function (items) {
3165                items.remove();
3166            });
3167
3168            outputSelectorGroup = K_S.getElem.searchProbablyModelList.closest('.SearchDownloadListGroup');
3169            modelGroup = K_S.getElem.searchModelList.closest('.SearchDownloadListGroup');
3170            if (outputSelectorGroup) {
3171                if (resultTotal === 0) {
3172                    outputSelectorGroup.hidden = true;
3173                } else {
3174                    outputSelectorGroup.hidden = false;
3175
3176                    if (modelGroup.hidden === false) {
3177                        outputSelectorGroup.hidden = true;
3178                    }
3179                }
3180            }
3181
3182            modelsArr.forEach(function (items, index) {
3183                if (displayMaxNum && index > (displayMaxNum - 1)) {
3184                    return;
3185                }
3186                nodeClone = util.createNodeClone(K_S.getElem.searchModelListTemplate, 'li');
3187                K_S.fn.setModelsDisplay(nodeClone, items);
3188
3189                fragment.appendChild(nodeClone);
3190            });
3191
3192            K_S.getElem.searchProbablyModelList.appendChild(fragment);
3193        }).then(function () {
3194            if (callback) {
3195                callback();
3196            }
3197        }).catch(function (error) {
3198            console.log(error);
3199        });
3200    };
3201
3202    K_S.fn.getModelsLoadPath = function () {
3203        var discontinuedCookie = util.getCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME);
3204        var inputValue;
3205        var loadPath;
3206        var discontinuedParam;
3207
3208        if (typeof discontinuedCookie !== 'undefined') {
3209            if (discontinuedCookie === '1') {
3210                discontinuedParam = 1;
3211            } else {
3212                discontinuedParam = 0;
3213            }
3214        } else {
3215            discontinuedParam = 0;
3216        }
3217
3218        if (K_S.getElem.mainContForm) {
3219            inputValue = K_S.getElem.mainContForm.querySelector('.JSSearchSuggestInput').value;
3220            inputValue = inputValue.replace(/\+/g, ' ');
3221            inputValue = encodeURIComponent(inputValue.trim());
3222        } else {
3223            inputValue = '';
3224        }
3225
3226        loadPath = K_S.API_PATH.SUGGEST_MODEL
3227                   + 'q='
3228                   + inputValue
3229                   + '&l=20'
3230                   + '&discontinued_flag='
3231                   + discontinuedParam;
3232
3233        return loadPath;
3234    };
3235
3236    K_S.fn.getProbablyTheseModelsLoadPath = function () {
3237        var inputValue;
3238        var loadPath;
3239
3240        if (K_S.getElem.mainContForm) {
3241            inputValue = K_S.getElem.mainContForm.querySelector('.JSSearchSuggestInput').value;
3242            inputValue = inputValue.replace(/\+/g, ' ');
3243            inputValue = encodeURIComponent(inputValue.trim());
3244        } else {
3245            inputValue = '';
3246        }
3247
3248        loadPath = K_S.API_PATH.DID_YOU_MEAN_MODEL
3249                   + 'q='
3250                   + inputValue
3251                   + '&l=20'
3252                   + '&s=70';
3253
3254        return loadPath;
3255    };
3256
3257    K_S.fn.setModelsDisplay = function (nodeClone, JSONItems) {
3258        var model = nodeClone.querySelector('.Model');
3259        var modelName = nodeClone.querySelector('.ModelName');
3260        var modelUrl = nodeClone.querySelector('.ModelUrl');
3261
3262        if (model) {
3263            model.textContent = JSONItems.webproduct_name;
3264            model.href = JSONItems.url;
3265        }
3266
3267        if (modelName) {
3268            modelName.textContent = JSONItems.webproduct_name;
3269        }
3270
3271        if (modelUrl) {
3272            modelUrl.href = JSONItems.url;
3273        }
3274    };
3275
3276    K_S.fn.setLoadAssets = function (outputSelector, addOffsetParam, drilldownNotUpdateFlag, callback, customParam) {
3277        var dict = util.makeQueryIntoDict();
3278        var displayMaxNum;
3279        var outputSelectorGroup;
3280        var searchNotes;
3281        var keyDescription;
3282        var fragment;
3283        var fragmentSo;
3284        var fragmentCd;
3285        var nodeClone;
3286        var nodeCloneSo;
3287        var nodeCloneCd;
3288        var list;
3289        var loadPath;
3290        var fn = {};
3291
3292        if (!outputSelector || !K_S.getElem.searchDLTemplate) {
3293            return;
3294        }
3295
3296        displayMaxNum = outputSelector.getAttribute('data-limit');
3297        outputSelectorGroup = outputSelector.closest('.SearchDownloadListGroup');
3298        searchNotes = doc.querySelector('.SearchDownloadNotes');
3299        keyDescription = doc.querySelector('.js-assetsKeyDescription');
3300        fragment = doc.createDocumentFragment();
3301        fragmentSo = doc.createDocumentFragment();
3302        fragmentCd = doc.createDocumentFragment();
3303        loadPath = K_S.fn.getAssetsLoadPath(outputSelector);
3304
3305        if (typeof dict.o === 'undefined') {
3306            dict.o = 0;
3307        }
3308
3309        if (typeof dict.s === 'undefined') {
3310            dict.s = '';
3311        }
3312
3313        if (typeof dict.modelId === 'undefined') {
3314            dict.modelId = '';
3315        }
3316
3317        if (!addOffsetParam) {
3318            addOffsetParam = `&o=${dict.o}&s=${dict.s}`;
3319        }
3320
3321        if (/^\/products\/[a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+\/downloads\/$/.test(win.location.pathname)) {
3322            if (dict.modelId) {
3323                addOffsetParam = `&o=${dict.o}&s=2`;
3324            } else {
3325                addOffsetParam = `&o=${dict.o}&s=1`;
3326            }
3327        }
3328
3329        fn.updateNav = function () {
3330            if (K_S.getElem.loadResultsNav && !/all/.test(location.pathname)) {
3331                K_S.getElem.loadResultsNav.querySelectorAll('a[data-mode]').forEach(function (items) {
3332                    items.href = items.pathname +
3333                        '?mode=' +
3334                        items.dataset.mode +
3335                        '&modelId=' +
3336                        dict.modelId;
3337
3338                    if (!dict.mode) {
3339                        dict.mode = 'ca';
3340                    }
3341
3342                    if (dict.mode === items.dataset.mode) {
3343                        items.setAttribute('aria-current', 'page');
3344                    }
3345                });
3346            }
3347        };
3348
3349        fn.setResultNum = function (selector, resultTotal) {
3350            if (selector.querySelectorAll('.JSAssetsResultNum').length) {
3351                selector.querySelectorAll('.JSAssetsResultNum').forEach(function (items) {
3352                    items.textContent = resultTotal;
3353                });
3354            }
3355            if (selector.querySelectorAll('.js-loadAssets-resultsNumber').length) {
3356                selector.querySelectorAll('.js-loadAssets-resultsNumber').forEach(function (items) {
3357                    items.textContent = resultTotal;
3358                });
3359            }
3360        };
3361
3362        fn.updateNav();
3363
3364        if (customParam) {
3365            const url = new URL(loadPath);
3366            const urlParams = url.searchParams;
3367            urlParams.delete('q');
3368            urlParams.delete('group_id');
3369            urlParams.delete('type_id');
3370            urlParams.delete('webseries_id');
3371            urlParams.delete('webproduct_id');
3372
3373            loadPath = url.href;
3374        }
3375
3376        console.log('Asset API: ' + loadPath + addOffsetParam);
3377
3378        util.getJSON(loadPath + addOffsetParam).then(function (response) {
3379            var seriesID = response.meta.request_params.webseries_id[0];
3380            var assetsArr = response.result.assets;
3381            var resultTotal = response.result.attribute.total;
3382            var resultOffset = response.result.attribute.offset;
3383            var updateListStr = '#' + outputSelector.id + '>li';
3384
3385            if (resultOffset === 0) {
3386                outputSelector.querySelectorAll(updateListStr).forEach(function (items) {
3387                    items.remove();
3388                });
3389            }
3390
3391            if (!seriesID) {
3392                seriesID = '';
3393            }
3394
3395            if (!resultTotal) {
3396                outputSelector.classList.add(K_S.CONFIG.NORESULT_ATTR);
3397            } else {
3398                outputSelector.classList.remove(K_S.CONFIG.NORESULT_ATTR);
3399            }
3400
3401            if (outputSelectorGroup) {
3402                fn.setResultNum(outputSelectorGroup, resultTotal);
3403
3404                if (resultTotal > 0) {
3405                    outputSelectorGroup.hidden = false;
3406                } else {
3407                    outputSelectorGroup.hidden = true;
3408                }
3409            } else {
3410                fn.setResultNum(doc, resultTotal);
3411            }
3412
3413            assetsArr.forEach(function (items, index) {
3414                if (displayMaxNum && index > (displayMaxNum - 1)) {
3415                    return;
3416                }
3417                nodeClone = util.createNodeClone(K_S.getElem.searchDLTemplate, 'li');
3418                K_S.fn.setAssetsDisplay(nodeClone, items, seriesID);
3419
3420                fragment.appendChild(nodeClone);
3421
3422                if (K_S.getElem.searchDLSoTemplate) {
3423                    nodeCloneSo = util.createNodeClone(K_S.getElem.searchDLSoTemplate, 'li');
3424                    K_S.fn.setAssetsDisplay(nodeCloneSo, items, seriesID);
3425                    fragmentSo.appendChild(nodeCloneSo);
3426                }
3427
3428                if (K_S.getElem.searchDLCdTemplate) {
3429                    nodeCloneCd = util.createNodeClone(K_S.getElem.searchDLCdTemplate, 'li');
3430                    K_S.fn.setAssetsDisplay(nodeCloneCd, items, seriesID);
3431                    fragmentCd.appendChild(nodeCloneCd);
3432                }
3433            });
3434
3435            switch (outputSelector.id) {
3436                case 'js-loadSoAssets':
3437                    outputSelector.appendChild(fragmentSo);
3438                    break;
3439                case 'js-loadCdAssets':
3440                    outputSelector.appendChild(fragmentCd);
3441                    break;
3442                default:
3443                    outputSelector.appendChild(fragment);
3444            }
3445
3446            if (searchNotes) {
3447                if (outputSelector.querySelector('.IconKey')) {
3448                    searchNotes.classList.add(K_S.CONFIG.SHOW_ATTR);
3449                } else {
3450                    searchNotes.classList.remove(K_S.CONFIG.SHOW_ATTR);
3451                }
3452            }
3453
3454            if (outputSelectorGroup) {
3455                if (outputSelectorGroup.querySelector('.js-assetsKeyDescription')) {
3456                    if (outputSelector.querySelector('.js-setAssetsDisplay-keyIcon')) {
3457                        outputSelectorGroup.querySelector('.js-assetsKeyDescription').hidden = false;
3458                    } else {
3459                        outputSelectorGroup.querySelector('.js-assetsKeyDescription').hidden = true;
3460                    }
3461                }
3462            } else {
3463                if (keyDescription) {
3464                    if (outputSelector.querySelector('.js-setAssetsDisplay-keyIcon')) {
3465                        keyDescription.hidden = false;
3466                    } else {
3467                        keyDescription.hidden = true;
3468                    }
3469                }
3470            }
3471
3472            if (outputSelector.getAttribute('data-filter') === 'all') {
3473                if (outputSelector.getAttribute('data-card-slider') === 'true') {
3474                    if (outputSelector.closest('.js-horizontal-scroll')) {
3475                        outputSelector.closest('.js-horizontal-scroll').classList.toggle(
3476                            'is-overflowing',
3477                            outputSelector.scrollWidth > outputSelector.clientWidth
3478                        );
3479                    }
3480                } else {
3481                    if (K_S.CONFIG.SMALL_SCREEN_MQ.matches) {
3482                        if (displayMaxNum > 1) {
3483                            K_S.fn.slider(outputSelector);
3484                        }
3485                    } else {
3486                        if (displayMaxNum > 5) {
3487                            K_S.fn.slider(outputSelector);
3488                        }
3489                    }
3490                }
3491            }
3492            list = outputSelector.querySelectorAll(updateListStr);
3493            K_S.fn.setMoreBtnDisplay(resultOffset, resultTotal);
3494            K_S.fn.setResultDisplay(list);
3495
3496            if (!drilldownNotUpdateFlag) {
3497                K_S.fn.setDrillDown.run(response);
3498            }
3499        }).then(function () {
3500            if (callback) {
3501                callback();
3502            }
3503        }).catch(function (error) {
3504            console.log(error);
3505        });
3506    };
3507
3508    K_S.fn.getAssetsLoadPath = function (outputSelector) {
3509        var dict = util.makeQueryIntoDict();
3510        var langCookie = (dict.mode === 'ma') ||
3511        ((outputSelector.getAttribute('data-filter') === 'all') && (outputSelector.getAttribute('data-asset-type') === '13')) ?
3512            util.getCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME) :
3513            util.getCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME);
3514        var fileCookie = util.getCookie(K_S.CONFIG.SELECT_FILE_COOKIE_NAME);
3515        var categoryCookieName = util.addAssetTypeToString(K_S.CONFIG.SELECT_CATEGORY_COOKIE_NAME);
3516        var categoryCookie = util.getCookie(categoryCookieName);
3517        var selectLangParam = '';
3518        var selectFileParam = '';
3519        var selectCategoryParam = '';
3520        var groupIDParam = '';
3521        var typeIDParam = '';
3522        var seriesIDParam = '';
3523        var assetIDParam = '';
3524        var productIDParam = '';
3525        var inputValue;
3526        var drilldownFlagParam;
3527        var loadPath;
3528        var limit = outputSelector.getAttribute('data-limit') ? outputSelector.getAttribute('data-limit') : K_S.CONFIG.ONE_TIME_DATA_LOAD_MAX_NUM;
3529
3530        if (!langCookie) {
3531            if (outputSelector.getAttribute('data-filter') === 'all') {
3532                if (outputSelector.getAttribute('data-asset-type') === '13') {
3533                    util.setCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME, JSON.stringify(GLOBAL.MANUAL_LANG));
3534                    langCookie = util.getCookie(K_S.CONFIG.SELECT_MANUAL_LANG_COOKIE_NAME);
3535                } else {
3536                    util.setCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME, JSON.stringify(GLOBAL.SITE_LANG));
3537                    langCookie = util.getCookie(K_S.CONFIG.SELECT_LANG_COOKIE_NAME);
3538                }
3539            }
3540        }
3541
3542        if (langCookie) {
3543            langCookie = JSON.parse(langCookie);
3544            langCookie.forEach(function (cookies) {
3545                selectLangParam += cookies + ',';
3546            });
3547            selectLangParam = selectLangParam.slice(0, -1);
3548        }
3549
3550        if (fileCookie) {
3551            fileCookie = JSON.parse(fileCookie);
3552            fileCookie.forEach(function (cookies) {
3553                selectFileParam += GLOBAL.SELECT_FILE_TYPE[cookies] + ',';
3554            });
3555            selectFileParam = selectFileParam.slice(0, -1);
3556        }
3557
3558        if (categoryCookie) {
3559            categoryCookie = JSON.parse(categoryCookie);
3560
3561            categoryCookie.forEach(function (cookies) {
3562                selectCategoryParam += cookies + ',';
3563            });
3564            selectCategoryParam = selectCategoryParam.slice(0, -1);
3565        }
3566
3567        if (!K_S.getElem.selectTypes) {
3568            if (outputSelector.getAttribute('data-filter') !== 'all' && !K_S.getElem.langSelectWrap) {
3569                selectLangParam = '';
3570
3571                if (!K_S.getElem.filterFileTypes) {
3572                    selectFileParam = '';
3573                }
3574            }
3575
3576            if (outputSelector.getAttribute('data-filter') === 'all' || K_S.getElem.langSelectWrap || !K_S.getElem.filterFileTypes) {
3577                selectFileParam = '';
3578            }
3579        }
3580
3581        if (K_S.getElem.selectTypes) {
3582            if (K_S.getElem.selectTypes.getAttribute('data-type') === 'file') {
3583                selectLangParam = '';
3584            } else {
3585                selectFileParam = '';
3586            }
3587        }
3588
3589        if (!K_S.getElem.filterCategories) {
3590            selectCategoryParam = '';
3591        }
3592
3593        if (K_S.getElem.drillDownNav) {
3594            if (dict.group_id) {
3595                groupIDParam = decodeURIComponent(dict.group_id);
3596            } else {
3597                groupIDParam = outputSelector.getAttribute('data-group-id');
3598            }
3599            if (dict.type_id) {
3600                typeIDParam = decodeURIComponent(dict.type_id);
3601            } else {
3602                typeIDParam = outputSelector.getAttribute('data-type-id');
3603            }
3604            if (dict.webseries_id) {
3605                seriesIDParam = decodeURIComponent(dict.webseries_id);
3606            } else {
3607                seriesIDParam = outputSelector.getAttribute('data-series-id');
3608            }
3609            drilldownFlagParam = 1;
3610        } else {
3611            seriesIDParam = GLOBAL.CURRENT_SERIESE_ID;
3612            drilldownFlagParam = 0;
3613        }
3614
3615        if (K_S.getElem.mainContForm) {
3616            inputValue = K_S.getElem.mainContForm.querySelector('.JSSearchSuggestInput').value;
3617            inputValue = inputValue.replace(/\+/g, ' ');
3618            inputValue = encodeURIComponent(inputValue.trim());
3619        } else {
3620            inputValue = '';
3621        }
3622
3623        if (GLOBAL.ASSET_TYPE_ID) {
3624            assetIDParam = GLOBAL.ASSET_TYPE_ID;
3625        } else {
3626            assetIDParam = outputSelector.getAttribute('data-asset-type') ? outputSelector.getAttribute('data-asset-type') 
3626: '';
3627        }
3628
3629        if (dict.modelId) {
3630                productIDParam = dict.modelId;
3631        } else {
3632            if (GLOBAL.WEB_PRODUCT_ID) {
3633                productIDParam = GLOBAL.WEB_PRODUCT_ID;
3634            }
3635        }
3636
3637        loadPath = K_S.API_PATH.ASSET
3638            + 'q='
3639            + inputValue
3640            + '&l='
3641            + limit
3642            + '&language_type_id='
3643            + selectLangParam
3644            + '&asset_type_id='
3645            + assetIDParam
3646            + '&webseries_id='
3647            + seriesIDParam
3648            + '&group_id='
3649            + groupIDParam
3650            + '&type_id='
3651            + typeIDParam
3652            + '&webproduct_id='
3653            + productIDParam
3654            + '&assetdetail_type_id='
3655            + (K_S.getElem.filterCategories ? selectCategoryParam : selectFileParam)
3656            + '&drilldown_flag='
3657            + drilldownFlagParam;
3658
3659        return loadPath;
3660    };
3661
3662    K_S.fn.setAssetsDisplay = function (nodeClone, JSONItems, seriesID) {
3663        var fn = {};
3664        var legacyElems = {
3665            downloadListContent: doc.getElementById('DownloadListContent'),
3666            title: nodeClone.querySelector('.Title'),
3667            titleLink: nodeClone.querySelector('.TitleLink'),
3668            dlGroup: nodeClone.querySelector('a.DownloadGroup'),
3669            dlBtn: nodeClone.querySelector('.SearchDownloadBtn'),
3670            addBtn: nodeClone.querySelector('.SearchAddBtn'),
3671            thumbnail: nodeClone.querySelector('.Thumbnail img'),
3672            thumbnailLink: nodeClone.querySelector('.ThumbnailLink'),
3673            iconKey: nodeClone.querySelector('.IconKey'),
3674            fileInfo: nodeClone.querySelector('.FileInfo'),
3675            fileFormat: nodeClone.querySelector('.FileFormat'),
3676            fileSize: nodeClone.querySelector('.FileSize'),
3677            lang: nodeClone.querySelector('.Lang'),
3678            os: nodeClone.querySelector('.OS'),
3679            version: nodeClone.querySelector('.Version'),
3680            updateDate: nodeClone.querySelector('.UpdateDate'),
3681            description: nodeClone.querySelector('.Description'),
3682            descriptionLink: nodeClone.querySelector('.DescriptionLink'),
3683        };
3684        var elems = {
3685            downloadListContent: legacyElems.downloadListContent ?
3686                legacyElems.downloadListContent :
3687                doc.getElementById('js-downloadListPanel-cartList'),
3688            title: legacyElems.title ?
3689                legacyElems.title :
3690                nodeClone.querySelector('.js-setAssetsDisplay-title'),
3691            titleLink: legacyElems.titleLink,
3692            assetLink: legacyElems.dlGroup ?
3693                legacyElems.dlGroup :
3694                nodeClone.querySelector('.js-setAssetsDisplay-link'),
3695            dlBtn: legacyElems.dlBtn ?
3696                legacyElems.dlBtn :
3697                nodeClone.querySelector('.js-setAssetsDisplay-download'),
3698            addBtn: legacyElems.addBtn ?
3699                legacyElems.addBtn :
3700                nodeClone.querySelector('.js-setAssetsDisplay-addButton'),
3701            thumbnail: legacyElems.thumbnail ?
3702                legacyElems.thumbnail :
3703                nodeClone.querySelector('.js-setAssetsDisplay-image'),
3704            thumbnailLink: legacyElems.thumbnailLink,
3705            iconKey: legacyElems.iconKey ?
3706                legacyElems.iconKey :
3707                nodeClone.querySelector('.js-setAssetsDisplay-keyIcon'),
3708            fileInfo: legacyElems.fileInfo ?
3709                legacyElems.fileInfo :
3710                nodeClone.querySelector('.js-setAssetsDisplay-fileData'),
3711            fileFormat: legacyElems.fileFormat ?
3712                legacyElems.fileFormat :
3713                nodeClone.querySelector('.js-setAssetsDisplay-fileFormat'),
3714            assetDetailType: nodeClone.querySelector('.js-setAssetsDisplay-assetDetailType'),
3715            fileSize: legacyElems.fileSize ?
3716                legacyElems.fileSize :
3717                nodeClone.querySelector('.js-setAssetsDisplay-fileSize'),
3718            lang: legacyElems.lang ?
3719                legacyElems.lang :
3720                nodeClone.querySelector('.js-setAssetsDisplay-language'),
3721            os: legacyElems.os ?
3722                legacyElems.os :
3723                nodeClone.querySelector('.js-setAssetsDisplay-os'),
3724            version: legacyElems.version ?
3725                legacyElems.version :
3726                nodeClone.querySelector('.js-setAssetsDisplay-version'),
3727            updateDate: legacyElems.updateDate ?
3728                legacyElems.updateDate :
3729                nodeClone.querySelector('.js-setAssetsDisplay-updateDate'),
3730            description: legacyElems.description ?
3731                legacyElems.description :
3732                nodeClone.querySelector('.js-setAssetsDisplay-description'),
3733            descriptionLink: legacyElems.descriptionLink ?
3734                legacyElems.descriptionLink :
3735                nodeClone.querySelector('.js-setAssetsDisplay-descriptionLink'),
3736            descriptionLinkLabel: nodeClone.querySelector('.js-setAssetsDisplay-descriptionLinkLabel'),
3737            descriptionTemplate: nodeClone.querySelector('.js-setAssetsDisplay-descriptionTemplate'),
3738            summary: nodeClone.querySelector('.js-setAssetsDisplay-summary'),
3739        };
3740        var thumbnailSize = elems.thumbnail ? elems.thumbnail.getAttribute('data-img-size') : null;
3741        var thumbnailSizeStr = '';
3742        var dlHref = GLOBAL.ORIGINAL_DOMAIN
3743            + '/download/download/confirmation/'
3744            + '?dlAssetId='
3745            + JSONItems.asset_id
3746            + '&dlSeriesId='
3747            + seriesID
3748            + '&dlModelId='
3749            + '&dlLangId='
3750            + '&dlLangType='
3751            + JSONItems.language_type_id;
3752        var hasModalTrigger = elems.descriptionLink ? elems.descriptionLink.getAttribute('data-maodal-trigger') : false;
3753        var descriptionTemplateHtml;
3754        var descriptionTemplateText;
3755
3756        fn.updateThumbnailSize = function () {
3757            if (thumbnailSize && /^[SML]$/.test(thumbnailSize)) {
3758                if (thumbnailSize !== 'M') {
3759                    thumbnailSizeStr = '_' + thumbnailSize;
3760                }
3761            }
3762        };
3763
3764        fn.updateThumbnailSize();
3765
3766        if (elems.thumbnail) {
3767            elems.thumbnail.src = GLOBAL.ORIGINAL_DOMAIN
3768                + '/img/asset/'
3769                + JSONItems.asset_thumbnail
3770                + thumbnailSizeStr
3771                + '.jpg';
3772        }
3773
3774        if (elems.thumbnailLink) {
3775            elems.thumbnailLink.href = dlHref;
3776        }
3777
3778        if (elems.title) {
3779            if (elems.titleLink) {
3780                elems.titleLink.textContent = JSONItems.asset_name;
3781                elems.titleLink.href = dlHref;
3782            } else {
3783                elems.title.textContent = JSONItems.asset_name;
3784            }
3785        }
3786
3787        if (elems.fileFormat) {
3788            if (JSONItems.fileformat) {
3789                elems.fileFormat.textContent = JSONItems.fileformat;
3790            }
3791        }
3792
3793        if (elems.assetDetailType) {
3794            if (JSONItems.assetdetail_type_name) {
3795                elems.assetDetailType.textContent = JSONItems.assetdetail_type_name;
3796            }
3797        }
3798
3799        if ((elems.fileFormat && JSONItems.fileformat) ||
3800            (elems.assetDetailType && JSONItems.assetdetail_type_name)) {
3801            if (elems.fileSize) {
3802                if (Number(JSONItems.filesize) < 1024 * 1024) {
3803                    elems.fileSize.textContent = util.convertByteToKB(JSONItems.filesize);
3804                } else {
3805                    elems.fileSize.textContent = util.convertByteToMB(JSONItems.filesize);
3806                }
3807            }
3808        }
3809
3810        if ((elems.fileFormat && !JSONItems.fileformat) ||
3811            (elems.assetDetailType && !JSONItems.assetdetail_type_name)) {
3812            if (Number(JSONItems.filesize) < 1024 * 1024) {
3813                elems.fileInfo.textContent = '(' + util.convertByteToKB(JSONItems.filesize) + ')';
3814            } else {
3815                elems.fileInfo.textContent = '(' + util.convertByteToMB(JSONItems.filesize) + ')';
3816            }
3817        }
3818
3819        if (elems.assetLink) {
3820            elems.assetLink.href = dlHref;
3821        }
3822
3823        if (elems.dlBtn) {
3824            elems.dlBtn.href = dlHref;
3825        }
3826
3827        if (elems.addBtn) {
3828            elems.addBtn.id = JSONItems.asset_id;
3829            elems.addBtn.setAttribute('data-seriesid', seriesID);
3830
3831            if (elems.downloadListContent) {
3832                elems.downloadListContent.querySelectorAll('.js-downloadListPanel-deleteButton').forEach(function (items) {
3833                    if (JSONItems.asset_id === items.id.split('delete-')[1]) {
3834                        elems.addBtn.classList.add('Disabled');
3835                        elems.addBtn.disabled = true;
3836                    }
3837                });
3838            }
3839        }
3840
3841        if (elems.lang) {
3842            if (elems.lang === legacyElems.lang) {
3843                if (GLOBAL.SELECT_LANG1 && GLOBAL.SELECT_LANG1[JSONItems.language_type_id]) {
3844                    elems.lang.textContent = GLOBAL.SELECT_LANG1[JSONItems.language_type_id];
3845                } else if (GLOBAL.SELECT_LANG2 && GLOBAL.SELECT_LANG2[JSONItems.language_type_id]) {
3846                    elems.lang.textContent = GLOBAL.SELECT_LANG2[JSONItems.language_type_id];
3847                }
3848            } else {
3849                if (GLOBAL.SELECT_LANG && GLOBAL.SELECT_LANG[JSONItems.language_type_id]) {
3850                    elems.lang.textContent = GLOBAL.SELECT_LANG[JSONItems.language_type_id];
3851                }
3852            }
3853        }
3854
3855        if (!JSONItems.softwarepublishlevel_id) {
3856            if (elems.iconKey) {
3857                elems.iconKey.remove();
3858            }
3859        }
3860
3861        if (elems.os) {
3862            if (JSONItems.softwareos_type_name) {
3863                elems.os.textContent = GLOBAL.TRANSLATION.OSLabel + ' ' + JSONItems.softwareos_type_name;
3864            } else {
3865                elems.os.remove();
3866            }
3867        }
3868
3869        if (elems.version) {
3870            if (JSONItems.softwareversion) {
3871                elems.version.textContent = GLOBAL.TRANSLATION.VersionLabel + ' ' + JSONItems.softwareversion;
3872            } else {
3873                elems.version.remove();
3874            }
3875        }
3876
3877        if (elems.updateDate) {
3878            if (JSONItems.softwarelastupdate_date) {
3879                elems.updateDate.textContent = GLOBAL.TRANSLATION.LastUpdateDateLabel + ' ' + JSONItems.softwarelastupdate_date;
3880            } else {
3881                elems.updateDate.remove();
3882            }
3883        }
3884
3885        if (elems.descriptionLink) {
3886            if (JSONItems.softwaredescriptionurl) {
3887                if (/keyence\.co\.jp$/.test(win.location.host)) {
3888                    elems.descriptionLink.classList.add('js-modal-ajax');
3889                } else if (!hasModalTrigger) {
3890                    elems.descriptionLink.classList.add('ModalAjax');
3891                    elems.descriptionLink.classList.add('js-modalAjax');
3892                }
3893
3894                if (elems.descriptionLinkLabel) {
3895                    elems.descriptionLinkLabel.textContent = GLOBAL.TRANSLATION.DescriptionLabel;
3896                } else {
3897                    elems.descriptionLink.textContent = GLOBAL.TRANSLATION.DescriptionLabel;
3898                }
3899
3900                if (hasModalTrigger) {
3901                    descriptionTemplateHtml = elems.descriptionTemplate.innerHTML;
3902                    descriptionTemplateText = descriptionTemplateHtml.replace(/(data-standalone-content-loader-url-value=)""/g, '$1"' + GLOBAL.ORIGINAL_DOMAIN + JSONItems.softwaredescriptionurl + '"');
3903                    elems.descriptionTemplate.innerHTML = descriptionTemplateText;
3904                }
3905
3906                elems.descriptionLink.href = GLOBAL.ORIGINAL_DOMAIN + JSONItems.softwaredescriptionurl;
3907                elems.descriptionLink.target = '_blank';
3908            } else {
3909                if (elems.description) {
3910                    elems.description.remove();
3911                }
3912            }
3913        }
3914
3915        if (elems.summary) {
3916            if (JSONItems.description) {
3917                elems.summary.textContent = util.getOmittedText(JSONItems.description, elems.summary);
3918            } else {
3919                elems.summary.remove();
3920            }
3921        }
3922    };
3923
3924    K_S.fn.setLoadDataSheets = function (addOffsetParam, drilldownNotUpdateFlag, callback) {
3925        var dict = util.makeQueryIntoDict();
3926        var displayMaxNum;
3927        var outputSelectorGroup;
3928        var fragment;
3929        var nodeClone;
3930        var list;
3931        var loadPath;
3932        var fn = {};
3933
3934        if (!K_S.getElem.searchDataSheetList || !K_S.getElem.searchDataSheetListTemplate) {
3935            return;
3936        }
3937
3938        displayMaxNum = K_S.getElem.searchDataSheetList.getAttribute('data-limit');
3939        outputSelectorGroup = K_S.getElem.searchDataSheetList.closest('.SearchDownloadListGroup');
3940        fragment = doc.createDocumentFragment();
3941        loadPath = K_S.fn.getDataSheetsLoadPath(K_S.getElem.searchDataSheetList);
3942
3943        if (typeof dict.o === 'undefined') {
3944            dict.o = 0;
3945        }
3946
3947        if (typeof dict.s === 'undefined') {
3948            dict.s = '';
3949        }
3950
3951        if (typeof dict.modelId === 'undefined') {
3952            dict.modelId = '';
3953        }
3954
3955        if (!addOffsetParam) {
3956            addOffsetParam = `&o=${dict.o}&s=${dict.s}`;
3957        }
3958
3959        if (/^\/products\/[a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+\/downloads\/$/.test(win.location.pathname)) {
3960            if (dict.modelId) {
3961                addOffsetParam = `&o=${dict.o}&s=2`;
3962            } else {
3963                addOffsetParam = `&o=${dict.o}&s=1`;
3964            }
3965        }
3966
3967        fn.updateNav = function () {
3968            if (K_S.getElem.loadResultsNav && !/all/.test(location.pathname)) {
3969                K_S.getElem.loadResultsNav.querySelectorAll('a[data-mode]').forEach(function (items) {
3970                    items.href = items.pathname +
3971                        '?mode=' +
3972                        items.dataset.mode +
3973                        '&modelId=' +
3974                        dict.modelId;
3975
3976                    if (!dict.mode) {
3977                        dict.mode = 'ca';
3978                    }
3979
3980                    if (dict.mode === items.dataset.mode) {
3981                        items.setAttribute('aria-current', 'page');
3982                    }
3983                });
3984            }
3985        };
3986
3987        fn.updateNav();
3988
3989        console.log('Data Sheet API: ' + loadPath + addOffsetParam);
3990
3991        util.getJSON(loadPath + addOffsetParam).then(function (response) {
3992            var seriesID = response.meta.request_params.webseries_id[0];
3993            var dataSheetsArr = response.result.datasheets;
3994            var resultTotal = response.result.attribute.total;
3995            var resultOffset = response.result.attribute.offset;
3996            var updateListStr = '#' + K_S.getElem.searchDataSheetList.id + '>li';
3997            var dataSheetResultNum = doc.querySelectorAll('.js-loadDataSheets-resultsNumber');
3998
3999            if (resultOffset === 0) {
4000                K_S.getElem.searchDataSheetList.querySelectorAll(updateListStr).forEach(function (items) {
4001                    items.remove();
4002                });
4003            }
4004
4005            if (!seriesID) {
4006                seriesID = '';
4007            }
4008
4009            if (!resultTotal) {
4010                K_S.getElem.searchDataSheetList.classList.add(K_S.CONFIG.NORESULT_ATTR);
4011            } else {
4012                K_S.getElem.searchDataSheetList.classList.remove(K_S.CONFIG.NORESULT_ATTR);
4013            }
4014
4015            if (outputSelectorGroup) {
4016                if (resultTotal > 0) {
4017                    outputSelectorGroup.hidden = false;
4018                } else {
4019                    outputSelectorGroup.hidden = true;
4020                }
4021            }
4022
4023            dataSheetResultNum.forEach(function (items) {
4024                items.textContent = resultTotal;
4025            });
4026
4027            dataSheetsArr.forEach(function (items, index) {
4028                if (displayMaxNum && index > (displayMaxNum - 1)) {
4029                    return;
4030                }
4031                nodeClone = util.createNodeClone(K_S.getElem.searchDataSheetListTemplate, 'li');
4032                K_S.fn.setDataSheetsDisplay(nodeClone, items);
4033
4034                fragment.appendChild(nodeClone);
4035            });
4036
4037            K_S.getElem.searchDataSheetList.appendChild(fragment);
4038            list = K_S.getElem.searchDataSheetList.querySelectorAll(updateListStr);
4039            K_S.fn.setMoreBtnDisplay(resultOffset, resultTotal);
4040            K_S.fn.setResultDisplay(list);
4041
4042            if (!drilldownNotUpdateFlag) {
4043                K_S.fn.setDrillDown.run(response);
4044            }
4045        }).then(function () {
4046            if (callback) {
4047                callback();
4048            }
4049        }).catch(function (error) {
4050            console.log(error);
4051        });
4052    };
4053
4054    K_S.fn.getDataSheetsLoadPath = function (outputSelector) {
4055        var discontinuedCookie = util.getCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME);
4056        var categoryCookieName = util.addAssetTypeToString(K_S.CONFIG.SELECT_CATEGORY_COOKIE_NAME);
4057        var categoryCookie = util.getCookie(categoryCookieName);
4058        var dict = util.makeQueryIntoDict();
4059        var groupIDParam = '';
4060        var typeIDParam = '';
4061        var seriesIDParam = '';
4062        var selectCategoryParam = '';
4063        var inputValue;
4064        var drilldownFlagParam;
4065        var loadPath;
4066        var discontinuedParam;
4067        var limit = outputSelector.getAttribute('data-limit') ? outputSelector.getAttribute('data-limit') : K_S.CONFIG.ONE_TIME_DATA_LOAD_MAX_NUM;
4068
4069        if (typeof discontinuedCookie !== 'undefined') {
4070            if (discontinuedCookie === '1') {
4071                discontinuedParam = 1;
4072            } else {
4073                discontinuedParam = 0;
4074            }
4075        } else {
4076            discontinuedParam = 0;
4077        }
4078
4079        if (K_S.getElem.drillDownNav) {
4080            if (dict.group_id) {
4081                groupIDParam = decodeURIComponent(dict.group_id);
4082            } else {
4083                groupIDParam = outputSelector.getAttribute('data-group-id');
4084            }
4085            if (dict.type_id) {
4086                typeIDParam = decodeURIComponent(dict.type_id);
4087            } else {
4088                typeIDParam = outputSelector.getAttribute('data-type-id');
4089            }
4090            if (dict.webseries_id) {
4091                seriesIDParam = decodeURIComponent(dict.webseries_id);
4092            } else {
4093                seriesIDParam = outputSelector.getAttribute('data-series-id');
4094            }
4095            drilldownFlagParam = 1;
4096        } else {
4097            seriesIDParam = GLOBAL.CURRENT_SERIESE_ID;
4098            drilldownFlagParam = 0;
4099        }
4100
4101        if (categoryCookie) {
4102            categoryCookie = JSON.parse(categoryCookie);
4103
4104            categoryCookie.forEach(function (cookies) {
4105                selectCategoryParam += cookies + ',';
4106            });
4107            selectCategoryParam = selectCategoryParam.slice(0, -1);
4108        }
4109
4110        if (!K_S.getElem.filterCategories) {
4111            selectCategoryParam = '';
4112        }
4113
4114        if (K_S.getElem.mainContForm) {
4115            inputValue = K_S.getElem.mainContForm.querySelector('.JSSearchSuggestInput').value;
4116            inputValue = inputValue.replace(/\+/g, ' ');
4117            inputValue = encodeURIComponent(inputValue.trim());
4118        } else {
4119            inputValue = '';
4120        }
4121
4122        loadPath = K_S.API_PATH.DATA_SHEET
4123            + 'q='
4124            + inputValue
4125            + '&l='
4126            + limit
4127            + '&webseries_id='
4128            + seriesIDParam
4129            + '&group_id='
4130            + groupIDParam
4131            + '&type_id='
4132            + typeIDParam
4133            + '&discontinued_flag='
4134            + discontinuedParam
4135            + '&drilldown_flag='
4136            + drilldownFlagParam
4137            + '&product_type_id='
4138            + selectCategoryParam;
4139
4140        return loadPath;
4141    };
4142
4143    K_S.fn.setDataSheetsDisplay = function (nodeClone, JSONItems) {
4144        var title = nodeClone.querySelector('.js-setDataSheetsDisplay-title');
4145        var link = nodeClone.querySelector('.js-setDataSheetsDisplay-link');
4146        var commonName = nodeClone.querySelector('.js-setDataSheetsDisplay-commonName');
4147        var dlBtn = nodeClone.querySelector('.js-setDataSheetsDisplay-download');
4148        var addBtn = nodeClone.querySelector('.js-setDataSheetsDisplay-addButton');
4149        var thumbnail = nodeClone.querySelector('.js-setDataSheetsDisplay-thumbnail');
4150        var thumbnailSize = thumbnail ? thumbnail.getAttribute('data-img-size') : null;
4151        var thumbnailSizeStr = '_M';
4152        var downloadListContent = doc.getElementById('js-downloadListPanel-cartList');
4153
4154        if (title && JSONItems.webproduct_name) {
4155            title.textContent = JSONItems.webproduct_name;
4156        }
4157
4158        if (link && JSONItems.datasheeturl) {
4159            link.href = JSONItems.datasheeturl;
4160        }
4161
4162        if (commonName) {
4163            if (JSONItems.webproductcommon_name) {
4164                commonName.textContent = JSONItems.webproductcommon_name;
4165            } else {
4166                commonName.remove();
4167            }
4168        }
4169
4170        if (dlBtn && JSONItems.datasheeturl) {
4171            dlBtn.href = JSONItems.datasheeturl;
4172        }
4173
4174        if (addBtn && JSONItems.webproduct_id) {
4175            addBtn.id = JSONItems.webproduct_id.replace('PM', 'DS');
4176
4177            if (downloadListContent) {
4178                downloadListContent.querySelectorAll('.js-downloadListPanel-deleteButton').forEach(function (items) {
4179                    if (addBtn.id === items.id.split('delete-')[1]) {
4180                        addBtn.classList.add('Disabled');
4181                        addBtn.disabled = true;
4182                    }
4183                });
4184            }
4185        }
4186
4187        if (thumbnail && JSONItems.product_thumbnail_id) {
4188            if (thumbnailSize && /^[SML]$/.test(thumbnailSize)) {
4189                if (thumbnailSize !== 'M') {
4190                    thumbnailSizeStr = '_' + thumbnailSize;
4191                }
4192            }
4193
4194            thumbnail.src = `${GLOBAL.ORIGINAL_DOMAIN}/img/products/model/${JSONItems.product_thumbnail_id}${thumbnailSizeStr}.jpg`
4195        }
4196    };
4197
4198    K_S.fn.setLoadSeries = function (addOffsetParam, drilldownNotUpdateFlag, callback) {
4199        var dict = util.makeQueryIntoDict();
4200        var displayMaxNum;
4201        var fragment;
4202        var nodeClone;
4203        var list;
4204        var loadPath;
4205
4206        if (!K_S.getElem.searchSeriesList || !K_S.getElem.searchSeriesListTemplate) {
4207            return;
4208        }
4209
4210        displayMaxNum = K_S.getElem.searchSeriesList.getAttribute('data-limit');
4211        fragment = doc.createDocumentFragment();
4212        loadPath = K_S.fn.getSeriesLoadPath();
4213
4214        if (typeof dict.o === 'undefined') {
4215            dict.o = 0;
4216        }
4217
4218        if (typeof dict.s === 'undefined') {
4219            dict.s = '';
4220        }
4221
4222        if (!addOffsetParam) {
4223            addOffsetParam = '&o=' + `&o=${dict.o}&s=${dict.s}`;
4224        }
4225
4226        console.log('Series API: ' + loadPath + addOffsetParam);
4227
4228        util.getJSON(loadPath + addOffsetParam).then(function (response) {
4229            var productsArr = response.result.products;
4230            var resultTotal = response.result.attribute.total;
4231            var resultOffset = response.result.attribute.offset;
4232            var updateListStr = '#' + K_S.getElem.searchSeriesList.id + '>li';
4233            var seriesResultNum = doc.querySelectorAll('.JSSeriesResultNum');
4234            var outputSelectorGroup;
4235
4236            if (resultOffset === 0) {
4237                K_S.getElem.searchSeriesList.querySelectorAll(updateListStr).forEach(function (items) {
4238                    items.remove();
4239                });
4240            }
4241
4242            if (!resultTotal) {
4243                K_S.getElem.searchSeriesList.classList.add(K_S.CONFIG.NORESULT_ATTR);
4244            } else {
4245                K_S.getElem.searchSeriesList.classList.remove(K_S.CONFIG.NORESULT_ATTR);
4246            }
4247
4248            outputSelectorGroup = K_S.getElem.searchSeriesList.closest('.SearchDownloadListGroup');
4249            if (outputSelectorGroup) {
4250                if (resultTotal > 0) {
4251                    outputSelectorGroup.hidden = false;
4252                } else {
4253                    outputSelectorGroup.hidden = true;
4254                }
4255            }
4256
4257            seriesResultNum.forEach(function (items) {
4258                items.textContent = resultTotal;
4259            });
4260
4261            productsArr.forEach(function (items, index) {
4262                if (displayMaxNum && index > (displayMaxNum - 1)) {
4263                    return;
4264                }
4265
4266                nodeClone = util.createNodeClone(K_S.getElem.searchSeriesListTemplate, 'li');
4267                K_S.fn.setSeriesDisplay(nodeClone, items);
4268
4269                fragment.appendChild(nodeClone);
4270            });
4271
4272            K_S.getElem.searchSeriesList.appendChild(fragment);
4273            list = K_S.getElem.searchSeriesList.querySelectorAll(updateListStr);
4274            K_S.fn.setMoreBtnDisplay(resultOffset, resultTotal);
4275            K_S.fn.setResultDisplay(list);
4276
4277            if (!drilldownNotUpdateFlag) {
4278                K_S.fn.setDrillDown.run(response);
4279            }
4280        }).then(function () {
4281            if (callback) {
4282                callback();
4283            }
4284        }).catch(function (error) {
4285            console.log(error);
4286        });
4287    };
4288
4289    K_S.fn.getSeriesLoadPath = function () {
4290        var discontinuedCookie = util.getCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME);
4291        var dict = util.makeQueryIntoDict();
4292        var groupIDParam = '';
4293        var typeIDParam = '';
4294        var loadPath;
4295        var discontinuedParam;
4296        var inputValue;
4297        var drilldownFlagParam;
4298
4299        if (typeof discontinuedCookie !== 'undefined') {
4300            if (discontinuedCookie === '1') {
4301                discontinuedParam = 1;
4302            } else {
4303                discontinuedParam = 0;
4304            }
4305        } else {
4306            discontinuedParam = 0;
4307        }
4308
4309        if (K_S.getElem.drillDownNav) {
4310            if (dict.group_id) {
4311                groupIDParam = decodeURIComponent(dict.group_id);
4312            } else {
4313                groupIDParam = K_S.getElem.searchSeriesList.getAttribute('data-group-id');
4314            }
4315            if (dict.type_id) {
4316                typeIDParam = decodeURIComponent(dict.type_id);
4317            } else {
4318                typeIDParam = K_S.getElem.searchSeriesList.getAttribute('data-type-id');
4319            }
4320            drilldownFlagParam = 1;
4321        } else {
4322            drilldownFlagParam = 0;
4323        }
4324
4325        if (K_S.getElem.mainContForm) {
4326            inputValue = K_S.getElem.mainContForm.querySelector('.JSSearchSuggestInput').value;
4327            inputValue = inputValue.replace(/\+/g, ' ');
4328            inputValue = encodeURIComponent(inputValue.trim());
4329        } else {
4330            inputValue = '';
4331        }
4332
4333        loadPath = K_S.API_PATH.PRODUCT
4334                   + 'q='
4335                   + inputValue
4336                   + '&l='
4337                   + K_S.CONFIG.ONE_TIME_DATA_LOAD_MAX_NUM
4338                   + '&group_id='
4339                   + groupIDParam
4340                   + '&type_id='
4341                   + typeIDParam
4342                   + '&discontinued_flag='
4343                   + discontinuedParam
4344                   + '&drilldown_flag='
4345                   + drilldownFlagParam;
4346
4347        return loadPath;
4348    };
4349
4350    K_S.fn.setSeriesDisplay = function (nodeClone, JSONItems) {
4351        var siteLang = GLOBAL.SITE_LANG ? GLOBAL.SITE_LANG[0] : '';
4352        var series = nodeClone.querySelector('.Series');
4353        var commonName = nodeClone.querySelector('.CommonName');
4354        var name = nodeClone.querySelector('.Name');
4355        var description = nodeClone.querySelector('.Description');
4356        var dlBtn = nodeClone.querySelector('.DownloadBtn');
4357        var priceBtn = nodeClone.querySelector('.PriceBtn');
4358        var thumbnail = nodeClone.querySelector('.Thumbnail img');
4359        var thumbnailLink = nodeClone.querySelector('.ThumbnailLink');
4360        var spec = nodeClone.querySelector('.Spec');
4361        var model = nodeClone.querySelector('.Model');
4362        var support = nodeClone.querySelector('.Support');
4363        var seriesDlLink;
4364        var dlAssetId = '';
4365        var targetDescription;
4366
4367        if (series) {
4368            series.href = JSONItems.url;
4369        }
4370
4371        if (commonName) {
4372            commonName.textContent = JSONItems.webseriescommon_name;
4373        }
4374
4375        if (name) {
4376            name.textContent = JSONItems.display_name;
4377        }
4378
4379        if (description) {
4380            if (JSONItems.description) {
4381                targetDescription = JSONItems.description.replace(/<("[^"]*"|'[^']*'|[^'">])*>/gm, '');
4382                description.textContent = util.getOmittedText(targetDescription, description);
4383            } else {
4384                description.remove();
4385            }
4386        }
4387
4388        if (dlBtn) {
4389            if (JSONItems.catalog_id) {
4390                JSONItems.catalog_id.split(',').forEach(function (assetId) {
4391                    dlAssetId += 'dlAssetId=' + assetId + '&';
4392                });
4393                dlBtn.href = GLOBAL.ORIGINAL_DOMAIN
4394                             + '/download/download/confirmation/?'
4395                             + dlAssetId.slice(0, -1);
4396            } else {
4397                if (/(\/|\/index\.jsp)$/.test(JSONItems.url)) {
4398                    seriesDlLink = JSONItems.url.replace(/(\/|\/index\.jsp)$/, '/downloads/');
4399                    dlBtn.href = seriesDlLink;
4400                }
4401            }
4402        }
4403
4404        if (priceBtn) {
4405            priceBtn.href = `${JSONItems.url}get-pricing/`;
4406        }
4407
4408        if (thumbnail) {
4409            thumbnail.src = GLOBAL.ORIGINAL_DOMAIN
4410                            + '/img/products/series/'
4411                            + JSONItems.product_thumbnail_id
4412                            + '_M.jpg';
4413
4414            if (thumbnailLink) {
4415                thumbnailLink.href = JSONItems.url;
4416            }
4417        }
4418
4419        if (spec) {
4420            if (JSONItems.spec_url) {
4421                spec.href = JSONItems.spec_url;
4422            } else {
4423                spec.parentNode.remove();
4424            }
4425        }
4426
4427        if (model) {
4428            if (JSONItems.model_url) {
4429                model.href = JSONItems.model_url;
4430            } else {
4431                model.parentNode.remove();
4432            }
4433        }
4434
4435        if (support) {
4436            if (JSONItems.supportpageurl) {
4437                support.href = JSONItems.supportpageurl;
4438            } else {
4439                support.parentNode.remove();
4440            }
4441        }
4442    };
4443
4444    K_S.fn.setDrillDown.run = function (response) {
4445        var dict = util.makeQueryIntoDict();
4446        var setDrillDown = this;
4447        var loadMoreTarget;
4448        var searchLinkList;
4449
4450        if (!K_S.getElem.drillDownNav) {
4451            return;
4452        }
4453
4454        if (K_S.getElem.drillDownNav.querySelector('.Group')) {
4455            K_S.getElem.drillDownNav.querySelector('.Group').remove();
4456        }
4457
4458        loadMoreTarget = doc.querySelector('.JSLoadMoreTarget');
4459        searchLinkList = K_S.getElem.drillDownNav.querySelector('.SearchLinkList01');
4460
4461        if (!loadMoreTarget || !searchLinkList) {
4462            return;
4463        }
4464
4465        setDrillDown.display(response, loadMoreTarget);
4466
4467        setDrillDown.toggle('.Switch');
4468        setDrillDown.filter(loadMoreTarget, searchLinkList);
4469        if (dict.q) {
4470            searchLinkList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
4471        }
4472    };
4473
4474    K_S.fn.setDrillDown.display = function (response, loadMoreTarget) {
4475        var dict = util.makeQueryIntoDict();
4476        var drilldownArr = response.result.drilldown;
4477        var fragment = doc.createDocumentFragment();
4478        var groupUL = doc.createElement('ul');
4479        var dataGroupID = loadMoreTarget.getAttribute('data-group-id');
4480        var dataTypeID = loadMoreTarget.getAttribute('data-type-id');
4481        var dataSeriesID = loadMoreTarget.getAttribute('data-series-id');
4482        var searchLinkList = K_S.getElem.drillDownNav.querySelector('.SearchLinkList01');
4483        var parentsClass = 'Parents';
4484        var typeUL;
4485        var seriesUL;
4486        var groupNodeClone;
4487        var typeNodeClone;
4488        var seriesNodeClone;
4489        var groupList;
4490        var groupNav;
4491        var groupNavInner;
4492        var groupCount;
4493        var typeList;
4494        var typeNav;
4495        var typeNavInner;
4496        var typeCount;
4497        var seriesList;
4498        var seriesNav;
4499        var seriesNavInner;
4500        var seriesCount;
4501
4502        groupUL.classList.add(K_S.getAttr.groupHierarchy);
4503        if (!drilldownArr.length) {
4504            searchLinkList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
4505
4506            if (K_S.getElem.drillDownSPButtonList) {
4507                K_S.getElem.drillDownSPButtonList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
4508            }
4509        }
4510        drilldownArr.forEach(function (group) {
4511            groupNodeClone = util.createNodeClone(K_S.getElem.groupListTemplate, 'li');
4512            if (util.checkSupportsTemp() === true) {
4513                groupList = groupNodeClone.querySelector('.GroupList');
4514            } else {
4515                groupList = groupNodeClone;
4516            }
4517            groupNav = groupList.querySelector('.Name');
4518            groupNavInner = groupList.querySelector('.NameInner');
4519            groupCount = groupList.querySelector('.Count');
4520
4521            if (groupNav) {
4522                groupNavInner.textContent = group.name;
4523                groupNav.setAttribute('data-group-id', group.id);
4524
4525                if (dataGroupID === group.id || decodeURIComponent(dict.group_id) === group.id) {
4526                    groupList.classList.add(K_S.CONFIG.OPEN_ATTR);
4527                    groupNavInner.classList.add(K_S.CONFIG.ACTIVE_ATTR);
4528                    searchLinkList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
4529                    if (K_S.getElem.categorySPLabel) {
4530                        K_S.getElem.categorySPLabel.textContent = groupNav.textContent.split('(')[0];
4531                    }
4532                    if (K_S.getElem.drillDownSPButtonList) {
4533                        K_S.getElem.drillDownSPButtonList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
4534                    }
4535                }
4536            }
4537            if (groupCount) {
4538                groupCount.textContent = ' (' + group.count + ')';
4539            }
4540
4541
4542            typeUL = doc.createElement('ul');
4543            typeUL.classList.add(K_S.getAttr.typeHierarchy);
4544
4545            group.children.forEach(function (type) {
4546                typeNodeClone = util.createNodeClone(K_S.getElem.typeListTemplate, 'li');
4547                if (util.checkSupportsTemp() === true) {
4548                    typeList = typeNodeClone.querySelector('.TypeList');
4549                } else {
4550                    typeList = typeNodeClone;
4551                }
4552
4553                if (!K_S.getElem.seriesListTemplate) {
4554                    typeList.classList.add(K_S.CONFIG.OPEN_ATTR);
4555                    typeList.querySelector('.Switch').disabled = true;
4556                }
4557                typeNav = typeList.querySelector('.Name');
4558                typeNavInner = typeList.querySelector('.NameInner');
4559                typeCount = typeList.querySelector('.Count');
4560
4561                if (typeNav) {
4562                    typeNavInner.textContent = type.name;
4563                    typeNav.setAttribute('data-type-id', type.id);
4564
4565                    if (dataTypeID === type.id || decodeURIComponent(dict.type_id) === type.id) {
4566                        groupList.classList.add(K_S.CONFIG.OPEN_ATTR);
4567                        typeList.classList.add(K_S.CONFIG.OPEN_ATTR);
4568                        groupList.classList.add(parentsClass);
4569                        typeNavInner.classList.add(K_S.CONFIG.ACTIVE_ATTR);
4570                        searchLinkList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
4571
4572                        if (K_S.getElem.categorySPLabel) {
4573                            K_S.getElem.categorySPLabel.textContent = typeNav.textContent.split('(')[0];
4574                        }
4575                    }
4576                }
4577
4578                if (typeCount) {
4579                    typeCount.textContent = ' (' + type.count + ')';
4580                }
4581
4582                groupList.appendChild(typeUL).appendChild(typeNodeClone);
4583                seriesUL = doc.createElement('ul');
4584                seriesUL.classList.add(K_S.getAttr.seriesHierarchy);
4585
4586                if (type.children) {
4587                    type.children.forEach(function (series) {
4588                        if (K_S.getElem.seriesListTemplate) {
4589                            seriesNodeClone = util.createNodeClone(K_S.getElem.seriesListTemplate, 'li');
4590                            if (util.checkSupportsTemp() === true) {
4591                                seriesList = seriesNodeClone.querySelector('.SeriesList');
4592                            } else {
4593                                seriesList = seriesNodeClone;
4594                            }
4595                            seriesNav = seriesList.querySelector('.Name');
4596                            seriesNavInner = seriesList.querySelector('.NameInner');
4597                            seriesCount = seriesList.querySelector('.Count');
4598
4599                            if (seriesNav) {
4600                                seriesNavInner.textContent = series.name;
4601                                seriesNav.setAttribute('data-series-id', series.id);
4602
4603                                if (dataSeriesID === series.id || decodeURIComponent(dict.webseries_id) === series.id) {
4604                                    groupList.classList.add(K_S.CONFIG.OPEN_ATTR);
4605                                    typeList.classList.add(K_S.CONFIG.OPEN_ATTR);
4606                                    groupList.classList.add(parentsClass);
4607                                    typeList.classList.add(parentsClass);
4608                                    seriesNavInner.classList.add(K_S.CONFIG.ACTIVE_ATTR);
4609                                    seriesNav.classList.add(K_S.CONFIG.OPEN_ATTR);
4610                                    searchLinkList.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
4611
4612                                    if (K_S.getElem.categorySPLabel) {
4613                                        K_S.getElem.categorySPLabel.textContent = seriesNav.textContent.split('(')[0];
4614                                    }
4615                                }
4616                            }
4617
4618                            if (seriesCount) {
4619                                seriesCount.textContent = ' (' + series.count + ')';
4620                            }
4621
4622                            typeList.appendChild(seriesUL).appendChild(seriesNodeClone);
4623                        }
4624                    });
4625                }
4626            });
4627
4628            fragment.appendChild(groupNodeClone);
4629        });
4630
4631        K_S.getElem.drillDownNav.insertBefore(groupUL, K_S.getElem.drillDownNav.querySelector('template')).appendChild(fragment);
4632    };
4633
4634    K_S.fn.setDrillDown.toggle = function (selector) {
4635        if (!K_S.getElem.drillDownNav) {
4636            return;
4637        }
4638        K_S.getElem.drillDownNav.querySelectorAll(selector).forEach(function (items) {
4639            var setWhenClick = function (e) {
4640                var self = this;
4641                var parent = self.parentNode.classList;
4642
4643                e.preventDefault();
4644                if (!K_S.getElem.seriesListTemplate) {
4645                    if (parent.contains('TypeList')) {
4646                        return;
4647                    }
4648                }
4649                if (parent.contains(K_S.CONFIG.OPEN_ATTR)) {
4650                    parent.remove(K_S.CONFIG.OPEN_ATTR);
4651                    self.textContent = K_S.getAttr.openText;
4652                } else {
4653                    parent.add(K_S.CONFIG.OPEN_ATTR);
4654                    self.textContent = K_S.getAttr.closeText;
4655                }
4656            };
4657
4658            if (!items.disabled) {
4659                items.textContent = K_S.getAttr.openText;
4660            }
4661
4662            items.addEventListener('click', setWhenClick, false);
4663        });
4664    };
4665
4666    K_S.fn.setDrillDown.filter = function (loadMoreTarget, filterClearElem) {
4667        if (!K_S.getElem.drillDownNav) {
4668            return;
4669        }
4670        K_S.getElem.drillDownNav.querySelectorAll('.Name').forEach(function (items) {
4671            var dict = util.makeQueryIntoDict();
4672            var setWhenClick = function (e) {
4673                var self = this;
4674                var closestList = self.closest('li').classList;
4675                var closestGroupId = self.closest('.GroupList').querySelector('[data-group-id]').getAttribute('data-group-id');
4676                var closestTypeId;
4677                var promise = Promise.resolve();
4678
4679                e.preventDefault();
4680                promise.then(function () {
4681                    dict.o = 0;
4682                    dict.s = 1;
4683                    if (closestList.contains('GroupList')) {
4684                        loadMoreTarget.setAttribute('data-group-id', self.getAttribute('data-group-id'));
4685                        loadMoreTarget.setAttribute('data-type-id', '');
4686                        loadMoreTarget.setAttribute('data-series-id', '');
4687                        dict.group_id = encodeURIComponent(self.getAttribute('data-group-id'));
4688                        dict.type_id = '';
4689                        dict.webseries_id = '';
4690                        if (K_S.getElem.categorySPLabel) {
4691                            K_S.getElem.categorySPLabel.textContent = self.textContent.split('(')[0];
4692                        }
4693                    }
4694                    if (closestList.contains('TypeList')) {
4695                        loadMoreTarget.setAttribute('data-group-id', closestGroupId);
4696                        loadMoreTarget.setAttribute('data-type-id', self.getAttribute('data-type-id'));
4697                        loadMoreTarget.setAttribute('data-series-id', '');
4698                        dict.group_id = encodeURIComponent(closestGroupId);
4699                        dict.type_id = encodeURIComponent(self.getAttribute('data-type-id'));
4700                        dict.webseries_id = '';
4701                        if (K_S.getElem.categorySPLabel) {
4702                            K_S.getElem.categorySPLabel.textContent = self.textContent.split('(')[0];
4703                        }
4704                    }
4705                    if (closestList.contains('SeriesList')) {
4706                        closestTypeId = self.closest('.TypeList').querySelector('[data-type-id]').getAttribute('data-type-id');
4707                        loadMoreTarget.setAttribute('data-group-id', closestGroupId);
4708                        loadMoreTarget.setAttribute('data-type-id', closestTypeId);
4709                        loadMoreTarget.setAttribute('data-series-id', self.getAttribute('data-series-id'));
4710                        dict.group_id = encodeURIComponent(closestGroupId);
4711                        dict.type_id = encodeURIComponent(closestTypeId);
4712                        dict.webseries_id = encodeURIComponent(self.getAttribute('data-series-id'));
4713                        if (K_S.getElem.categorySPLabel) {
4714                            K_S.getElem.categorySPLabel.textContent = self.textContent.split('(')[0];
4715                        }
4716                    }
4717                    util.updateBrowserHistory(dict);
4718                    filterClearElem.classList.add(K_S.CONFIG.HIDDEN_ATTR);
4719                }).then(function () {
4720                    K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&s=1&o=0');
4721                    K_S.fn.setLoadDataSheets('&s=1&o=0');
4722                    K_S.fn.setLoadSeries('&s=1&o=0');
4723                    setTimeout(function () {
4724                        filterClearElem.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
4725                    }, 300);
4726                });
4727            };
4728
4729            items.addEventListener('click', setWhenClick, false);
4730        });
4731    };
4732
4733    K_S.fn.setDrillDown.selectTarget = function () {
4734        var setWhenClick;
4735
4736        if (!K_S.getElem.drillDownSPSelect) {
4737            return;
4738        }
4739
4740        setWhenClick = function (e) {
4741            var modalWrapper = doc.getElementById('SearchModal');
4742            var focusTarget = modalWrapper && modalWrapper.childNodes[1] ?
4743                doc.querySelector('[data-modal-target="' + modalWrapper.childNodes[1].id + '"]') : null;
4744
4745            e.preventDefault();
4746
4747            if (focusTarget) {
4748                focusTarget.classList.add(K_S.CONFIG.ACTIVE_ATTR);
4749                focusTarget.addEventListener('animationend', function () {
4750                    this.classList.remove(K_S.CONFIG.ACTIVE_ATTR);
4751                }, false);
4752            }
4753
4754            K_S.fn.closeSearchModal();
4755            setTimeout(function () {
4756                K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&o=0');
4757                K_S.fn.setLoadDataSheets('&o=0');
4758                K_S.fn.setLoadSeries('&o=0');
4759            }, 200);
4760        };
4761
4762        K_S.getElem.drillDownSPSelect.addEventListener('click', setWhenClick, false);
4763    };
4764
4765    K_S.fn.setDrillDown.filterClear = function () {
4766        var loadMoreTarget = doc.querySelector('.JSLoadMoreTarget');
4767        var dict = util.makeQueryIntoDict();
4768        var searchLinkList;
4769        var setWhenClick;
4770
4771        if (!loadMoreTarget || !K_S.getElem.drillDownNav) {
4772            return;
4773        }
4774
4775        searchLinkList = K_S.getElem.drillDownNav.querySelector('.SearchLinkList01');
4776        setWhenClick = function (e) {
4777            var promise = Promise.resolve();
4778
4779            e.preventDefault();
4780            promise.then(function () {
4781                loadMoreTarget.setAttribute('data-group-id', '');
4782                loadMoreTarget.setAttribute('data-type-id', '');
4783                loadMoreTarget.setAttribute('data-series-id', '');
4784                dict.group_id = '';
4785                dict.type_id = '';
4786                dict.webseries_id = '';
4787                dict.q = '';
4788                dict.o = 0;
4789                dict.s = '';
4790                util.updateBrowserHistory(dict);
4791                doc.querySelectorAll('.JSSearchSuggestInput').forEach(function (items) {
4792                    items.value = '';
4793                });
4794                if (K_S.getElem.categorySPLabel && K_S.getElem.categoryPCLabel) {
4795                    K_S.getElem.categorySPLabel.textContent = K_S.getElem.categoryPCLabel.textContent;
4796                }
4797            }).then(function () {
4798                if (doc.body.getAttribute('data-search-modal')) {
4799                    K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&o=0');
4800                    K_S.fn.setLoadDataSheets('&o=0');
4801                    K_S.fn.setLoadSeries('&o=0');
4802                    if (K_S.getElem.drillDownSPButtonList) {
4803                        K_S.getElem.drillDownSPButtonList.classList.add(K_S.CONFIG.HIDDEN_ATTR);
4804                    }
4805                } else {
4806                    K_S.fn.setLoadAssets(K_S.getElem.searchDL, '&o=0');
4807                    K_S.fn.setLoadDataSheets('&o=0');
4808                    K_S.fn.setLoadSeries('&o=0');
4809                }
4810                searchLinkList.classList.add(K_S.CONFIG.HIDDEN_ATTR);
4811            });
4812        };
4813
4814        searchLinkList.querySelector('.JSFilterClear').addEventListener('click', setWhenClick, false);
4815
4816        if (K_S.getElem.drillDownSPReset) {
4817            K_S.getElem.drillDownSPReset.addEventListener('click', setWhenClick, false);
4818        }
4819    };
4820
4821    K_S.fn.setLoadMore = function () {
4822        var setWhenClick;
4823
4824        if (!K_S.getElem.loadMoreBtn || !K_S.getElem.loadMoreBtnWrap) {
4825            return;
4826        }
4827
4828        setWhenClick = function (e) {
4829            var self = this;
4830            var setLoading;
4831            var setLoadStart;
4832            var addOffsetParam = '&o=' + self.getAttribute('data-offset');
4833            var drilldownNotUpdateFlag = true;
4834            var dict = util.makeQueryIntoDict();
4835
4836            e.preventDefault();
4837            dict.o = self.getAttribute('data-offset');
4838
4839            if (dict.s) {
4840                addOffsetParam = `${addOffsetParam}&s=${dict.s}`;
4841            }
4842
4843            setLoadStart = function () {
4844                self.classList.remove(K_S.CONFIG.LOAD_ATTR);
4845                if (K_S.getElem.loadMoreBtnLabel) {
4846                    K_S.getElem.loadMoreBtnLabel.textContent = K_S.getAttr.loadStartText;
4847                } else {
4848                    self.textContent = K_S.getAttr.loadStartText;
4849                }
4850            };
4851
4852            setLoading = function () {
4853                self.classList.add(K_S.CONFIG.LOAD_ATTR);
4854                if (K_S.getElem.loadMoreBtnLabel) {
4855                    K_S.getElem.loadMoreBtnLabel.textContent = K_S.getAttr.loadingText;
4856                } else {
4857                    self.textContent = K_S.getAttr.loadingText;
4858                }
4859            };
4860
4861            util.updateBrowserHistory(dict);
4862
4863            if (self.classList.contains(K_S.CONFIG.LOAD_ATTR) === false) {
4864                setLoading();
4865                K_S.fn.setLoadAssets(K_S.getElem.searchDL, addOffsetParam, drilldownNotUpdateFlag, function () {
4866                    setLoadStart();
4867                });
4868                K_S.fn.setLoadDataSheets(addOffsetParam, drilldownNotUpdateFlag, function () {
4869                    setLoadStart();
4870                });
4871                K_S.fn.setLoadSeries(addOffsetParam, drilldownNotUpdateFlag, function () {
4872                    setLoadStart();
4873                });
4874                K_S.fn.setLoadPages(addOffsetParam, function () {
4875                    setLoadStart();
4876                });
4877            }
4878        };
4879
4880        K_S.getElem.loadMoreBtn.addEventListener('click', setWhenClick, false);
4881    };
4882
4883    K_S.fn.setMoreBtnDisplay = function (resultOffset, resultTotal) {
4884        if (K_S.getElem.loadMoreBtn) {
4885            if (K_S.getElem.loadMoreBtnLabel) {
4886                K_S.getElem.loadMoreBtnLabel.textContent = K_S.getAttr.loadStartText;
4887            } else {
4888                K_S.getElem.loadMoreBtn.textContent = K_S.getAttr.loadStartText;
4889            }
4890
4891            if (resultOffset === 0) {
4892                K_S.getElem.loadMoreBtn.setAttribute('data-offset', '0');
4893            }
4894            if (resultTotal - resultOffset > K_S.CONFIG.ONE_TIME_DISPLAY_MAX_NUM) {
4895                if (K_S.getElem.loadMoreBtnLabel) {
4896                    K_S.getElem.loadMoreBtnWrap.hidden = false;
4897                } else {
4898                    K_S.getElem.loadMoreBtnWrap.classList.remove(K_S.CONFIG.HIDDEN_ATTR);
4899                }
4900                K_S.getElem.loadMoreBtn.setAttribute('data-offset', resultOffset + K_S.CONFIG.ONE_TIME_DISPLAY_MAX_NUM);
4901            } else {
4902                if (K_S.getElem.loadMoreBtnLabel) {
4903                    K_S.getElem.loadMoreBtnWrap.hidden = true;
4904                } else {
4905                    K_S.getElem.loadMoreBtnWrap.classList.add(K_S.CONFIG.HIDDEN_ATTR);
4906                }
4907            }
4908        }
4909    };
4910
4911    K_S.fn.setDiscontinuedCookie = function () {
4912        var setWhenChange;
4913        var discontinuedCookie;
4914        var customCheckbox;
4915        var setCheckOn;
4916        var setCheckOff;
4917
4918        if (!K_S.getElem.productsSuggestFilter) {
4919            return;
4920        }
4921
4922        discontinuedCookie = util.getCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME);
4923        customCheckbox = K_S.getElem.productsSuggestFilter.closest('label').querySelector('span.CustomCheckbox');
4924
4925        setCheckOn = function () {
4926            var promise = Promise.resolve();
4927
4928            promise.then(function () {
4929                K_S.getElem.productsSuggestFilter.classList.add(K_S.CONFIG.CHECKED_ATTR);
4930                K_S.getElem.productsSuggestFilter.checked = true;
4931            }).then(function () {
4932                if (customCheckbox) {
4933                    customCheckbox.classList.add('checked');
4934                }
4935            });
4936        };
4937
4938        setCheckOff = function () {
4939            var promise = Promise.resolve();
4940
4941            promise.then(function () {
4942                K_S.getElem.productsSuggestFilter.classList.remove(K_S.CONFIG.CHECKED_ATTR);
4943                K_S.getElem.productsSuggestFilter.checked = false;
4944            }).then(function () {
4945                if (customCheckbox) {
4946                    customCheckbox.classList.remove('checked');
4947                }
4948            });
4949        };
4950
4951        setWhenChange = function () {
4952            if (K_S.getElem.productsSuggestFilter.classList.contains(K_S.CONFIG.CHECKED_ATTR)) {
4953                setCheckOff();
4954                util.setCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME, 0);
4955            } else {
4956                setCheckOn();
4957                util.setCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME, 1);
4958            }
4959        };
4960
4961        if (typeof discontinuedCookie !== 'undefined') {
4962            if (discontinuedCookie === '1') {
4963                setCheckOn();
4964            } else {
4965                setCheckOff();
4966            }
4967        } else {
4968            if (K_S.getElem.productsSuggestFilter.checked) {
4969                setCheckOn();
4970                util.setCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME, 1);
4971            } else {
4972                setCheckOff();
4973                util.setCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME, 0);
4974            }
4975        }
4976
4977        K_S.getElem.productsSuggestFilter.addEventListener('change', setWhenChange, false);
4978    };
4979
4980    K_S.fn.setToggleDiscontinued = function () {
4981        var promise = Promise.resolve();
4982        var checkbox;
4983        var button;
4984        var cookie;
4985        var setWhenChange;
4986        var setWhenClick;
4987
4988        if (!K_S.getElem.discontinuedToggle) {
4989            return;
4990        }
4991
4992        checkbox = K_S.getElem.discontinuedToggle.querySelector('[type="checkbox"]');
4993        button = K_S.getElem.discontinuedToggle.querySelector('button');
4994        cookie = util.getCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME);
4995
4996        if (!cookie) {
4997            util.setCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME, 0);
4998        }
4999
5000        if (cookie) {
5001            if (cookie === '1') {
5002                if (checkbox) {
5003                    checkbox.checked = true;
5004                }
5005                if (button) {
5006                    button.setAttribute('aria-checked', true);
5007                }
5008            } else {
5009                if (checkbox) {
5010                    checkbox.checked = false;
5011                }
5012                if (button) {
5013                    button.setAttribute('aria-checked', false);
5014                }
5015            }
5016        }
5017
5018        setWhenChange = function () {
5019            var self = this;
5020
5021            promise.then(function () {
5022                if (self.checked) {
5023                    util.setCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME, 1);
5024                } else {
5025                    util.setCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME, 0);
5026                }
5027            }).then(function () {
5028                setTimeout(function () {
5029                    K_S.fn.setLoadSeries('&o=0');
5030                }, 200);
5031            });
5032        };
5033
5034        setWhenClick = function () {
5035            var self = this;
5036            var dict = util.makeQueryIntoDict();
5037
5038            promise.then(function () {
5039                if (self.getAttribute('aria-checked') === 'true') {
5040                    util.setCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME, 1);
5041                } else {
5042                    util.setCookie(K_S.CONFIG.DISCONTINUED_COOKIE_NAME, 0);
5043                }
5044
5045                dict.o = 0;
5046                util.updateBrowserHistory(dict);
5047            }).then(function () {
5048                setTimeout(function () {
5049                    K_S.fn.setLoadSeries('&o=0');
5050                }, 200);
5051            });
5052        };
5053
5054        if (checkbox) {
5055            checkbox.addEventListener('change', setWhenChange, false);
5056        }
5057
5058        if (button) {
5059            button.addEventListener('click', setWhenClick, false);
5060        }
5061    };
5062
5063    K_S.fn.slider = function (outputSelector) {
5064        var $slider;
5065        var $bxSlider;
5066        var setPager;
5067        var $pager;
5068        var runForEachScreen1;
5069        var runForEachScreen2;
5070        var setSlider;
5071        var removeControls;
5072        var removeClones;
5073        var removeStyles;
5074        var rebuildSlider;
5075        var rebuildSliderForOnLoad;
5076        var reloadSlider;
5077        var overlappingPreventClass1 = 'overlappingPrevent1';
5078        var readyClass = 'IsReady';
5079        var staticClass = 'IsStatic';
5080        var bxSliderWrapperClass = 'search-bx-wrapper';
5081        var bxSliderControlsClass = 'bx-controls';
5082        var bxSliderCloneClass = 'bx-clone';
5083        var bxSliderLoadingClass = 'bx-loading';
5084        var optionForLargeScreen = {
5085            minSlides: 5,
5086            maxSlides: 5,
5087            slideWidth: 186,
5088            slideMargin: 10,
5089            wrapperClass: bxSliderWrapperClass,
5090        };
5091        var optionForSmallScreen = {
5092            minSlides: 1,
5093            maxSlides: 1,
5094            slideWidth: 727,
5095            slideMargin: 0,
5096            wrapperClass: bxSliderWrapperClass,
5097        };
5098
5099        if (typeof $ === 'undefined' || typeof $.fn.bxSlider === 'undefined') {
5100            return;
5101        }
5102
5103        setPager = function () {
5104            $pager = $('.bx-default-pager');
5105
5106            if ($pager.length) {
5107                $pager.off('mouseover');
5108                $pager.on('click', 'a', function (e) {
5109                    var $this = $(this);
5110                    var currentIndex;
5111                    var targetIndex;
5112
5113                    e.preventDefault();
5114                    currentIndex = $slider.getCurrentSlide();
5115                    targetIndex = $this.attr('data-slide-index');
5116                    targetIndex = parseInt(targetIndex, 10);
5117                    if (currentIndex !== targetIndex) {
5118                        $slider.goToSlide(targetIndex);
5119                    }
5120                });
5121            }
5122        };
5123
5124        removeControls = function () {
5125            if ($('.' + bxSliderControlsClass).length) {
5126                $('.' + bxSliderControlsClass).remove();
5127            }
5128        };
5129
5130        removeClones = function () {
5131            if ($('.' + bxSliderCloneClass).length) {
5132                $('.' + bxSliderCloneClass).remove();
5133            }
5134        };
5135
5136        removeStyles = function () {
5137            $slider.removeAttr('style');
5138            $slider.find('li').removeAttr('style');
5139        };
5140
5141        rebuildSlider = function (options) {
5142            var observer;
5143            var target = outputSelector;
5144            var config = {
5145                attributes: true,
5146                attributeFilter: ['style'],
5147            };
5148
5149            if ($slider.closest('.' + bxSliderWrapperClass).length) {
5150                $slider.removeAttr('style');
5151                $slider.removeClass(readyClass);
5152                setTimeout(function () {
5153                    $slider.unwrap().unwrap();
5154                    $slider.bxSlider(options);
5155                    setPager($slider);
5156                }, 200);
5157
5158                observer = new MutationObserver(function () {
5159                    observer.disconnect();
5160                    $slider.addClass(readyClass);
5161                });
5162                observer.observe(target, config);
5163            } else {
5164                $slider.removeClass(readyClass);
5165                setTimeout(function () {
5166                    $slider.bxSlider(options);
5167                    setPager($slider);
5168                }, 200);
5169                observer = new MutationObserver(function () {
5170                    observer.disconnect();
5171                    $slider.addClass(readyClass);
5172                });
5173                observer.observe(target, config);
5174            }
5175        };
5176
5177        reloadSlider = function (options) {
5178            $bxSlider.reloadSlider(options);
5179            setPager($slider);
5180            $slider.addClass(readyClass);
5181        };
5182
5183        rebuildSliderForOnLoad = function (options) {
5184            var observer;
5185            var target = outputSelector;
5186            var config = {
5187                attributes: true,
5188                attributeFilter: ['style'],
5189            };
5190
5191            if ($slider.parents('.' + bxSliderWrapperClass).length > 1) {
5192                $('.' + bxSliderWrapperClass).css('opacity', 0);
5193                observer = new MutationObserver(function () {
5194                    observer.disconnect();
5195                    removeControls();
5196                    $slider.unwrap().unwrap();
5197                    $('.' + bxSliderLoadingClass).remove();
5198                    $(outputSelector).find('.' + bxSliderCloneClass).remove();
5199                    reloadSlider(options);
5200                    $slider.addClass(readyClass);
5201                });
5202                observer.observe(target, config);
5203            }
5204        };
5205
5206        setSlider = function () {
5207            if (!$slider.hasClass(readyClass)) {
5208                if ($bxSlider) {
5209                    return;
5210                }
5211                if (K_S.CONFIG.SMALL_SCREEN_MQ.matches) {
5212                    $bxSlider = $slider.bxSlider(optionForSmallScreen);
5213                } else {
5214                    $bxSlider = $slider.bxSlider(optionForLargeScreen);
5215                }
5216                setPager($slider);
5217                if (!K_S.CONFIG.SMALL_SCREEN_MQ.matches) {
5218                    $slider.addClass(overlappingPreventClass1);
5219                }
5220            }
5221
5222            if (K_S.CONFIG.SMALL_SCREEN_MQ.matches) {
5223                if ($slider.find('>
5223li:not(".' + bxSliderCloneClass + '")').length > 1) {
5224                    $slider.removeClass(staticClass);
5225
5226                    if ($bxSlider) {
5227                        removeControls();
5228                        removeClones();
5229                        reloadSlider(optionForSmallScreen);
5230                        rebuildSliderForOnLoad(optionForSmallScreen);
5231                    } else {
5232                        if ($slider.hasClass(overlappingPreventClass1)) {
5233                            return;
5234                        }
5235                        removeControls();
5236                        removeClones();
5237                        rebuildSlider(optionForSmallScreen);
5238                    }
5239                } else {
5240                    $slider.addClass(readyClass);
5241                    $slider.addClass(staticClass);
5242                    if ($bxSlider) {
5243                        removeControls();
5244                        removeClones();
5245                        if ($slider.closest('.' + bxSliderWrapperClass).length) {
5246                            $slider.unwrap().unwrap();
5247                        }
5248                        removeStyles();
5249                    } else {
5250                        if ($slider.hasClass(overlappingPreventClass1)) {
5251                            return;
5252                        }
5253                        removeControls();
5254                        removeClones();
5255                        if ($slider.closest('.' + bxSliderWrapperClass).length) {
5256                            $slider.unwrap().unwrap();
5257                        }
5258                        removeStyles();
5259                    }
5260                }
5261            } else {
5262                if ($slider.find('>li:not(".' + bxSliderCloneClass + '")').length > 5) {
5263                    $slider.removeClass(staticClass);
5264                    if ($bxSlider) {
5265                        removeControls();
5266                        removeClones();
5267                        reloadSlider(optionForLargeScreen);
5268                        rebuildSliderForOnLoad(optionForLargeScreen);
5269                    } else {
5270                        if (!$slider.hasClass(overlappingPreventClass1)) {
5271                            return;
5272                        }
5273                        removeControls();
5274                        removeClones();
5275                        rebuildSlider(optionForLargeScreen);
5276                    }
5277                } else {
5278                    $slider.addClass(readyClass);
5279                    $slider.addClass(staticClass);
5280                    if ($bxSlider) {
5281                        removeControls();
5282                        removeClones();
5283                        if ($slider.closest('.' + bxSliderWrapperClass).length) {
5284                            $slider.unwrap().unwrap();
5285                        }
5286                        removeStyles();
5287                    } else {
5288                        if (!$slider.hasClass(overlappingPreventClass1)) {
5289                            return;
5290                        }
5291                        removeControls();
5292                        removeClones();
5293                        if ($slider.closest('.' + bxSliderWrapperClass).length) {
5294                            $slider.unwrap().unwrap();
5295                        }
5296                        removeStyles();
5297                    }
5298                }
5299            }
5300        };
5301
5302        runForEachScreen1 = function () {
5303            setSlider();
5304        };
5305
5306        runForEachScreen2 = function () {
5307            if (K_S.CONFIG.SMALL_SCREEN_MQ.matches) {
5308                $slider.addClass(overlappingPreventClass1);
5309                setTimeout(function () {
5310                    $slider.removeClass(overlappingPreventClass1);
5311                }, 100);
5312            } else {
5313                $slider.removeClass(overlappingPreventClass1);
5314                setTimeout(function () {
5315                    $slider.addClass(overlappingPreventClass1);
5316                }, 100);
5317            }
5318        };
5319
5320        $(function () {
5321            $slider = $(outputSelector);
5322
5323            runForEachScreen1();
5324            K_S.CONFIG.SMALL_SCREEN_MQ.addListener(runForEachScreen1);
5325            win.matchMedia('only screen and (max-width: 768px)').addListener(runForEachScreen2);
5326        });
5327    };
5328
5329    K_S.fn.setSearchModal = function () {
5330        var modalTrigger = doc.querySelectorAll('.JSSearchModalTrigger');
5331        var body = doc.body;
5332        var modalWrapper;
5333        var closeButton;
5334        var closeButtonInner;
5335        var runClickOpen;
5336        var runKeydownOpen;
5337        var openModal;
5338        var runKeydownClose;
5339        var runForEachScreen;
5340        var setModal;
5341        var runClickClose;
5342
5343        if (!modalTrigger.length) {
5344            return;
5345        }
5346
5347        closeButton = doc.createElement('button');
5348        closeButton.id = 'SearchModalCloseButton';
5349        closeButtonInner = doc.createElement('span');
5350        closeButtonInner.textContent = GLOBAL.TRANSLATION.Close;
5351        modalWrapper = doc.createElement('div');
5352        modalWrapper.id = 'SearchModal';
5353        modalWrapper.setAttribute('role', 'dialog');
5354
5355        if (!doc.getElementById('JSSearchModal')) {
5356            modalWrapper.dataset.oldModal = 'true';
5357        }
5358
5359        body.appendChild(modalWrapper);
5360        modalWrapper.appendChild(closeButton);
5361        closeButton.appendChild(closeButtonInner);
5362
5363        openModal = function (trigger) {
5364            var target;
5365            var targetID;
5366            var signpost;
5367
5368            if (body.getAttribute('data-search-modal')) {
5369                return;
5370            }
5371
5372            signpost = doc.createElement('div');
5373            signpost.id = 'ModalSignpost';
5374            targetID = trigger.getAttribute('data-modal-target');
5375            target = doc.getElementById(targetID);
5376
5377            if (targetID && target) {
5378                body.setAttribute('data-search-modal', true);
5379                target.parentNode.insertBefore(signpost, target);
5380                modalWrapper.appendChild(target);
5381                modalWrapper.classList.add('IsOpen');
5382                trigger.tabIndex = -1;
5383                setTimeout(function () {
5384                    closeButton.focus();
5385                }, 200);
5386            }
5387        };
5388
5389        runClickOpen = function (e) {
5390            e.preventDefault();
5391
5392            openModal(this);
5393        };
5394
5395        runKeydownOpen = function (e) {
5396            if (e.key === 'Spacebar' || e.key === ' ' || e.key === 'Enter') {
5397                e.preventDefault();
5398
5399                openModal(this);
5400            }
5401        };
5402
5403        runClickClose = function (e) {
5404            e.preventDefault();
5405
5406            K_S.fn.closeSearchModal();
5407        };
5408
5409        runKeydownClose = function (e) {
5410            if (e.key === 'Esc' || e.key === 'Escape') {
5411                e.preventDefault();
5412                K_S.fn.closeSearchModal();
5413            }
5414        };
5415
5416        setModal = function () {
5417            modalTrigger.forEach(function (items) {
5418                items.tabIndex = 0;
5419                items.addEventListener('click', runClickOpen, false);
5420                items.addEventListener('keydown', runKeydownOpen, false);
5421            });
5422            body.addEventListener('keydown', runKeydownClose, false);
5423            closeButton.addEventListener('click', runClickClose, false);
5424        };
5425
5426        runForEachScreen = function () {
5427            if (K_S.CONFIG.LARGE_SCREEN_MQ.matches) {
5428                setModal();
5429            } else {
5430                K_S.fn.closeSearchModal();
5431                modalTrigger.forEach(function (items) {
5432                    items.removeAttribute('tabindex');
5433                    items.removeEventListener('click', runClickOpen, false);
5434                    items.removeEventListener('keydown', runKeydownOpen, false);
5435                });
5436            }
5437        };
5438
5439        runForEachScreen();
5440        K_S.CONFIG.LARGE_SCREEN_MQ.addListener(runForEachScreen);
5441    };
5442
5443    K_S.fn.closeSearchModal = function () {
5444        var signpost = doc.getElementById('ModalSignpost');
5445        var modalWrapper = doc.getElementById('SearchModal');
5446        var body = doc.body;
5447        var focusTarget;
5448
5449        if (!modalWrapper || !signpost || !body.getAttribute('data-search-modal')) {
5450            return;
5451        }
5452
5453        modalWrapper.classList.remove(K_S.CONFIG.OPEN_ATTR);
5454        body.removeAttribute('data-search-modal');
5455        if (modalWrapper.childNodes[1]) {
5456            focusTarget = doc.querySelector('[data-modal-target="' + modalWrapper.childNodes[1].id + '"]');
5457
5458            if (focusTarget) {
5459                focusTarget.tabIndex = 0;
5460            }
5461
5462            signpost.parentNode.insertBefore(modalWrapper.childNodes[1], doc.getElementById('ModalSignpost'));
5463        }
5464        signpost.remove();
5465        if (K_S.getElem.selectTypes) {
5466            K_S.getElem.selectTypes.classList.remove(K_S.CONFIG.OPEN_ATTR);
5467        }
5468        if (K_S.getElem.selectTypesBox) {
5469            K_S.getElem.selectTypesBox.removeAttribute('style');
5470        }
5471        setTimeout(function () {
5472            if (focusTarget) {
5473                focusTarget.focus();
5474            }
5475        }, 200);
5476    };
5477
5478    K_S.polyfill = {
5479        setChildNodeRemove: function () {
5480            var arr = [Element.prototype, CharacterData.prototype, DocumentType.prototype];
5481
5482            arr.forEach(function (item) {
5483                item.remove = item.remove || function () {
5484                    this.parentNode.removeChild(this);
5485                };
5486            });
5487        },
5488        setNodeListForEach: function () {
5489            if (win.NodeList && !NodeList.prototype.forEach) {
5490                NodeList.prototype.forEach = Array.prototype.forEach;
5491            }
5492        },
5493        setElemClosest: function () {
5494            if (!Element.prototype.matches) {
5495                Element.prototype.matches =
5496                    Element.prototype.msMatchesSelector ||
5497                    Element.prototype.webkitMatchesSelector;
5498            }
5499
5500            if (!Element.prototype.closest) {
5501                Element.prototype.closest = function (s) {
5502                    var el = this;
5503
5504                    if (!doc.documentElement.contains(el)) {
5505                        return null;
5506                    }
5507                    do {
5508                        if (el.matches(s)) {
5509                            return el;
5510                        }
5511                        el = el.parentElement || el.parentNode;
5512                    } while (el !== null && el.nodeType === 1);
5513
5514                    return null;
5515                };
5516            }
5517        },
5518        setObjectAssign: function () {
5519            var to;
5520            var nextSource;
5521            var index;
5522            var nextKey;
5523
5524            if (typeof Object.assign !== 'function') {
5525                Object.defineProperty(Object, 'assign', {
5526                    assign: function assign(target) {
5527                        if (target === null || target === undefined) {
5528                            throw new TypeError('Cannot convert undefined or null to object');
5529                        }
5530
5531                        to = Object(target);
5532
5533                        for (index = 1; index < arguments.length; index++) {
5534                            nextSource = arguments[index];
5535
5536                            if (nextSource !== null && nextSource !== undefined) {
5537                                for (nextKey in nextSource) {
5538                                    if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
5539                                        to[nextKey] = nextSource[nextKey];
5540                                    }
5541                                }
5542                            }
5543                        }
5544
5545                        return to;
5546                    },
5547                    writable: true,
5548                    configurable: true,
5549                });
5550            }
5551        },
5552    };
5553}(window, window.document, (function (win, doc) {
5554    'use strict';
5555
5556    var SetUtility = function () {
5557    };
5558
5559    SetUtility.prototype = {
5560        checkSupportsTemp: function () {
5561            return 'content' in doc.createElement('template');
5562        },
5563        createNodeClone: function (template, selectorForIE) {
5564            if (this.checkSupportsTemp() === true) {
5565                return doc.importNode(template.content, true);
5566            }
5567
5568            return doc.importNode(template.querySelector(selectorForIE), true);
5569        },
5570        convertByteToMB: function (byte) {
5571            return (Math.round(Number(byte) / (1024 * 1024) * 10) / 10) + 'MB';
5572        },
5573        convertByteToKB: function (byte) {
5574            return (Math.round(Number(byte) / 1024 * 10) / 10) + 'KB';
5575        },
5576        getJSON: function (loadPath, method, sendData) {
5577            return new Promise(function (resolve, reject) {
5578                var xhr = new XMLHttpRequest();
5579
5580                if (win.kpi_search_api?.version === 2) {
5581                    xhr.withCredentials = true;
5582                }
5583
5584                if (method && method === 'POST') {
5585                    xhr.open('POST', loadPath);
5586                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
5587                } else {
5588                    xhr.open('GET', loadPath);
5589                }
5590
5591                xhr.onload = function () {
5592                    if (xhr.status === 200) {
5593                        resolve(JSON.parse(xhr.response));
5594                    } else {
5595                        reject(new Error(xhr.statusText));
5596                    }
5597                };
5598                xhr.onerror = function () {
5599                    reject(new Error('Network Error'));
5600                };
5601
5602                if (method && method === 'POST' && sendData) {
5603                    xhr.send(sendData);
5604                } else {
5605                    xhr.send(null);
5606                }
5607            });
5608        },
5609        setCookie: function (name, value) {
5610            var date = new Date();
5611            var path;
5612
5613            if (win.suz_LanguagePath) {
5614                path = win.suz_LanguagePath + '/';
5615            } else {
5616                path = '/';
5617            }
5618
5619            date.setDate(date.getDate() + 90);
5620            doc.cookie = name + '=' + value + '; expires=' + date.toUTCString() + '; path=' + path;
5621        },
5622        getCookie: function (name) {
5623            var cookies = doc.cookie.split('; ');
5624            var i;
5625            var l;
5626            var arr = [];
5627
5628            for (i = 0, l = cookies.length; i < l; i++) {
5629                if (cookies[i].indexOf(name + '=') === 0) {
5630                    arr.push(cookies[i].substring(name.length + 1));
5631                }
5632            }
5633
5634            return arr[0];
5635        },
5636        addAssetTypeToString: function (string) {
5637            var dict = this.makeQueryIntoDict();
5638            var suffix = '';
5639
5640            if (typeof string !== 'string' || dict.mode === undefined) {
5641                return false;
5642            }
5643
5644            if (dict.mode === '') {
5645                suffix = '_ca';
5646            } else {
5647                suffix = '_' + dict.mode;
5648            }
5649
5650            return string + suffix;
5651        },
5652        removeOverlapArr: function (array) {
5653            return array.filter(function (x, i, self) {
5654                return self.indexOf(x) === i;
5655            });
5656        },
5657        removeEmptyArr: function (array) {
5658            return array.filter(function (x) {
5659                return !(x === null || x === undefined || x === '');
5660            });
5661        },
5662        makeQueryIntoDict: function () {
5663            var query;
5664            var i;
5665            var l;
5666            var arr = [];
5667            var dict = {};
5668
5669            query = location.search.substring(1).split('&');
5670            query = this.removeEmptyArr(query);
5671
5672            if (query.length) {
5673                for (i = 0, l = query.length; i < l; i++) {
5674                    arr = query[i].split('=');
5675                    if (arr[1]) {
5676                        dict[arr[0]] = arr[1];
5677                    } else {
5678                        dict[arr[0]] = '';
5679                    }
5680                }
5681            }
5682
5683            return dict;
5684        },
5685        updateBrowserHistory: function (dict) {
5686            var objKeyArr = Object.keys(dict);
5687            var l = objKeyArr.length;
5688            var newParam = '';
5689            var i;
5690
5691            for (i = 0; i < l; i++) {
5692                newParam += objKeyArr[i] + '=' + dict[objKeyArr[i]] + '&';
5693            }
5694            newParam = '?' + newParam.slice(0, -1);
5695            win.history.pushState(null, null, newParam + win.location.hash);
5696        },
5697        fromHtmlEntities: function (string) {
5698            var replace = function (targetString) {
5699                return String.fromCharCode(targetString.match(/\d+/gm)[0]);
5700            };
5701
5702            var outputString = String(string).replace(/&#\d+;/gm, replace);
5703
5704            return outputString.replace(/&nbsp;/gm, ' ');
5705        },
5706        getOmittedText: function (text, elem) {
5707            const baseDefaultMax = 170;
5708            const settings = {
5709                min: 10,
5710                ellipsis: '...',
5711            };
5712            const siteLang = win.kpi_languageSettings?.siteLang?.[0] ?? '';
5713            const isDoubleByteLang = /^zh-|^ko-/.test(siteLang);
5714            const defaultMax = isDoubleByteLang ? Math.floor(baseDefaultMax / 2) : baseDefaultMax;
5715            const str = (text === null || text === undefined) ? '' : String(text);
5716
5717            if (!elem || !elem.dataset || elem.dataset.omit !== 'true') {
5718                return str;
5719            }
5720
5721            const rawMax = elem.dataset.omitMax;
5722            const maxNum = (rawMax === undefined || rawMax === '') ? NaN : Number(rawMax);
5723            let max = Number.isFinite(maxNum) ? maxNum : defaultMax;
5724
5725            if (isDoubleByteLang) {
5726                max = Math.floor(max / 2);
5727            }
5728
5729            max = Math.floor(Math.max(settings.min, max));
5730
5731            if (str.length <= max) {
5732                return str;
5733            }
5734
5735            return `${str.substring(0, max)}${settings.ellipsis}`;
5736        },
5737    };
5738
5739    return new SetUtility();
5740}(window, window.document))));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.