PageSourceSearch

https://admin.ocnk.net/admin/res/new/js/common.js?1740458476

js ocnk.net collected 2026-10-02 09:48:52 UTC 56,542 bytes, 1,366 lines download raw bytes

1function MM_preloadImages() {
2  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
3    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
4    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
5}
6
7
8function MM_swapImgRestore() {
9  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
10}
11
12
13function MM_findObj(n, d) {
14  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
15    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
16  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
17  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
18  if(!x && d.getElementById) x=d.getElementById(n); return x;
19}
20
21
22function MM_swapImage() {
23  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
24   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
25}
26
27function MM_reloadPage(init) {
28  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
29    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
30  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
31}
32MM_reloadPage(true);
33
34function LinkSelect(form, sel)
35{
36        adrs = sel.options[sel.selectedIndex].value;
37        if (adrs != "-" ) parent.location.href=adrs;
38}
39
40function MakeWin(a, target_name, x_size, y_size) {
41var attb = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=' + x_size + ',height=' + y_size;
42var str_js = (a.href.indexOf('.html') != -1) ? '' : '';
43var subWin = window.open(a.href + str_js, target_name, attb);
44var check = ((navigator.appName.charAt(0) == "M") && (navigator.appVersion.charAt(0) <= 3));
45if (!check) {subWin.focus();}
46}
47
48function MakeWin2(a, target_name, x_size, y_size) {
49var attb = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=' + x_size + ',height=' + y_size;
50var str_js = (a.href.indexOf('.html') != -1) ? '' : '';
51var subWin = window.open(a.href + str_js, target_name, attb);
52var check = ((navigator.appName.charAt(0) == "M") && (navigator.appVersion.charAt(0) <= 3));
53if (!check) {subWin.focus();}
54}
55
56function closewin(url) {
57 w = window.close(url, 'win','width=450,height=350,status=no,scrollbars=yes,directories=no,menubar=no,resizable=yes,toolbar=no');
58}
59
60function win_open(url, name, width, height){
61    name = name.replace('-', '_');// for IE9
62    var subWin = window.open(url, name, 'width=' + width + ',height=' + height + ',location=yes,resizable=yes,scrollbars=yes');
63
64    var check = ((navigator.appName.charAt(0) == "M") && (navigator.appVersion.charAt(0) <= 3));
65
66    if (!check) {subWin.focus();}
67}
68
69function OpenMessage(page){
70    if(document.all){
71        menu = document.all('message');
72        flag = menu.style.display;
73        if(flag == "block"){
74            menu.style.display = "none";
75            document.cookie="OpenMessage["+page+"]=0; expires=Thu, 1-Jan-2099 0:0:0; path=/;";
76            document.all['change_show'].style.display = "block";
77        }
78        else{
79            menu.style.display = "block";
80            document.cookie="OpenMessage["+page+"]=1; expires=Thu, 1-Jan-2099 0:0:0; path=/;";
81            document.all['change_show'].style.display = "none";
82        }
83
84    }
85    else if(document.getElementById){
86        menu = document.getElementById('message');
87        flag = menu.style.display;
88        if(flag == "block"){
89            menu.style.display = "none";
90            document.cookie="OpenMessage["+page+"]=0; expires=Thu, 1-Jan-2099 0:0:0; path=/;";
91            document.getElementById('change_show').style.display = "block";
92        }
93        else{
94            menu.style.display = "block";
95            document.cookie="OpenMessage["+page+"]=1; expires=Thu, 1-Jan-2099 0:0:0; path=/;";
96            document.getElementById('change_show').style.display = "none";
97        }
98    }
99}
100
101function openShop(path, subscription = false)
102{
103    var auth = 'auth=t';
104    if (subscription) {
105        auth = 'authSubscription=t';
106    }
107    window.open(homeURL+'?go=move-shop&'+auth+'&path='+path);
108    return false;
109}
110
111var globalObj = {
112  htmlEditorWindowWidth: 780,
113  htmlEditorWindowHeight: 866,
114};
115if (window.jQuery) {
116    jQuery(function () {
117        jQuery('#to_page_top').on('click', function (e) {
118            jQuery('html,body').animate({scrollTop: 0}, {duration: 800});
119            return false;
120        });
121        if (jQuery.fn.ahPlaceholder) {
122            jQuery('.jq-placeholder').ahPlaceholder({
123                placeholderColor: 'rgb(153, 153, 153)',
124                placeholderAttr : 'placeholder',
125                likeApple : false
126            });
127        }
128        if (document.documentMode && document.documentMode === 5) {
129            // IE5 Quirks (* without W3C url in DTD string)
130            jQuery('.main_area_page_title .page_title_circle').hide();
131        }
132        if (jQuery.fn.optimizeImagePixelRatio) {
133            jQuery('img[data-x2], input[type="image"][data-x2]').optimizeImagePixelRatio({'forceHD': (globalObj.getCookie('forceHD') === '1')});
134        }
135        globalObj.setModalImageEditor();
136        globalObj.setImageModalDisplay('.popup_img');
137        globalObj.setOpenImageManager('.open_image_manager');
138        globalObj.setDropdownMenu();
139        globalObj.setPhoneTooltipDesc();
140        globalObj.setupSmoothAnchorLink();
141    });
142    globalObj.setImageModalDisplay = function (selector) {
143        if (typeof jQuery.fn.on == 'function') {
144            jQuery('body').on('click', selector, function () {
145                var $linkElem = jQuery(this);
146                var url = $linkElem.attr('href');
147                if (url.match(/\.(jpe?g|gif|png|ico)$/i)) {
148                    url += "?" + new Date().getTime();
149                }
150                // group setting
151                const imageGroup = $linkElem.data('group');
152                const groupSelector = imageGroup ? `[data-image-group="${imageGroup}"]` : null;
153                const urlAttr = $linkElem.data('url-attr');
154                const groupUrlAttr = urlAttr ? urlAttr : 'href';
155                const groupCaptionWrapSelector = $linkElem.data('caption-wrapper') ?? '';
156                const groupCaptionElemSelector = $linkElem.data('caption-selector') ?? '';
157                const groupCaptionAttr = $linkElem.data('caption-attr') ?? '';
158                const isEn = jQuery('#admin_wrapper_table').hasClass('admin_english');
159                // open dialog
160                (new DialogImage({
161                    dialogId: 'dialog_image',
162                    prevButtonInnerHTML: `<i class="fa fa-chevron-left" aria-hidden="true"></i>`,
163                    prevButtonTitle: isEn ? 'Previous' : '前へ',
164                    nextButtonInnerHTML: `<i class="fa fa-chevron-right" aria-hidden="true"></i>`,
165                    nextButtonTitle: isEn ? 'Next' : '次へ',
166                    zoomInButtonInnerHTML: '<i class="fa fa-search-plus" aria-hidden="true" style="font-size: 17px;"></i>',
167                    zoomInButtonTitle: isEn ? 'Zoom in' : '拡大する',
168                    zoomOutButtonInnerHTML: '<i class="fa fa-search-minus" aria-hidden="true" style="font-size: 17px;"></i>',
169                    zoomOutButtonTitle: isEn ? 'Zoom out' : '縮小する',
170                    closeButtonInnerHTML: '<i class="fa fa-times" aria-hidden="true" style="font-size: 16px;"></i>',
171                    imageSizeVisible: true,
172                    closeButtonTitle: isEn ? 'Close' : '閉じる',
173                    groupSelector,
174                    groupUrlAttr,
175                    groupCaptionWrapSelector,
176                    groupCaptionElemSelector,
177                    groupCaptionAttr,
178                })).open({
179                    url,
180                    caption: $linkElem.attr('title'),
181                });
182                return false;
183            });
184        }
185    };
186    globalObj.setCookie = function(cookie_name, cookie_value, effective_days, cookie_path) {
187        var exp_str = '';
188        var cookie_str;
189        if (effective_days) {
190            var exp = new Date();
191            exp.setTime(exp.getTime()+1000*60*60*24*effective_days);
192            exp_str = '; expires=' + exp.toUTCString();
193        }
194        cookie_str = encodeURIComponent(cookie_value);
195        document.cookie = cookie_name + '=' + cookie_str + exp_str + '; path=' + cookie_path;
196    };
197    globalObj.getAllCookies = function () {
198        var cookies = {};
199        var all = document.cookie;
200        if (all !== '') {
201            var lists = all.split('; ');
202            var cnt = lists.length;
203            for (var i = 0; i < cnt; i++) {
204                var cookie = lists[i];
205                var p = cookie.indexOf('=');
206                var name = cookie.substring(0,p);
207                var value = cookie.substring(p+1);
208                value = decodeURIComponent(value);
209                cookies[name] = value;
210            }
211        }
212        return cookies;
213    };
214    globalObj.getCookie = function(cookie_name) {
215        var allCookies = globalObj.getAllCookies();
216        if (!allCookies[cookie_name] && allCookies[cookie_name] === undefined) {
217            return null
218        } else {
219            return allCookies[cookie_name];
220        }
221    };
222    globalObj.autoFitTextareaHeight = function(elem, key, fit) {
223        var padding = 5;
224        // backspace or delete or onblur
225        if (key === 'Backspace' || key === 'Delete' || fit) {
226            elem.style.height = 'auto';
227        }
228        if(elem.scrollHeight > elem.offsetHeight){
229            elem.style.height = (elem.scrollHeight + padding) + 'px';
230        }
231    };
232    globalObj.setAutoFitTextareaHeight = function (class_name) {
233        var selector = 'textarea';
234        if (class_name) {
235            selector += '.' + class_name;
236        }
237        jQuery(selector).each(function(index, elem) {
238            globalObj.autoFitTextareaHeight (elem);
239            jQuery(elem).on('keyup', function(event) {
240                globalObj.autoFitTextareaHeight (event.target, event.key, false);
241            });
242            jQuery(elem).on('blur', function(event) {
243                globalObj.autoFitTextareaHeight (event.target, null, false);
244            });
245        });
246    };
247    globalObj.moveAnchor = function (selector, space, animation) {
248        var elem, targetOffset;
249        elem = jQuery(selector)[0];
250        if (!elem) {
251            return false;
252        }
253        targetOffset = jQuery(elem).offset().top - space;
254        if (animation) {
255            jQuery('html,body').animate({scrollTop: (targetOffset)}, 'fast');
256        } else {
257            setTimeout(function() {
258                window.scrollTo(0, targetOffset);
259            }, 10);
260        }
261        return true;
262    };
263    globalObj.checkDateSelect = function (yElem, mElem, dElem, emptyLabel, useZeroPad) {
264        var y,
265            m,
266            d,
267            selectedDateIndex,
268            dateObj,
269            nextYear,
270            nextMonth,
271            lastDateObj,
272            lastDay,
273            optionCnt;
274        y = parseInt(yElem.value, 10);
275        m = parseInt(mElem.value, 10);
276        d = parseInt(dElem.value, 10);
277        selectedDateIndex = dElem.selectedIndex;
278        dateObj = new Date(y, (m - 1), d);
279        if (m === 12) {
280            nextYear = y + 1;
281            nextMonth = 1;
282        } else {
283            nextYear = y;d
284            nextMonth = m + 1;
285        }
286        lastDateObj = new Date(nextYear, (nextMonth - 1), 0);
287        lastDay = lastDateObj.getDate();
288        optionCnt = isNaN(lastDay) ? 31 : lastDay;
289        dElem.options.length = 0;
290        if (typeof emptyLabel === 'undefined') {
291            emptyLabel = '--';
292        }
293        dElem.options[0] = new Option(emptyLabel, '');
294        for (var i = 1; i <= optionCnt; i++) {
295            var dayVal = i;
296            if (useZeroPad && i < 10) {
297                dayVal = '0' + i;
298            }
299            dElem.options[i] = new Option(i, dayVal);
300        }
301        dElem.selectedIndex = (optionCnt < 31 && lastDay < d) ? 0 : selectedDateIndex;
302    };
303    globalObj.addSelectDateCheck = function (param) {
304        var defaults = {
305                selectors  : null, // [{y:'',m:'',d:''}, ...]
306                emptyLabel : '--',
307                useZeroPad : false
308            },
309            config;
310        config = jQuery.extend(defaults, param);
311        if (config.selectors === null || (!config.selectors.length || config.selectors.length === 0)) {
312            return false; // no selecter
313        }
314        var _setDateCheck = function (ySelector, mSelector, dSelector) {
315            globalObj.checkDateSelect(
316                jQuery(ySelector)[0],
317                jQuery(mSelector)[0],
318                jQuery(dSelector)[0],
319                config.emptyLabel,
320                config.useZeroPad
321            );
322            jQuery(ySelector + ',' + mSelector).on('change', function (e) {
323                globalObj.checkDateSelect(
324                    jQuery(ySelector)[0],
325                    jQuery(mSelector)[0],
326                    jQuery(dSelector)[0],
327                    config.emptyLabel,
328                    config.useZeroPad
329                );
330            });
331        };
332        jQuery(config.selectors).each(function (index, obj) {
333            var ySelector, mSelector, dSelector;
334            ySelector = obj.y;
335            mSelector = obj.m;
336            dSelector = obj.d;
337            if (jQuery(ySelector)[0] && jQuery(mSelector)[0] && jQuery(dSelector)[0]) {
338                _setDateCheck(ySelector, mSelector, dSelector);
339            }
340        });
341        return true;
342    };
343    globalObj.disableEnterSubmit = function (parentSelector, targetSelector = 'input[type!=image]' + 'input[type!=submit]' + 'input[type!=button]') {
344        jQuery(parentSelector).on('keydown', targetSelector, function (e) {
345            if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
346                return false;
347            }
348        });
349    };
350
351    globalObj.setDisableOnSubmit = function (formSelector, timeoutSpeed) {
352        var formObj = jQuery(formSelector)[0];
353        if (!formObj) {
354            return false;
355        }
356        var formButtons = jQuery(':submit, :image');
357        var diableForm = function () {
358            return false;
359        };
360        var timerID;
361        var resetAttr = function (elem) {
362            jQuery(elem).css({'cursor': '', 'opacity': '', 'filter': ''});
363            jQuery(elem).off('click', diableForm);
364            clearTimeout(timerID);
365        };
366        var escPress = function (e) {
367            if (e.keyCode === 27) { // ESC key
368                resetAttr(formButtons);
369                jQuery(document).off('keyup', escPress);
370            }
371            return true;
372        };
373        var timeoutSec;
374        if (timeoutSpeed === 'fast') {
375            timeoutSec = 5;
376        } else if (timeoutSpeed === 'slow') {
377            timeoutSec = 15;
378        } else {
379            if (String(timeoutSpeed).match(/^[0-9]+$/)) {
380                timeoutSec = timeoutSpeed;
381            } else {
382                timeoutSec = 10;
383            }
384        }
385        var timeout = timeoutSec * 1000;
386        jQuery(formObj).on('submit', function (event) {
387            formButtons.css({'cursor': 'progress', 'opacity': '0.7', 'filter': 'alpha(opacity=70)'});
388            jQuery(formButtons).on('click', diableForm);
389            timerID = setTimeout(function(){
390                resetAttr(formButtons);
391            }, timeout);
392            // BFCacheに保存される場合も含めて必ず戻す。
393            // 保存前に見た目とクリック抑止を解除しておかないと、
394            // ブラウザバックで復元したときに送信ボタンが押せないままになる。
395            jQuery(window).on('pagehide', function () {
396                resetAttr(formButtons);
397            });
398            if (timeoutSec < 15) {
399                jQuery(document).on('keyup', escPress);
400            }
401        });
402    }
403
404    globalObj.resizeImageSquare = function (imgElem, wrapSelector, size) {
405        var $imgElem = jQuery(imgElem);
406        var imgPath;
407        var tmpImg;
408        var resizeAfterLoading = function ($imgElem, wrapSelector, size) {
409            var $wrapElem = $imgElem.closest(wrapSelector);
410            var computedWidth = $imgElem.width();
411            var computedHeight = $imgElem.height();
412            $wrapElem.css({
413                width: size + 'px',
414                height: size + 'px',
415                padding: '0',
416                margin: '0',
417                display: 'table-cell',
418                lineHeight: size + 'px',
419                verticalAlign: 'middle',
420                textAlign: 'center'
421            });
422            if (computedWidth < computedHeight) {
423                $imgElem.css({width: 'auto', height: size + 'px'});
424            } else if (computedHeight < computedWidth) {
425                $imgElem.css({width: size + 'px', height: 'auto'});
426            }
427        };
428        imgPath = $imgElem.attr('src');
429        tmpImg = new Image();
430        tmpImg.onload = function (e) {
431            resizeAfterLoading($imgElem, wrapSelector, size);
432        };
433        tmpImg.src = imgPath;
434    };
435    globalObj.setWideWidthSelection = function () {
436        var self = this;
437        self.wideClassName = 'wide_ver';
438        self.cookieKey = 'reduceAdminPageWidth';
439        self.fullWidthTitle = '';
440        self.reduceTitle = '';
441        self.duration = 0;
442        self.setTitleString = function () {
443            if (jQuery('#admin_wrapper_table').hasClass('admin_japanese')) {
444                self.fullWidthTitle = "100%幅表示";
445                self.reduceTitle = "表示幅を狭める";
446            } else {
447                self.fullWidthTitle = "Use full-width page";
448                self.reduceTitle = "Reduce page width";
449            }
450        };
451        self.setDuration = function () {
452            if (window.addEventListener === undefined || 'ontouchend' in window || document.selection) {
453                // touch device, ie10 or lower
454                self.duration = 0;
455            } else {
456                self.duration = 'normal';
457            }
458        };
459        self.isWideVerDefault = function () {
460            return !globalObj.getCookie(self.cookieKey);
461        };
462        self.setCookieFlag = function (value) {
463            globalObj.setCookie(self.cookieKey, value, 365, '/admin/');
464        };
465        self.setBodyClassName = function (useWideClassName) {
466            if (useWideClassName) {
467                jQuery('body').addClass('liquid_width').removeClass('wide_fixed_width');
468            } else {
469                jQuery('body').addClass('wide_fixed_width').removeClass('liquid_width');
470            }
471        };
472        self.animateWidth = function (useWideClassName) {
473            var $buttonElem = jQuery('.btn_windowsize');
474            $buttonElem.hide();
475            if (useWideClassName) {
476                jQuery('.main_admin_content').animate({width: '90%'}, self.duration, function () {
477                    self.setBodyClassName(useWideClassName);
478                    jQuery('.main_admin_content').css({width: ''});
479                    $buttonElem.show();
480                });
481            } else {
482                jQuery('.main_admin_content').animate({width: '1300px'}, self.duration, function () {
483                    self.setBodyClassName(useWideClassName);
484                    jQuery('.main_admin_content').css({width: ''});
485                    $buttonElem.show();
486                });
487            }
488        };
489        self.changeAdminWith = function (useWideClassName) {
490            if (self.duration) {
491                self.animateWidth(useWideClassName);
492            } else {
493                self.setBodyClassName(useWideClassName);
494            }
495        };
496        self.switchAdminWidth = function ($targetElem) {
497            var cookieValue;
498            if ($targetElem.hasClass(self.wideClassName)) {
499                // change reduce width
500                self.changeAdminWith(true);
501                $targetElem.removeClass(self.wideClassName);
502                $targetElem.attr({title: self.reduceTitle});
503                cookieValue = '';
504            } else {
505                // change full width
506                self.changeAdminWith(false);
507                $targetElem.addClass(self.wideClassName);
508                $targetElem.attr({title: self.fullWidthTitle});
509                cookieValue = '1';
510            }
511            self.setCookieFlag(cookieValue);
512        };
513        self.setSwitchEvent = function ($elem) {
514            $elem.on("click", function (e) {
515                self.switchAdminWidth(jQuery(e.currentTarget));
516            });
517        };
518        self.createSwitchButton = function (isWide, defaultTitle) {
519            var $buttonElem = jQuery('<span>').addClass('btn_windowsize');
520            var $wrapElem = jQuery('<div>').addClass('windowsize');
521            if (!isWide) {
522                $buttonElem.addClass(self.wideClassName);
523            }
524            $buttonElem.attr({title: defaultTitle});
525            self.setSwitchEvent($buttonElem);
526            $wrapElem.append($buttonElem);
527            return $wrapElem;
528        };
529        self.setSwitchButton = function () {
530            var $mainElem = jQuery('#admin_main');
531            var isWide;
532            var defaultTitle;
533            var $buttonWrapElem;
534            if ($mainElem.length === 0) {
535                return false;
536            }
537            self.setTitleString();
538            self.setDuration();
539            isWide = self.isWideVerDefault();
540            if (self.isWideVerDefault()) {
541                defaultTitle = self.reduceTitle;
542            } else {
543                defaultTitle = self.fullWidthTitle;
544            }
545            self.setBodyClassName(isWide);
546            $buttonWrapElem = self.createSwitchButton(isWide, defaultTitle);
547            $mainElem.prepend($buttonWrapElem);
548            return true;
549        };
550        self.setSwitchButton();
551    };
552    globalObj.setSideMenuToggle = function () {
553        var hiddenCookieKey = 'hiddenAdminLeftMenu';
554        var $closeElem = jQuery('#close_left_admin_menu');
555        var $openElem = jQuery('#open_left_admin_menu');
556        var $menuElem = jQuery('#admin_left_menu_list');
557        var openedMenuClassName = 'admin_left_menu_opened';
558        var closedMenuClassName = 'admin_left_menu_closed';
559        if ($closeElem.length === 0 || $openElem.length === 0 || $menuElem.length === 0) {
560            return false;
561        }
562        $closeElem.css({display: 'block'}).on("click", function (e) {
563            var duration = (window.addEventListener === undefined || 'ontouchend' in window) ? 0 : 'normal';
564            var $tdElem = jQuery(e.target).parents('.main_table_color');
565            $tdElem.attr({width: 10});
566            jQuery('#admin_left_menu_list').hide(duration, function () {
567                jQuery('#admin_left_open_btn').show();
568            });
569            jQuery('html').removeClass(openedMenuClassName).addClass(closedMenuClassName);
570            globalObj.setCookie(hiddenCookieKey, '1', 365, '/admin/');
571        });
572        $openElem.css({display: 'block'}).on("click", function (e) {
573            var duration = (window.addEventListener === undefined || 'ontouchend' in window) ? 0 : 'normal';
574            var $tdElem = jQuery(e.target).parents('.main_table_color');
575            $tdElem.attr({width: 190});
576            jQuery('#admin_left_open_btn').hide();
577            jQuery('#admin_left_menu_list').slideDown(duration);
578            jQuery('html').removeClass(closedMenuClassName).addClass(openedMenuClassName);
579            if (window.addEventListener === undefined) {
580                // for legacy ie
581                setTimeout(function () {
582                    jQuery('#admin_left_menu_list').hide().show();
583                }, 200);
584            }
585            globalObj.setCookie(hiddenCookieKey, '', 365, '/admin/');
586        });
587        if (globalObj.getCookie(hiddenCookieKey)) {
588            jQuery('html').removeClass(openedMenuClassName).addClass(closedMenuClassName);
589        } else {
590            jQuery('html').removeClass(closedMenuClassName).addClass(openedMenuClassName);
591        }
592        return true;
593    };
594    globalObj.setHoverBoxClassName = function (hoverName, boxSelector, $checkedElem, $wrapElem) {
595        $wrapElem.find(boxSelector).removeClass(hoverName);
596        $checkedElem.closest(boxSelector).addClass(hoverName);
597    };
598    globalObj.setHoverBoxClickEvent = function (config) {
599        var defaults = {
600            hoverName: 'hover_box',
601            boxSelector: 'image_box',
602            radioName: '',
603            clickSelector: 'img',
604            wrapSelector: '',
605            finished: false
606        };
607        var options = jQuery.extend({}, defaults, config);
608        var $wrapElements = jQuery(options.wrapSelector);
609        if ($wrapElements.length === 0 || !options.radioName) {
610            return false;
611        }
612        $wrapElements.each(function (index, elem) {
613            var $wrapElem = jQuery(elem);
614            if (options.finished) {
615                globalObj.setHoverBoxClassName(options.hoverName, options.boxSelector, $wrapElem.find('input[name="' + options.radioName + '"]'), $wrapElem);
616            } else {
617                globalObj.setHoverBoxClassName(options.hoverName, options.boxSelector, $wrapElem.find('input[name="' + options.radioName + '"]:checked'), $wrapElem);
618            }
619            $wrapElem.find(options.boxSelector + ' ' + options.clickSelector + ', ' + 'input[name="' + options.radioName + '"]').on("click", function (e) {
620                jQuery(e.currentTarget).closest(options.boxSelector).find('input[name="' + options.radioName + '"]').attr({checked: true}).focus();
621                globalObj.setHoverBoxClassName(options.hoverName, options.boxSelector, $wrapElem.find('input[name="' + options.radioName + '"]:checked'), $wrapElem);
622            });
623        });
624        return true;
625    };
626    globalObj.setToggleDisplay = function ($wrapElem, action, cookieKey) {
627        var $closeBtnElem = jQuery('.data_close');
628        var $openBtnElem = jQuery('.data_open');
629        var cookieValue;
630        if (action === 'close') {
631            $wrapElem.removeClass('extension_view').addClass('minimum_view');
632            $closeBtnElem.hide();
633            $openBtnElem.show();
634            cookieValue = '';
635        } else if (action === 'open') {
636            $wrapElem.removeClass('minimum_view').addClass('extension_view');
637            $closeBtnElem.show();
638            $openBtnElem.hide();
639            cookieValue = '1';
640        }
641        if (cookieKey) {
642            globalObj.setCookie(cookieKey, cookieValue, 365, '/admin/');
643        }
644    };
645    globalObj.setToggleDisplayEvent = function (defaultAction, cookieKey) {
646        var $wrapElem = jQuery('.beginner_setting_mode');
647        if ($wrapElem.length === 0) {
648            return false;
649        }
650        globalObj.setToggleDisplay($wrapElem, defaultAction);
651        jQuery('.data_close a').on("click", function () {
652            globalObj.setToggleDisplay($wrapElem, 'close', cookieKey);
653        });
654        jQuery('.data_open a').on("click", function () {
655            globalObj.setToggleDisplay($wrapElem, 'open', cookieKey);
656        });
657        return true;
658    };
659    globalObj.setOpenField = function (config) {
660        var self = globalObj.setOpenField;
661        var defaults = {
662            linkSelector: '#open_meta_settings',
663            hiddenSelector: '.meta_settings',
664            buttonWrapSelector: '.standard_toggle_btn'
665        };
666        var options = jQuery.extend({}, defaults, config);
667        self.openElem = function ($targetElem, options) {
668            jQuery(options.hiddenSelector).show();
669            $targetElem.closest(options.buttonWrapSelector).remove();
670        };
671        jQuery(options.linkSelector).on("click", function (e) {
672            self.openElem(jQuery(e.currentTarget), options);
673        });
674    };
675    globalObj.setOpenCloseField = function (options) {
676        var self = globalObj.setOpenCloseField;
677        self.toggleElem = function ($targetElem, options) {
678            jQuery(options.showSelector).show();
679            jQuery(options.hideSelector).hide();
680        };
681        jQuery(options.linkSelector).on("click", function (e) {
682            self.toggleElem(jQuery(e.currentTarget), options);
683            if (options.recordPage && options.recordKey) {
684                globalObj.openRecordAjax(options.recordPage, options.recordKey, options.recordValue);
685            }
686        });
687    };
688    globalObj.openRecordAjax = function (page, key, value) {
689        var request_data = 'go=open-selector-record&page='+page+'&key='+key+'&open='+value;
690        jQuery.ajax({
691            dataType: 'text',
692            url : ajaxRequestBase,
693            type : 'get',
694            data : request_data
695        });
696        return false;
697    };
698
699    globalObj.adminImagePath = '/admin/res/new/img';
700    globalObj.setTagMatchValidation = function (selector, buttonWrapperSelector) {
701        if (jQuery.fn.tagMatchValidation) {
702            var lang;
703            if (jQuery('#admin_wrapper_table').hasClass('admin_japanese')) {
704                lang = 'japanese';
705            } else {
706                lang = 'english';
707            }
708            jQuery(selector).tagMatchValidation({
709                lang: lang,
710                buttonWrapClassName: 'admin_tagcheck_btn',
711                buttonClassName: 'global_square_smallest_btn global_square_blue_btn',
712                buttonWrapperSelector: buttonWrapperSelector,
713                okIcon: '<img src="' + globalObj.adminImagePath + '/icon_ok_x2.png" width="16" height="16" alt="" class="vami" />',
714                messageIcon: '<img src="' + globalObj.adminImagePath + '/icon_note_x2.png" width="16" height="16" alt="" class="vami" />'
715            });
716        }
717    };
718
719    globalObj.closeBackgroundId = 'black_out_background';
720    globalObj.setCloseBackgroundSize = function ($divElem) {
721        var $bodyElem = jQuery('body');
722        var height = $bodyElem[0].scrollHeight;
723        var width = $bodyElem[0].scrollWidth;
724        $divElem.css({width: width, height: height});
725        return $divElem;
726    };
727    globalObj.resizeCloseBackground = function () {
728        var $closeBackgroundElem = jQuery('#' + globalObj.closeBackgroundId);
729        if (0 < $closeBackgroundElem.length) {
730            globalObj.setCloseBackgroundSize($closeBackgroundElem);
731        }
732    };
733    globalObj.setResizeCloseBackground = function () {
734        jQuery(window).resize(function (e) {
735            globalObj.resizeCloseBackground();
736        });
737    };
738    globalObj.appendCloseBackground = function (popupSelector, hidingCssObj, callback) {
739        var $bgElem = jQuery('#' + globalObj.closeBackgroundId);
740        if ($bgElem.length === 0) {
741            var $divElem = jQuery('<div>').attr({id: globalObj.closeBackgroundId});
742            globalObj.setCloseBackgroundSize($divElem);
743            $divElem.on("click", function (e) {
744                globalObj.removeCloseBackground(popupSelector, hidingCssObj, callback);
745            });
746            jQuery('body').append($divElem);
747        } else {
748            $bgElem.on("click", function (e) {
749                globalObj.removeCloseBackground(popupSelector, hidingCssObj, callback);
750            });
751        }
752    };
753    globalObj.removeCloseBackground = function (popupSelector, hidingCssObj, callback) {
754        var $popupElem = jQuery(popupSelector);
755        $popupElem.css(hidingCssObj);
756        if (typeof callback === 'function') {
757            callback();
758        }
759        jQuery('#' + globalObj.closeBackgroundId).remove();
760    };
761    globalObj.clickCloseBackground = function () {
762        jQuery('#' + globalObj.closeBackgroundId).trigger('click');
763    };
764    globalObj.setPageHideEvent = function () {
765        jQuery(window).on('pagehide', function (e) {
766            globalObj.clickCloseBackground();
767        });
768    };
769    globalObj.setBalloonPopUp = function (wrapSelector, linkSelector, boxSelector) {
770        if (jQuery.fn.on) {
771            var self = this.setBalloonPopUp;
772            self.setReversePosition = function ($boxElem, isReverse) {
773                if (isReverse) {
774                    var boxHeight = $boxElem[0].clientHeight;
775                    $boxElem.css({top: '-' + boxHeight + 'px'});
776                }
777            };
778            self.show = function ($boxElem, $linkElem) {
779                $boxElem.css({visibility: 'visible'});
780                $linkElem.addClass('hover');
781                if ($boxElem.data('anchor') === 'on') {
782                    globalObj.moveAnchor($boxElem, 10, true);
783                }
784            };
785            self.hide = function ($boxElem, $linkElem) {
786                $boxElem.css({visibility: 'hidden'});
787                $linkElem.removeClass('hover');
788            };
789            self.toggle = function ($boxElem, $linkElem) {
790                if ($boxElem.css('visibility') === 'visible') {
791                    self.hide($boxElem, $linkElem);
792                    globalObj.clickCloseBackground();
793                } else if ($boxElem.css('visibility') === 'hidden') {
794                    var callback = function () {
795                        self.hide($boxElem, $linkElem);
796                    };
797                    self.show($boxElem, $linkElem);
798                    if ($boxElem.closest('#ajax_form').length === 0) {
799                        globalObj.appendCloseBackground($boxElem, {visibility : 'hidden'}, callback);
800                    }
801                }
802            };
803            self.createCloseButton = function () {
804                var $divElem = jQuery('<div>').addClass('upper_right_close');
805                var $btnElem = jQuery('<span>').addClass('close_button').on("click", function (e) {
806                    var $closeElem = jQuery(e.currentTarget);
807                    var $wrapElem = $closeElem.closest(wrapSelector);
808                    var $linkElem = $wrapElem.find(linkSelector);
809                    var $boxElem = $wrapElem.find(boxSelector);
810                    var callback = function () {
811                        self.hide($boxElem, $linkElem);
812                    };
813                    globalObj.removeCloseBackground($boxElem, {visibility : 'hidden'}, callback);
814                });
815                $divElem.append($btnElem);
816                return $divElem;
817            };
818            self.setCloseButton = function ($boxElem, isInit) {
819                if (globalObj.touchDevice) {
820                    if (isInit || $boxElem.find('.close_button').length === 0) {
821                        $boxElem.append(self.createCloseButton());
822                    }
823                }
824            };
825            self.setEvent = function () {
826                jQuery(document).on('click', linkSelector, function (e) {
827                    var $linkElem = jQuery(e.currentTarget);
828                    var $wrapElem = $linkElem.closest(wrapSelector);
829                    var $boxElem = $wrapElem.find(boxSelector);
830                    if (0 < $linkElem.length && 0 < $boxElem.length) {
831                        self.setCloseButton($boxElem, false);
832                        if (globalObj.touchDevice) {
833                            self.toggle($boxElem, $linkElem);
834                        } else {
835                            self.show($boxElem, $linkElem);
836                        }
837                    }
838                    return false;
839                });
840                if (!globalObj.touchDevice) {
841                    jQuery(document).on('mouseover', linkSelector, function (e) {
842                        var $linkElem = jQuery(e.currentTarget);
843                        var $wrapElem = $linkElem.closest(wrapSelector);
844                        var $boxElem = $wrapElem.find(boxSelector);
845                        if (0 < $linkElem.length && 0 < $boxElem.length) {
846                            self.setCloseButton($boxElem, false);
847                            self.show($boxElem, $linkElem);
848                        }
849                        return false;
850                    });
851                    jQuery(document).on('mouseleave', wrapSelector, function (e) {
852                        var $wrapElem = jQuery(e.currentTarget);
853                        var $linkElem = $wrapElem.find(linkSelector);
854                        var $boxElem = $wrapElem.find(boxSelector);
855                        if (0 < $linkElem.length && 0 < $boxElem.length) {
856                            self.setCloseButton($boxElem, false);
857                            self.hide($boxElem, $linkElem);
858                        }
859                    });
860                }
861            };
862            self.prepare = function ($wrapElem) {
863                $wrapElem.each(function (index, elem) {
864                    var $elem = jQuery(elem);
865                    var $linkElem = $elem.find(linkSelector);
866                    var $boxElem = $elem.find(boxSelector);
867                    if (0 < $linkElem.length && 0 < $boxElem.length) {
868                        self.setCloseButton($boxElem, true);
869                    }
870                });
871            };
872            self.init = function () {
873                var $wrapElem = jQuery(wrapSelector);
874                if ($wrapElem.length === 0) {
875                    return false;
876                }
877                self.setEvent();
878                self.prepare($wrapElem);
879                return true;
880            };
881            return self.init();
882        } else {
883            return false;
884        }
885    };
886
887    globalObj.setDatePicker = function (config, selector, toSelector, required) {
888        if (!jQuery.fn.datepicker) {
889            console.error('ERROR :: globalObj.setDatePicker() :: undefined jQuery.fn.datepicker');
890            return;
891        }
892        if (!selector) {
893            console.error('ERROR :: globalObj.setDatePicker() :: undefined selector');
894            return;
895        }
896        globalObj.overwriteDatepicker();
897        var isJapanese = jQuery('#admin_wrapper_table').hasClass('admin_japanese');
898        var showAdditionalButton = function (input) {
899            if (typeof input !== 'object') {
900                return;
901            }
902            setTimeout(function() {
903                var $buttonPaneElem = jQuery(input).datepicker('widget').find('.ui-datepicker-buttonpane');
904                var clearLabel = isJapanese ? 'クリア' : 'Clear';
905                var $btnElem = jQuery('<button class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" type="button">' + clearLabel + '</button>');
906                $btnElem
907                    .off('click')
908                    .on('click', function () {
909                        jQuery(input).val('').datepicker('hide');
910                    });
911
912                $btnElem.appendTo($buttonPaneElem);
913            }, 1 );
914        };
915        var defaults = {
916            dateFormat: 'yy/mm/dd',
917            showButtonPanel: true,
918            changeYear: true,
919            changeMonth: true,
920            showMonthAfterYear: true,
921            hideIfNoPrevNext: true,
922            firstDay: 0, // [0, 1] * Sunday is 0, Monday is 1
923            defaultDate: null,
924            minDate: null,
925            maxDate: null
926        };
927        var options;
928        var toOptions;
929        if (!required) {
930            defaults.beforeShow = showAdditionalButton;
931            defaults.onChangeMonthYear = showAdditionalButton;
932        }
933        if (isJapanese) {
934            defaults.monthNames = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
935            defaults.monthNamesShort  = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
936            defaults.dayNamesMin = ['日', '月', '火', '水', '木', '金', '土'];
937            defaults.yearSuffix = 'å¹´';
938            defaults.weekHeader = '週';
939            defaults.closeText = '閉じる';
940            defaults.prevText = '&laquo;前';
941            defaults.nextText = '次&raquo;';
942            defaults.currentText = '今日';
943        }
944        options = jQuery.extend({}, defaults, config);
945        if (toSelector) {
946            toOptions = jQuery.extend({}, options);
947            toOptions.onClose = function(selectedDate) {
948                jQuery(selector).datepicker('option', 'maxDate', (selectedDate ? selectedDate : options.maxDate));
949            };
950            options.onClose = function (selectedDate) {
951                jQuery(toSelector).datepicker('option', 'minDate', (selectedDate ? selectedDate : options.minDate));
952            };
953        }
954        jQuery(selector).datepicker(options);
955        if (toSelector) {
956            jQuery(toSelector).datepicker(toOptions);
957        }
958    };
959
960
961    globalObj.openImageManager = function (url) {
962        var height = jQuery(window).height();
963        var width = jQuery(window).width();
964        if (width < 1000) {
965            width = 1000;
966        } else {
967            width = width * 0.92;
968        }
969        if (height < 800) {
970            height = 800;
971        } else {
972            height = height * 0.95;
973        }
974        win_open(url, 'image-manager', width, height);
975    };
976
977    globalObj.setOpenImageManager = function (selector) {
978        if (typeof jQuery.fn.on == 'function') {
979            jQuery('body').on('click', selector, function (e) {
980                var folder = window.imageManagerFolder ? '&folder=' + window.imageManagerFolder : '';
981                var linkUrl = jQuery(this).attr('href');
982                var url = linkUrl.match(/&folder=/) === null ? linkUrl + folder : linkUrl;
983                globalObj.openImageManager(url);
984                return false;
985            });
986        }
987    };
988
989    globalObj.setOpenWindow = function (selector) {
990        if (typeof jQuery.fn.on == 'function') {
991            jQuery('body').on('click', selector, function (e) {
992                var url = jQuery(this).attr('href');
993                window.open(url);
994                return false;
995            });
996        }
997    };
998
999    globalObj.allSelectTextBody = function(textElem) {
1000        if (!textElem) {
1001            return;
1002        }
1003        if (globalObj.touchDevice) {
1004            setTimeout(function() {
1005                if (textElem) {
1006                    var end = textElem.value.length;
1007                    textElem.focus();
1008                    textElem.setSelectionRange(0, end);
1009                }
1010            }, 200);
1011        } else {
1012            textElem.select();
1013        }
1014    };
1015
1016    globalObj.overwriteDatepicker = function () {
1017        if (!jQuery.fn.datepicker) {
1018            return;
1019        }
1020        jQuery.datepicker._gotoToday = function(id) {
1021            var target = jQuery(id);
1022            var inst = this._getInst(target[0]);
1023            if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
1024                inst.selectedDay = inst.currentDay;
1025                inst.drawMonth = inst.selectedMonth = inst.currentMonth;
1026                inst.drawYear = inst.selectedYear = inst.currentYear;
1027            }
1028            else {
1029                var date = new Date();
1030                inst.selectedDay = date.getDate();
1031                inst.drawMonth = inst.selectedMonth = date.getMonth();
1032                inst.drawYear = inst.selectedYear = date.getFullYear();
1033                // the below two lines are new
1034                this._setDateDatepicker(target, date);
1035                this._selectDate(id, this._getDateDatepicker(target));
1036            }
1037            this._notifyChange(inst);
1038            this._adjustDate(target);
1039        };
1040    };
1041
1042    globalObj.setModalImageEditor = function () {
1043        if (typeof jQuery.fn.on == 'function') {
1044            jQuery('body').on('click', '.modal_image_editor', function () {
1045                var $selfElem = jQuery(this);
1046                var href = $selfElem.attr('href');
1047                var params = globalObj.parseParameter(href);
1048                if (params.img.match(/(jpg|jpeg|png)$/i)) {
1049                    globalObj.showModalImageEditor(href);
1050                } else {
1051                    //change to fancybox
1052                    var imgUrl = $selfElem.find('img').attr('src');
1053                    $selfElem
1054                        .attr('href', imgUrl)
1055                        .removeClass('modal_image_editor')
1056                        .addClass('popup_img');
1057                    $selfElem.trigger('click');
1058                }
1059                return false;
1060            });
1061        }
1062    };
1063
1064    globalObj.getModalWindowHeight = function() {
1065        var windowHeight = (window.innerHeight||document.documentElement.clientHeight||700);
1066        if (windowHeight > 700) {
1067            windowHeight = 700;
1068        }
1069        return windowHeight;
1070    };
1071
1072    globalObj.setResizeModalWindow = function () {
1073        jQuery(window).on('orientationchange.editor_orientation resize.editor_resize', function() {
1074            jQuery('#iframe-image-editor').attr('height', globalObj.getModalWindowHeight());
1075        });
1076    };
1077
1078    globalObj.setResizeModalWindow = function () {
1079        jQuery(window).on('orientationchange.editor_orientation resize.editor_resize', function() {
1080            jQuery('#iframe-image-editor').attr('height', globalObj.getModalWindowHeight());
1081        });
1082    };
1083
1084    globalObj.unsetResizeModalWindow = function () {
1085        jQuery(window).off('orientationchange.editor_orientation resize.editor_resize');
1086    };
1087
1088    globalObj.showModalImageEditor = function (url, config) {
1089        const defaults = {
1090            wrapClassName: 'image-editor',
1091            iframeId: 'iframe-image-editor',
1092        };
1093        const options = jQuery.extend({}, defaults, config);
1094        var windowHeight = globalObj.getModalWindowHeight();
1095        var isHeightHigh = false;
1096        if ('ontouchend' in window) {
1097            isHeightHigh = true;
1098        }
1099        new ModalWindow({
1100            mode: 'default',
1101            isHeightHigh: isHeightHigh,
1102            innerHtmlStr: '<iframe src="'+url+'" width="100%" height="'+windowHeight+'" id="'+options.iframeId+'"></iframe>',
1103            closeBtnHtml: '<span class="close_btn_box" role="button" title="close"><img src="'+adminImgPath+'btn_close_x2.png" width="25" height="25" /></span>',
1104            cancelBtnSelector: '',
1105            additionalWrapClassName: options.wrapClassName,
1106            useEscKeyCancel: true,
1107            fadeInSpeed: 200,
1108            openedCallback: function () {
1109                globalObj.setResizeModalWindow();
1110            },
1111            destroyCallback: function () {
1112                globalObj.unsetResizeModalWindow();
1113            }
1114        });
1115        return false;
1116    };
1117
1118    /**
1119     * 画像編集モーダル(photoEditer)を閉じる
1120     * 開いていない場合は何もしない
1121     * @returns {void}
1122     * @example globalObj.closeModalImageEditor();
1123     */
1124    globalObj.closeModalImageEditor = function () {
1125        const modalElem = document.querySelector('.overlay_area.image-editor');
1126        if (modalElem === null) {
1127            return;
1128        }
1129        // ModalWindowのインスタンス参照を保持していないため、閉じるボタン経由で既存の破棄処理を走らせる
1130        const closeButtonElem = modalElem.querySelector('.close_btn_box');
1131        if (closeButtonElem === null) {
1132            return;
1133        }
1134        // 破棄処理はフェードアウトを伴い、直後にalert等でブロックされると表示が残るため先に非表示にする
1135        modalElem.style.display = 'none';
1136        closeButtonElem.click();
1137    };
1138
1139    globalObj.showModalInnerFrame = function (config) {
1140        const defaults = {
1141            url: '',
1142            wrapClassName: '',
1143            iframeId: '',
1144        };
1145        const options = jQuery.extend({}, defaults, config);
1146        const classNames = ['modal_inner_frame'];
1147        if (options.wrapClassName) {
1148            classNames.push(options.wrapClassName);
1149        }
1150        return globalObj.showModalImageEditor(options.url, {
1151            wrapClassName: classNames.join(' '),
1152            iframeId: options.iframeId,
1153        });
1154    };
1155
1156    globalObj.setupInnerFrameHeightMessage = function (wrapSelector, fromSelector) {
1157        const postIframeHeight = () => {
1158            const wrapElement = document.querySelector(wrapSelector);
1159            if (wrapElement === null) {
1160                return;
1161            }
1162            const height = wrapElement.offsetHeight;
1163            window.parent.postMessage({ iframeHeight: height }, location.origin);
1164        };
1165        // onload
1166        postIframeHeight();
1167        // resize
1168        window.addEventListener('resize', postIframeHeight);
1169        // destroy
1170        if (!fromSelector) {
1171            return;
1172        }
1173        const formElement = document.querySelector(fromSelector);
1174        formElement.addEventListener('submit', function () {
1175            window.removeEventListener('resize', postIframeHeight);
1176        });
1177    };
1178
1179    globalObj.getParameter = function() {
1180        //get url
1181        var url = location.href;
1182        return globalObj.parseParameter(url);
1183    };
1184
1185    globalObj.parseParameter = function(url) {
1186        var paramsObj = {};
1187        var parser = document.createElement('a');
1188        parser.href = url;
1189        var parameters = parser.search;
1190
1191        if(parameters != '') {
1192            parameters = parameters.replace(/^\?/, '');
1193            var params   = parameters.split("&");
1194            for ( i = 0; i < params.length; i++ ) {
1195                var paramItem = params[i].split("=");
1196                paramsObj[paramItem[0]] = paramItem[1];
1197            }
1198        }
1199        return paramsObj;
1200    };
1201
1202    globalObj.isImageEditable = function(img) {
1203        var extension = img.split(".").pop();
1204        return extension.match(/^(jpg|jpeg|png)$/i);
1205    };
1206
1207    globalObj.touchDevice = false;
1208    globalObj.msTouch = false;
1209    globalObj.forceTouch = (globalObj.getCookie('forceTouch') === '1');
1210    globalObj.setTouchDevice = function () {
1211        var touchDevice = false;
1212        var msTouch = false;
1213        if (globalObj.forceTouch) {
1214            touchDevice = true;
1215            msTouch = true;
1216        } else {
1217            if ('ontouchend' in window) {
1218                touchDevice = true;
1219            } else {
1220                if ((navigator.maxTouchPoints && 1 < navigator.maxTouchPoints) || (navigator.msMaxTouchPoints && 1 < navigator.msMaxTouchPoints)) {
1221                    touchDevice = true;
1222                    msTouch = true;
1223                }
1224            }
1225        }
1226        globalObj.touchDevice = touchDevice;
1227        globalObj.msTouch = msTouch;
1228    };
1229    globalObj.setTouchDevice();
1230
1231    globalObj.setDropdownMenu = function () {
1232        if (!jQuery.dropdownMenu) {
1233            return;
1234        }
1235        jQuery.dropdownMenu({
1236            menuWrapSelector: 'ul.dropmenu',
1237            hoverClassName : 'nav_on',
1238            subMenuClassName : 'submenu',
1239            forceClickEvent: (globalObj.forceTouch || adminMenu === 'click' ? true : false),
1240            useSubTitle: true,
1241            closeBackgroundId: 'menu_close_background',
1242            closeHtml: '<button type="button"><i class="fa fa-times" aria-hidden="true"></i></button>',
1243            headerNavClassName: 'navigation_menu',
1244            unnecessaryCloseButton : true
1245        });
1246        if (globalObj.touchDevice || globalObj.forceTouch || adminMenu === 'click') {
1247            var $mainAdminNavElem = jQuery('.main_admin_navigation');
1248            $mainAdminNavElem.find('.parent_link').attr({href: 'javascript:void(0);'});
1249            $mainAdminNavElem.find('.parent_link, .close_all_menu').on('click', function () {
1250                var windowWidth = window.innerWidth || document.documentElement.clientWidth || 980;
1251                if (windowWidth <= 700) {
1252                    globalObj.moveAnchor('.main_admin_navigation', 0, false);
1253                }
1254            });
1255        }
1256    };
1257
1258    globalObj.setupSmoothAnchorLink = function() {
1259        jQuery('a[href^="#"].smooth_anchor_link').on('click', function(event) {
1260            const id = jQuery(event.currentTarget)
1261                .attr('href')
1262                .replace(/^#/, '');
1263            const $destinationElem = jQuery(`#${id}`);
1264            if ($destinationElem.length === 0) {
1265                return;
1266            }
1267            $destinationElem[0].scrollIntoView({ behavior: "smooth", block: "start" });
1268            event.preventDefault();
1269        });
1270    };
1271
1272    globalObj.setPhoneTooltipDesc = function () {
1273        jQuery('#hint a').on("click", function (event) {
1274            event.preventDefault();
1275            new ModalWindow({
1276                mode: 'default',
1277                innerHtmlStr: '<div id="button_hint_desc"></div>',
1278            });
1279        });
1280    };
1281
1282    globalObj.setCompleteMessageFadeOut = function (selector = '.good_box') {
1283        jQuery(selector).animate({opacity: 1}, 200, 'linear', function() {
1284            jQuery(this).delay(3000).animate({opacity: 0}, 400, 'linear')
1285        });
1286    };
1287
1288    globalObj.formatOrdinal = function (value, jaSuffix) {
1289        const adminWrapperElem = document.querySelector('#admin_wrapper_table');
1290        const isAdminEN = Boolean(adminWrapperElem?.classList.contains('admin_english'));
1291        if (!isAdminEN) {
1292            // Japanese
1293            return `${value}${jaSuffix}`;
1294        }
1295        // English
1296        const pr = new Intl.PluralRules('en-US', { type: 'ordinal' });
1297        const suffixes = new Map([
1298            ['one', 'st'],
1299            ['two', 'nd'],
1300            ['few', 'rd'],
1301            ['other', 'th'],
1302        ]);
1303        const rule = pr.select(value);
1304        const suffix = suffixes.get(rule);
1305        return `${value}${suffix}`;
1306    };
1307
1308    globalObj.setupViewport = function () {
1309        if (window.innerWidth > 700) {
1310            jQuery('meta[name="viewport"]').attr('content', '');
1311        }
1312    };
1313    globalObj.setupViewport();
1314
1315    globalObj.setupPhotoSwipe = function (params) {
1316        if (window.PhotoSwipeLightbox === undefined ||  window.PhotoSwipe === undefined) {
1317            console.error('ERROR :: undefined PhotoSwipeLightbox or PhotoSwipe');
1318            return;
1319        }
1320        const isEnglish = jQuery('#container').hasClass('admin_english');
1321        const defaults = {
1322            gallerySelector: '.pswp_gallery_list',
1323            childrenSelector: 'a.popup_img_fullscreen',
1324            errorMessage: isEnglish ? 'This file cannot be previewed.' : 'プレビューできないファイルです',
1325            padding: { top: 50, bottom: 50, left: 0, right: 0 },
1326        };
1327        const options = jQuery.extend(defaults, params);
1328        // init PhotoSwipe
1329        const lightbox = new PhotoSwipeLightbox({
1330            gallery: options.gallerySelector,
1331            children: options.childrenSelector,
1332            errorMsg: options.errorMessage,
1333            padding: options.padding,
1334            // dynamic import is not supported in UMD version
1335            pswpModule: window.PhotoSwipe
1336        });
1337        lightbox.on('uiRegister', function() {
1338            // show caption in PhotoSwipe
1339            lightbox.pswp.ui.registerElement({
1340                name: 'custom-caption',
1341                order: 9,
1342                isButton: false,
1343                appendTo: 'root',
1344                html: 'Caption text',
1345                onInit: (el, pswp) => {
1346                    pswp.on('change', () => {
1347                        // create caption
1348                        const currSlideElement = pswp.currSlide.data.element;
1349                        const imgElement = currSlideElement.querySelector('img');
1350                        const filenameText = imgElement
1351                            ? imgElement.getAttribute('alt')
1352                            : currSlideElement.getAttribute('title')
1353                        const width = currSlideElement.dataset.pswpWidth;
1354                        const height = currSlideElement.dataset.pswpHeight;
1355                        const sizeText = (width && height) ?`(${width}x${height})` : '';
1356                        el.innerHTML = `<span class="file_name_text">${filenameText}</span>
1357                                        <span class="file_size_text">${sizeText}</span>`;
1358                    });
1359                }
1360            });
1361        });
1362        lightbox.init();
1363    };
1364}
1365
1366window.globalObj = globalObj;

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.