PageSourceSearch

https://image.yes24.com/static/common/frontCommon.js?v=20260624

js yes24.com collected 2026-10-01 09:01:07 UTC 151,931 bytes, 2,569 lines download raw bytes

1String.prototype.toBool = function () {
2    var lower = this.trim().toLowerCase();
3    if (["true", "1", "yes", "y"].indexOf(lower) >= 0) return true;
4    if (["false", "0", "no", "n"].indexOf(lower) >= 0) return false;
5    return Boolean(this.length);
6};
7Number.prototype.toBool = function () {
8    return this.valueOf() !== 0;
9};
10
11//모바일 공유하기 팝업 열기
12function showSharePopup(pageType) {
13    let wrap = $("#yesWrap");
14    if(pageType == "cremaclub" || pageType == "cremaclub_detail") {
15        wrap = $("#bookClubWrap");
16    }
17    if (!wrap.length) return;
18    
19    // 공유하기 영역 동적 처리
20    let shareContent = '';
21
22    // 에드온
23    const isAddonPopup = ["goods_detail", "usedshophub", "event_detail", "event_detail_new", "yesfunding", "cremaclub_detail"].includes(pageType);
24    if (isAddonPopup) {
25        // 애드온 설정 변수
26        let memNo, title, url, pageTypeNo;
27
28        if (pageType == "goods_detail" || pageType == "usedshophub") {
29            memNo = typeof _CurrentMemNo === 'undefined' || _CurrentMemNo == null || _CurrentMemNo == "" ? (typeof USERNO === 'undefined' || USERNO == null || USERNO == "" ? '0' : USERNO) : _CurrentMemNo;
30            title = g_GoodsName;
31            url = "https://m.yes24.com" + (pageType == "usedshophub" ? "/usedshophub/hub/" : "/goods/detail/") + g_GoodsNo;
32            pageTypeNo = '01';
33        }
34        else if (pageType == "event_detail" || pageType == "event_detail_new"){
35            let metaUrl = document.querySelector('meta[property="eventurl"]');
36            let metaTitle = document.querySelector('meta[property="og:title"]');
37            memNo = USERNO;
38            title = metaTitle ? metaTitle.getAttribute('content') : document.title;
39            url = metaUrl ? metaUrl.getAttribute('content') : window.location.href;
40            pageTypeNo = '02';
41        }
42        else if (pageType == "yesfunding") {
43            let metaUrl = document.querySelector('meta[property="og:url"]');
44            let metaTitle = document.querySelector('meta[property="og:title"]');
45            memNo = USERNO;
46            title = metaTitle ? metaTitle.getAttribute('content') : document.title;            
47            url = metaUrl ? metaUrl.getAttribute('content') : window.location.href;
48            pageTypeNo = '03';
49        }
50        else if(pageType == "cremaclub_detail") {
51            memNo = USERNO == '' ? '0' : USERNO;
52            title = g_GoodsName;            
53            url = CREMACLUB_URL + "/bookclub/detail/" + g_GoodsNo;
54            pageTypeNo = '06';
55        }
56        
57        shareContent = `
58            <dd class="adOnTp">
59                <div class="adOnRow">
60                    <div class="cmptWrap">
61                        <div class="cmptUnit flexMod am">
62                            <div class="cmptCell">
63								<p class="alertP txC_black fwB">내 링크 공유하면 <strong class="txC_dBlue">3% 리워드</strong> 적립</p>
64								<p class="alertP mgt3"><a href="https://m.yes24.com/notice/infoadon2" class="lnk_go">공유한 링크를 통해 다른 사람이 주문하면 수익금이 적립됩니다.</a></p>
65							</div>
66                            <div class="cmptCell cellRgt">
67                                <label id="cboxAddon" class="yesOnOff">
68                                    <span class="chk">
69                                        <input type="checkbox" onclick="addon.CheckAddon('m', ${memNo}, {title:'${title}', url:'${url}', pageType:'${pageTypeNo}', platform:'m', memNo:${memNo}});">
70                                        <span class="chkBtn"></span>
71                                    </span>
72                                </label>
73                            </div>
74                        </div>
75                    </div>
76                </div>
77                <div class="shareRow">
78                    <a href="javascript:void(0);" class="lnk_share" onclick="executeShare('facebook');"><em class="share_ico share_fb"></em><em class="share_txt">페이스북</em></a>
79                    <a href="javascript:void(0);" class="lnk_share" onclick="executeShare('twitter');"><em class="share_ico share_x"></em><em class="share_txt">X</em></a>
80                    <a href="javascript:void(0);" class="lnk_share" onclick="executeShare('kakaotalk');"><em class="share_ico share_ka"></em><em class="share_txt">카카오톡</em></a>
81                    <a href="javascript:void(0);" class="lnk_share" onclick="executeShare('line');"><em class="share_ico share_ln"></em><em class="share_txt">라인</em></a>
82                    <a href="javascript:void(0);" class="lnk_share" onclick="addon.CopyUrl('AddonCopy', 'compCopyAdOn', this, { url:'${url}', platform:'m'});" id="txtUrl"><em class="share_ico share_url"></em><em class="share_txt">URL 복사</em></a>
83                </div>
84            </dd>
85        `;
86    }
87    else {
88        shareContent = `
89            <dd>
90                <a href="javascript:void(0);" class="lnk_share" onclick="executeShare('facebook');"><em class="share_ico share_fb"></em><em class="share_txt">페이스북</em></a>
91                <a href="javascript:void(0);" class="lnk_share" onclick="executeShare('twitter');"><em class="share_ico share_x"></em><em class="share_txt">X</em></a>
92                <a href="javascript:void(0);" class="lnk_share" onclick="executeShare('kakaotalk');"><em class="share_ico share_ka"></em><em class="share_txt">카카오톡</em></a>
93                <a href="javascript:void(0);" class="lnk_share" onclick="executeShare('line');"><em class="share_ico share_ln"></em><em class="share_txt">라인</em></a>
94                <a href="javascript:void(0);" class="lnk_share" onclick="executeShare('copy', this);" id="txtUrl"><em class="share_ico share_url"></em><em class="share_txt">URL 복사</em></a>
95            </dd>
96        `;
97    }
98
99    const sharePopupHtml =
100        `<div id="SharePopupLayor" class="yesDefPopArea riseMod">
101            <a href="javascript:void(0);
101" class="lnk_closeDefPop" onclick="closeSharePopup();">창 닫기</a>
102            <!-- ########## 공유하기 팝업 시작 ########## -->
103            <div id="SharePopup" class="yesRisePop">
104                <!-- ##### 팝업 닫기 시작 ##### -->
105                <div class="yesRP_close"><a href="javascript:void(0);" class="lnk_closePop" onclick="closeSharePopup();"><em class="ico">창 닫기</em></a></div>
106                <!-- ##### 팝업 닫기 끝 ##### -->
107                <!-- ##### 팝업 내용 시작 ##### -->
108                <div class="yesRP_con">
109                    <dl class="shareDl">
110                        <dt>공유하기</dt>
111                         ${shareContent}
112                    </dl>
113                </div>
114                <div class="yesRP_bot">
115                    <div class="yesRP_btn">
116                        <span class="colCell"><a href="javascript:void(0);" class="btn_c l_size" onclick="executeShare('other');"><em class="txt">다른 앱으로 공유하기</em></a></span>
117                    </div>
118                </div>
119                <!-- ##### 팝업 내용 끝 ##### -->
120            </div>
121            <input type="hidden" id="hdAddonCode" value=""/>
122            <!-- ########## 공유하기 팝업 끝 ########## -->
123        </div>`;
124    wrap.append(sharePopupHtml);
125    
126    if (!$("body").hasClass("notScl") && !$("body").hasClass("schMod")) {
127        $("html, body").addClass("notScl");
128    }
129
130    setTimeout(function () {
131        $("#SharePopup").addClass("riseOn");
132    }, 200);
133
134    if (IS_NATIVE_APPS) {
135        setMcode('011_002_008');
136    }
137}
138//모바일 공유하기 팝업 닫기
139function closeSharePopup() {
140    const tarObj = $("#SharePopupLayor");
141    if (tarObj.hasClass("riseMod")) {
142        $("#SharePopup").removeClass("riseOn");
143        setTimeout(function () {
144            tarObj.remove();
145            $("html, body").removeClass("notScl");
146        }, 125);
147    } else {
148        tarObj.remove();
149        $("html, body").removeClass("notScl");
150    }
151}
152//모바일 공유하기 실행
153function executeShare(shareType, obj) {
154    const getMetaContent = (property, fallback) => $(`meta[property="${property}"]`).attr("content") || fallback;
155
156    const currentUrl = window.location.href;
157    const pathAndQuery = window.location.pathname + window.location.search;
158    let url = (currentUrl && currentUrl.startsWith("https://event.yes24.com"))
159        ? currentUrl
160        : getMetaContent("og:url", currentUrl);
161    url = url.toLowerCase().includes('yes24.com') ? url : currentUrl;
162    const title = getMetaContent("og:title", document.title);
163    const text = getMetaContent("og:description", "");
164    let imageUrl = getMetaContent("og:image", "");
165    const $yesShareWrap = $("#yesShareWrap");
166    const pageType = $yesShareWrap.length > 0 && $yesShareWrap.data('page-type') ? $yesShareWrap.data('page-type') 
166: "";
167    const twitterFormat = `${title.replace(/\|/g, "")}: ${text} \n${url}`;
168
169    switch (shareType) {
170        case "facebook":
171            shareSnsOnMobile('facebook', url, '', '');
172            break;
173        case "twitter":
174            shareSnsOnMobile('twitter', twitterFormat, '', '');
175            break;
176        case "kakaotalk":
177            url = url == undefined || url == "" ? pathAndQuery : url.replace(/^https?:\/\/[^/]+/, '');
178            if (pageType == "goods_detail" || pageType == "usedshophub" || pageType == "cremaclub_detail") {
179                url = (url && url.match(/\d+$/) || [])[0] || null;
180            }
181            kakaoLinkSend(pageType, title, text, url, imageUrl);
182            break;
183        case "line":
184            shareSnsOnMobile('line', url, imageUrl, title);
185            break;
186        case "copy":
187            (async () => {
188                obj.dataset.clipboardText = currentUrl;
189                await copyUrlClipboard(obj);
190            })();
191            break;
192        case "other":
193            navigator.share({ title, text, url });
194            break;
195    }
196}
197//모바일 SNS 공유하기 실행
198function shareSnsOnMobile(share_type, share_url, img_url, message) {
199    setMcode(306);
200    
201    let addonDescription = "";
202    const addonYn = $("#cboxAddon input[type='checkbox']").is(":checked");
203    if (addonYn) {
204        const addonCode = $("#hdAddonCode").val();
205        share_url = "https://link.yes24.com/a/" + addonCode;
206        addonDescription = "이 포스팅은 애드온 활동의 일환으로, 이에 따라 일정액의 수수료를 제공받습니다.";
207    }
208
209    if (share_type == "line") {
210        if (addonYn) {
211            // 애드온 공유하기
212            message = addonDescription;
213        }        
214        var lineTextMsg = "http://line.me/R/msg/text/?" + encodeURIComponent(message + '\n' + share_url);
215        var lineImageMsg = "line://msg/image/" + encodeURIComponent(img_url);
216        location.href = lineTextMsg;
217    }
218    else if (share_type == "facebook") {
219        var facebookUrlPrefix = "https://m.facebook.com/dialog/share?app_id=390305751390074&href=";
220        if (APP_GB == 'YES24' && IS_NATIVE_APPS) {
221            goApp('OPENURL', facebookUrlPrefix + share_url);
222            if (addonYn) {
223                addon.CopyUrl('AddonCopy', 'compCopyAdOn', this, {mask:true, pWidth:375, url:share_url, platform:'m', isFacebook:true});
224            }
225        }
226        else {
227            window.open(facebookUrlPrefix + encodeURIComponent(share_url), "facebook_pop");
228            if (addonYn) {
229                addon.CopyUrl('AddonCopy', 'compCopyAdOn', this, {mask:true, pWidth:375, url:share_url, platform:'m', isFacebook:true});
230            }
231        }
232    }
233    else if (share_type == "twitter") {
234        if (addonYn) {
235            // 애드온 공유하기
236            share_url = encodeURIComponent(addonDescription) + '+' + share_url;
237        }
238        var share_text = "https://twitter.com/intent/tweet?text=" + share_url;
239        window.open(share_text, 'twitter_pop');
240    }
241}
242//PC SNS 공유하기 실행
243function shareSnsOnPc(gubun, snsType, triggerObj) {
244    const getMetaContent = (property, fallback) => $("meta[property='" + property + "']").attr("content") || fallback;
245
246    let contentUrl, title, image, description;
247
248    if (gubun == "author") {
249        contentUrl = document.location.origin + document.location.pathname;
250        title = getMetaContent('og:title', document.title);
251        image = getMetaContent('og:image', '');
252        description = getMetaContent('og:description', '');
253    }
254    else if (gubun == "addon") {
255        const isChecked = $("#cboxAddon input[type='checkbox']").is(":checked");
256        if (isChecked) {
257            const addonCode = $("#hdAddonCode").val();
258            contentUrl = "https://link.yes24.com/a/" + addonCode;
259            description = "이 포스팅은 애드온 활동의 일환으로, 이에 따라 일정액의 수수료를 제공받습니다.";
260        }
261        else {
262            contentUrl = document.location.href;
263            description = getMetaContent('og:description', '');
264        }
265        title = getMetaContent('og:title', document.title);
266        image = getMetaContent('og:image', '');
267    }
268
269    switch (snsType) {
270        case 'facebook':
271            const facebookUrl = 'https://www.facebook.com/dialog/share?app_id=390305751390074&href=' + encodeURIComponent(contentUrl);
272            window.open(facebookUrl, 'facebook_pop');
273            addon.CopyUrl('AddonCopy', 'compCopyAdOn', this, {mask:true, pWidth:375, url:contentUrl, platform:'p', isFacebook:true});
274            break;
275        case 'twitter':
276            const twitterUrl = 'https://twitter.com/intent/tweet?text=' + encodeURIComponent(description) + '+' + encodeURIComponent(contentUrl);
277            window.open(twitterUrl, 'twitter_pop');
278            break;
279        case 'kakaotalk':
280            contentUrl = document.location.pathname.toLowerCase().replace('/product', '');
281            kakaoLinkSend('author', title, description, contentUrl, image);
282            break;
283        case 'line':
284            const lineUrl = 'http://line.me/R/msg/text/?' +
285                encodeURIComponent(description) + '%0D%0A' +
286                encodeURIComponent(contentUrl);
287            window.open(lineUrl, 'line_pop');
288            break;
289        case 'copy':
290            if (triggerObj) {
291                triggerObj.dataset.clipboardText = contentUrl;
292                let clipboard = new ClipboardJS(triggerObj);
293                clipboard.on('success', function (e) {
294                    alert('URL이 복사되었습니다.');
295                    e.clearSelection();
296                    clipboard.destroy();
297                });
298            }
299            break;
300    }
301}
302//카카오톡 공유하기 실행
303function kakaoLinkSend(page_type, title, message, link, img_url) {
304    if (typeof setMcode === 'function'){
305        setMcode(306);
306    }
307
308    if (typeof Kakao === 'undefined') {
309        console.error('Kakao SDK is not loaded.');
310        return;
311    }
312
313    if (!Kakao.isInitialized()) {
314        Kakao.init('4a5b8d3bda1da12710f007d9750eed67');
315    }
316
317    let link_url = '', author_text = '', description = '', template_id = '', button_title = '';
318
319    //상품상세, 중고상품허브
320    if (page_type == "goods_detail" || page_type == "usedshophub") {
321        link_url = (page_type == "usedshophub" ? "/usedshophub/hub/" : "/goods/detail/") + link; // 설정된 규격 https://m.yes24.com/${url}
322        author_text = $(".authPub").length
323            ? $(".authPub:first").clone().find(".divi").text("/").end().text().replace(/\s+/g, " ").replace(/\s*\/\s*/g, "/").replace(/\s*,\s*/g, ", ").trim()
324            : $(".gd_auth:first").clone().find(".moreAuthArea").remove().end().text().replace(/\s+/g, " ").replace(/\s*,\s*/g, ", ").trim();
325        var ua = navigator.userAgent.toLocaleLowerCase();
326        if (/android/.test(ua)) {
327            description = author_text + "\r\n" + message;
328        }
329        else {
330            description = author_text + " / " + message;
331        }
332        template_id = 10442;
333        button_title = "자세히보기";
334    }
335    //이벤트상세
336    else if (page_type == "event_detail") {
337        template_id = 10444;
338        description = message;
339        link_url = link; // 설정된 규격 https://m.yes24.com/${url}
340        button_title = "바로가기";
341    }
342    //이벤트개편
343    else if (page_type == "event_detail_new") {
344        template_id = 107637;
345        description = message;
346        link_url = link; // 설정된 규격 https://event.yes24.com/${url}
347        button_title = "바로가기";
348    }
349    //YES캘린더
350    else if (page_type == "yes_calendar") {
351        link_url = "/YesCalendar";
352        description = message;
353        template_id = 10445;
354        button_title = "자세히보기";
355    }
356    //채널예스 카드뉴스
357    else if (page_type == "card_news") {
358        link_url = link;
359        description = message;
360        template_id = 31703;
361        button_title = "자세히보기";
362    }
363    //북클럽
364    else if (page_type == "cremaclub") {
365        link_url = "https://cremaclub.yes24.com/" + link; // 설정된 규격 ${url}
366        description = message;
367        template_id = 40326;
368        button_title = "바로가기";
369    }
370    //북클럽 상세
371    else if (page_type == "cremaclub_detail") {
372        if (link.startsWith("https")) {
373            const match = link.split('?')[0].match(/(\d+)\/?$/);
374            link = match ? match[1] : '';
375        }
376        link_url = "https://cremaclub.yes24.com/bookclub/detail/" + link; // 설정된 규격 ${url}
377        description = message;
378        template_id = 40326;
379        button_title = "바로가기";
380    }
381    //파트너샵
382    else if (page_type == "partnershop") {
383        link_url = link;
384        description = message;
385        template_id = 51773;
386        button_title = "바로가기";
387    }
388    //선물 수락하기
389    else if (page_type == "gift_accept") {
390        link_url = link;
391        description = message;
392        template_id = 53792;
393        button_title = "선물 받기";
394    }
395    //작가파일
396    else if (page_type == "author") {
397        link_url = link;
398        description = message;
399        template_id = 122385;
400        button_title = document.location.pathname.toLowerCase().includes('goods') ? '작가의 전체 작품 보기' : '작가 상세보기';
401    }
402    //채널예스
403    else if (page_type == "chyes_detail") {
404        link_url = link; // 설정된 규격 http://m.ch.yes24.com/${url}
405        description = message;
406        template_id = 10446;
407        button_title = "바로가기";
408    }
409
410    const addonYn = $("#cboxAddon input[type='checkbox']").is(":checked");
411    if (addonYn) {
412        const addonCode = $("#hdAddonCode").val();
413        link_url = addonCode;
414        description = "이 포스팅은 애드온 활동의 일환으로, 이에 따라 일정액의 수수료를 제공받습니다.";
415        template_id = 127285;
416    }
417
418    //더블 슬래시 제거
419    if (link_url != undefined && link_url.charAt(0) == "/") {
420        link_url = link_url.substr(1);
421    }
422
423    if (img_url == '' || img_url == undefined) {
424        //카카오 링크 전송
425        if (typeof Kakao.Share != "undefined") {
426            Kakao.Share.sendScrap({
427                requestUrl: link,
428            });
429            return;
430        }
431        // SDK 업그레이드 이후 아래 코드 제거
432        Kakao.Link.sendScrap({
433            requestUrl: link,
434        })
435    }
436    else {
437        const template_args = {
438            title: title,
439            description: description,
440            url: link_url,
441            imgFirst: img_url,
442            button_title: button_title,
443        };
444
445        if (typeof Kakao.Share != "undefined") {
446            Kakao.Share.sendCustom({
447                templateId: template_id,
448                templateArgs: template_args,
449                installTalk: true
450            });
451            return;
452        }
453        // SDK 업그레이드 이후 아래 코드 제거
454        Kakao.Link.sendCustom({
455            templateId: template_id,
456            templateArgs: template_args,
457            installTalk: true
458        });
459    }
460}
461
462//안드로이드 버전체크
463function getAndroidVersion() {
464    return (navigator.userAgent.match(/Android\s([0-9\.]+)/) || [])[1] || null;
465}
466//풋터 펼침
467function toggleFootInfo() {
468    $("#yFootInfo").toggleClass("toggleOn");
469    if ($("#yFootInfo").hasClass("toggleOn")) {
470        $("html, body").stop().animate({ scrollTop: $(document).height() }, 450, 'easeInOutQuart');
471    }
472}
473
474var bottonMenu = $('#toolBar .toolBarGrp ul li a');
475var pathName = document.location.pathname.toLowerCase();
476
477function bottomBarInit() {
478    $.each(bottonMenu, function (index, item) {
479        var menuName = $(item).attr('href').toLowerCase();
480
481        // 하단 메뉴
482        if ((pathName == '/' || pathName.indexOf('/home') > -1) && index == 0) {
483            var pageName = getCookie("PageName");
484            if (pageName == 'Main') {
485                $(item).parent().addClass('on');
486            }
487        }
488        else if (pathName != '/' && ((menuName.indexOf(pathName) > -1 || (menuName + '/index').indexOf(pathName) > -1))) {
489            $(item).parent().addClass('on');
490        }
491        else {
492            $(item).parent().removeClass('on');
493        }
494    });
495
496    if ($("#toolBar").length > 0 && false) {
497        getLastRecentGoods();
498    }
499
500    if (pathName.indexOf('/momo/member/ftmem') > -1) {
501        $("#yesBotAlarm").hide();
502    }
503    // 웰컴에서는 뒤로가기 버튼 숨김
504    if (pathName == '/' || pathName.indexOf('/home/') > -1 || pathName.indexOf('/momo/member/ftmem') > -1) {
505        $("#yesBackBtn").hide();
506    }
507}
508
509//마지막 상품 가져오기 없을시 -1 반환
510function getLastRecentGoods() {
511    var recentViewGoods = getCookie("RecentViewGoods");
512    var arrRecentViewGoods = recentViewGoods != null && recentViewGoods.length > 0 ? recentViewGoods.split("`") : '';
513    var recentGoodsNo = -1;
514
515    if (arrRecentViewGoods.length > 0) {
516        recentGoodsNo = arrRecentViewGoods[arrRecentViewGoods.length - 1] || -1;
517    }
518
519    if (recentGoodsNo > 0) {
520        $("#bottomRecentGoodsWrap").show();
521        $("#bottomRecentGoodsWrap img").attr('src', HTTPS_IMG_HOST_SYS + '/goods/' + recentGoodsNo + '/S');
522    }
523    else {
524        $("#bottomRecentGoodsWrap").hide();
525    }
526};
527//뒤로가기 버튼 클릭 시
528function goBackURL() {
529    // 앞으로가기 버튼 클릭 시 이동할 URL을 Cookie에 저장
530    SetLocalStorageValue("FowardBtnURL", document.location.href);
531
532    if (GetLocalStorageValue('clickMoreNewUsed') == 'Y') {
533        location.href = GetCookie('check_reffer');
534    } else {
535        history.back();
536
537        setTimeout(function () {
538            if (document.referrer != '' && document.referrer > 0) {
539                location.href = document.referrer;
540            } else {
541                location.href = (url == null || url == '' || url == undefined) ? MOBILE_URL : current_url;
542            }
543        }, 800);
544    }
545}
546//앞으로가기 버튼 클릭 시
547function goForwardURL() {
548    // 이전에 로드된 웰컴 외 페이지로 이동
549    var fowardBtnURL = GetLocalStorageValue("FowardBtnURL");
550    document.location.href = fowardBtnURL;
551}
552function tBarMore() {
553    var tBar = $("#toolBar");
554    var tBMr = $("#toolBarMore");
555    var tBMk = $("#toolBarMoreMask");
556
557    if (tBMr.hasClass("tBarMoreOn")) {
558        $("html, body").removeClass("notScl");
559        $("#yesWrap").attr("style", "");
560        $(window).scrollTop(posY);
561
562        tBar.removeClass("tBarMoreOn");
563        tBMr.removeClass("tBarMoreOn");
564        tBMk.hide();
565    } else {
566        posY = $(window).scrollTop();
567        $("html, body").addClass("notScl");
568        $("#yesWrap").css("top", -posY);
569
570        tBar.addClass("tBarMoreOn");
571        tBMr.addClass("tBarMoreOn");
572        tBMk.fadeIn(100);
573        $("html").attr("data-yesdir", "up");
574    }
575}
576function bottomBarShareUrl(isApp) {
577    var url = location.href;
578
579    if (APP_GB == 'YES24' && IS_NATIVE_APPS && isApp) {
580        goApp('SHARE', url);
581    }
582    else {
583        return encodeURIComponent(url);
584    }
585}
586function showOrHideTopButton() {
587    if (!$("#yesWrap").length) return;
588
589    let processing = false; //진행 여부
590
591    const $toolBtn = $("#toolBtn"); //버튼 DOM 요소 캐싱
592    const wrapOffsetTop = $("#yesWrap").offset().top; //콘텐츠 래핑 영역의 초기 위치 캐싱
593
594    //함수 선언을 바로 실행되는 스크롤 처리 함수로 변경
595    const handleScroll = () => {
596        if (!processing) {
597            processing = true;
598
599            // requestAnimationFrame 호출을 위한 콜백 함수
600            requestAnimationFrame(() => {
601                const scrollPosition = $(window).scrollTop();
602
603                //스크롤 위치에 따라 버튼 활성화/비활성화
604                if (scrollPosition >= wrapOffsetTop + 60) {
605                    $toolBtn.addClass("topBtnAct");
606                } else {
607                    $toolBtn.removeClass("topBtnAct");
608                }
609
610                //다음 스크롤 이벤트를 위해 진행 여부을 풀어줌
611                processing = false;
612            });
613        }
614    };
615
616    return handleScroll;
617}
618//하단 최근본상품 상품번호 조회
619function getBottomButtonRecentGoodsNo() {
620    var sRecentViewGoods = getCookie("RecentViewGoods") !== "" ? decodeURIComponent(getCookie("RecentViewGoods")) : "";
621    var arrRecentViewGoods = sRecentViewGoods.split('`');
622    var sGoodsNo = "0";
623    if (arrRecentViewGoods.length > 0) {
624        sGoodsNo = arrRecentViewGoods[arrRecentViewGoods.length - 1];
625    }
626    return sGoodsNo;
627}
628//크레마클럽 여부
629function isCremaClub() {
630    var sCurrentHost = window.location.href.toLowerCase();
631    var regex = /(bookclub|cremaclub)([-\w]*\.)?yes24\.com/;
632    if (regex.test(sCurrentHost)) {
633        return true;
634    }
635    return false;
636}
637//하단버튼 맨위로 실행
638function sclTopBottomBar() {
639    var target = "#yesWrap";
640    if (isCremaClub()) {
641        target = "#bookClubWrap";
642    }
643    sclTop(target);
644}
645
646// 안드로이드 앱인 경우 '다른 앱으로 공유하기' 호출 함수 변경
647function showSharePopupChk(pageType) {
648    showSharePopup(pageType);
649
650    if (IS_NATIVE_APPS && getMobileOperatingSystem() == "Android") {
651        $("#SharePopup .colCell").attr("onclick", "AndroidShareIntent
651()");
652    }
653}
654
655function AndroidShareIntent() {
656    // 현재 페이지 URL을 포함한 인텐트 URL 생성
657    let andUrlScheme = 'intent://SHARE?url=' + encodeURIComponent(location.href) + '#Intent;scheme=YES24;package=com.yes24.commerce;end';
658    // 인텐트 실행
659    location.href = andUrlScheme;
660}
661
662$(function () {
663    bottomBarInit();
664});
665//뒤로가기로 돌아왔을 때
666window.onpageshow = function (event) {
667    if (event.persisted || (window.performance && window.performance.navigation.type == 2)) {
668        bottomBarInit();
669    }
670};
671
672// 대여기간 정보를 기준으로 만료일(yyyy-MM-dd)을 계산
673function getExpireDate(userTermGB) {
674    var now = new Date();
675
676    // 1. 제한없음 처리
677    if (userTermGB === "제한없음") {
678        return null; // 또는 return "9999-12-31";
679    }
680
681    // 2. 숫자 추출
682    var num = parseInt(userTermGB.replace(/[^0-9]/g, ""), 10);
683
684    // 3. 단위 판별 및 계산
685    if (userTermGB.indexOf("일") > -1) {
686        now.setDate(now.getDate() + num);
687    } else if (userTermGB.indexOf("년") > -1) {
688        now.setFullYear(now.getFullYear() + num);
689    } else {
690        throw new Error("지원하지 않는 형식입니다: " + userTermGB);
691    }
692
693    // 4. yyyy-MM-dd 형식으로 반환
694    var yyyy = now.getFullYear();
695    var mm = (now.getMonth() + 1).toString().padStart(2, '0');
696    var dd = now.getDate().toString().padStart(2, '0');
697    return yyyy + '-' + mm + '-' + dd;
698}
699
700// 오늘 날짜를 "yyyy-MM-dd" 형식의 문자열로 반환
701function getTodayString() {
702    var today = new Date();
703    var yyyy = today.getFullYear();
704    var mm = String(today.getMonth() + 1).padStart(2, '0');
705    var dd = String(today.getDate()).padStart(2, '0');
706    return yyyy + '-' + mm + '-' + dd;
707}
708
709//신상품 탭명 반환
710function getNewProductTabname(tabNo) {
711    var tabName = "주목할 신상품";
712    switch (tabNo) {
713        case 1: tabName = "주목할신상품"; break;
714        case 2: tabName = "새로나온상품"; break;
715    }
716    return tabName;
717}
718
719//베스트셀러 탭명 반환
720function getBestsellerTabname(tabNo) {
721    var tabName = "종합";
722    switch (tabNo) {
723        case 1: tabName = "종합"; break;
724        case 2: tabName = "실시간"; break;
725        case 3: tabName = "특가"; break;
726        case 4: tabName = "일별"; break;
727        case 5: tabName = "월별"; break;
728        case 6: tabName = "주별"; break;
729        case 7: tabName = "스테디"; break;
730        case 8: tabName = "선물하기"; break;
731    }
732    return tabName;
733}
734
735/**
736 * 배송비 정보를 문자열에서 추출하여 금액(원 단위)으로 반환
737 * @param {string} delvText - 배송비 정보가 포함된 문자열 (예: "배송비: 2,500원" 또는 "배송비: 유료")
738 * @returns {number} 배송비 금액(원 단위). 무료일 경우 0, 유료일 경우 해당 금액을 반환
739 * @example
740 * getDelvFee("배송비: 유료"); // 2500
741 * getDelvFee("배송비: 3,300원"); // 3300
742 * getDelvFee("배송비: 무료"); // 0
743 */
744function getDelvFee(delvText) {
745    // 공백 제거 - "배송비:{텍스트}" 형식에 띄어쓰기 상이한 경우 발생 방지
746    const cleanText = delvText.replaceAll(' ', '');
747    // 무료 텍스트 포함만으로 구분 불가 (배송비가 유료이고 "도서 15,000원 이상 무료" 구절 있는 경우 때문)
748    if (cleanText.includes('배송비:유료')) return 2500;
749    // "배송비:{숫자}원" 형태 탐지
750    const match = cleanText.match(/배송비:(\d{1,3}(?:,\d{3})*)원/);
751    if (match) return parseInt(match[1].replace(/,/g, ''), 10);
752    return 0;
753}
754
755/**
756 * 대여기간 문자열을 일(day) 단위의 숫자로 변환하여 반환
757 * @param {string} userTermGB - 대여기간 정보 문자열 (예: "7일", "1년", "제한없음")
758 * @returns {number} 대여기간(일 단위). "제한없음"일 경우 0을 반환.
759 * @example
760 * getRentalDays("7일"); // 7
761 * getRentalDays("1년"); // 365
762 * getRentalDays("제한없음"); // 0
763 */
764function getRentalDays(userTermGB) {
765    // 제한없는 경우, Number 타입 전달해야 하므로 0 전달
766    if (userTermGB === "제한없음") return 0;
767    // 숫자 추출
768    var num = parseInt(userTermGB.replace(/[^0-9]/g, ""), 10);
769    // 일 대여기간 처리
770    if (userTermGB.includes("일")) return num;
771    // 연 대여기간 처리
772    if (userTermGB.includes("년")) return num * 365;
773}
774
775//서비스이용안내 팝업: typeA - 미사용
776//platform: p or m
777function setGuidePopA(platform) {
778    if (getCookie("HideUrgentPopupA1") !== "Y") {
779        var popupHtml = '';
780        if (platform == "p") {
781            if (!$('link[href*="yesPopUp_not.css"]').length) {
782                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css">');
783            }
784            
785            if (!$('#maskYUI').length) {
786                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
787            }
788
789            popupHtml = `
790                <div id="dPop_notPop">
791                    <style>
792                        .yesPopUpArea { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
793                        .yesPopUpArea { flex-direction: column;flex-wrap: nowrap;justify-content: center;align-items: center; }
794                        .yesPopUpArea { position:fixed;left:0;top:0;right:0;bottom:0;z-index:998001; }
795                        .yesPopUpArea .yesPopUp { position:relative;
795left:auto; }
796                        .yesPopUpArea .yesPopUp { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
797                        .yesPopUpArea .yesPopUp { flex-direction: column;flex-wrap: nowrap; }
798                        .yesPopUpArea .yesPopUp { max-height:calc(100vh - 200px); }
799                        .yesPopUpArea .yesPopUp .popYUIArea { flex:1;box-sizing:border-box;padding-top:30px;max-height:calc(100vh - 250px); }
800                        .yesPopUpArea .yesPopUp .popYUIArea .popYUI_cont { box-sizing:border-box;margin:0;padding:30px;padding-top:0;height:100%;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;-webkit-overflow-scrolling:touch; }
801                        .yesPopUpArea .yesPopUp .popYUIMnu { flex-shrink:0; }
802                    </style>
803                        <div class="yesPopUpArea">
804                            <div class="yesPopUp yesPopUpNot bgWhite">
805                                <div class="popYUIArea" style="width:550px;">
806                                    <div class="popYUI_cont">
807                                        <div>
808                                        </div>
809                                        <div class="notCon">
810                                            <p class="txt_tit">예스24 서비스 및 1차 보상 안내</p>
811                                            <p class="txt_des txt_desM">안녕하세요, 예스24 입니다.</p>
812                                            <p class="txt_des txt_desM">6월 13일 금요일 부로 예스24 도서 및 티켓 서비스가 재개되어 안내드립니다.</p>
813                                            <p class="txt_des txt_desM">현재 이용 가능한 서비스는 아래와 같습니다.</p>
814                                            <dl class="contTableDl contTableDl_act mgt20">
815                                                <dt>이용 가능 서비스</dt>
816                                                <dd>
817                                                    <ul class="yesAlertLi alertLi">
818                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>도서 및 음반/DVD, 문구/GIFT, eBook, 클래스24, 업체배송 및 중고 상품 구매 (카드, 간편결제, 무통장 등 결제 가능)</li>
819                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>eBook 구매 내역, 내 서재를 비롯한 전체 서비스</li>
820                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>전자도서관, 크레마클럽 전체 서비스</li>
821                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>티켓 서비스 (예매 및 취소, 공연 관람)</li>
822                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>나의 주문 내역 : 주문 및 반품/교환, 취소</li>
823                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>YES포인트/머니/상품권/쿠폰 등 나의 계좌 정보 조회</li>
824                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>1:1 문의</li>
825                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>SCM/USCM</li>
826                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>매장 정상 영업</li>
827                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>채널예스</li>
828                                                    </ul>
829                                                </dd>
830                                            </dl>
831                                            <dl class="contTableDl mgt10">
832                                                <dt>복구 중인 서비스</dt>
833                                                <dd>
834                                                    <ul class="yesAlertLi alertLi">
835                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>사락, 영중문몰</li>
836                                                        <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>마이페이지 : 나의 리뷰/한줄평</li>
837                                                    </ul>
838                                                </dd>
839                                            </dl>
840                                            <p class="txt_des txt_desM mgt20">또한 직접적 피해를 입으신 회원에 대한 보상안을 공지사항에 게재하였습니다.</p>
841                                            <div class="mgt20">
842                                                    <a href="https://www.yes24.com/Mall/Help/Notice?seq=2017" class="btnC m_size btn_blue btn_wSizeF">
843                                                    <span class="bWrap"><em class="txt">공지사항 > 1차 보상안</em></span>
844                                                </a>
845                                            </div>
846                                            <p class="txt_des txt_desM mgt20">전체 회원에 대한 보상안은 마련 중이며, 구체적인 안이 확정되는 대로 자사 홈페이지에 안내드리도록 하겠습니다.</p>
847                                            <p class="txt_des txt_desM mgt20">지난 6월 9일 월요일부터 발생한 서비스 장애로 큰 불편을 겪으신 모든 분들께 다시 한 번 사과드립니다.</p>
848                                            <p class="txt_des txt_desM mgt20">예스24는 재발 방지를 위해 보안 점검과 시스템 관리 체계를 강화하고, 예방 조치에 만전을 기하겠습니다.</p>
849                                            <p class="txt_des txt_desM mgt20"><strong class="txC_black">관련 문의는 예스24 고객센터를 통해 문의 부탁드립니다.</strong>             
850                                        </p></div>
851                                    </div>
852                                </div>
853                                <div class="popYUIMnu">
854                                    <ul class="clearfix">
855                                        <li><a href="javascript:void(0);" onclick="setTodayUrgentClose('A1');">오늘은 그만 보기</a></li>
856                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup();">닫기</a></li>
857                                    </ul>
858                                </div>
859                            </div>
860                        </div>
861                    </div>`;
862        }
863        else {
864            popupHtml = `
865                <section id="dPop_notPop">
866                    <div class="yNotPop" style="display:block">
867                        <div class="notPopWrap">
868                            <div class="notPopGrp">
869                                <div class="notPopTxt">
870                                    <div class="popTxtCont">
871                                        <p class="txt_tit">예스24 서비스 및 1차 보상 안내</p>
872                                        <p class="txt_des txt_desM">안녕하세요, 예스24 입니다.</p>
873                                        <p class="txt_des txt_desM">6월 13일 금요일 부로 예스24 도서 및 티켓 서비스가 재개되어 안내드립니다.</p>
874                                        <p class="txt_des txt_desM">현재 이용 가능한 서비스는 아래와 같습니다.</p>
875                                        <dl class="contTableDl contTableDl_act mgt20">
876                                            <dt>이용 가능 서비스</dt>
877                                            <dd>
878                                                <ul class="yesAlertLi alertLi">
879                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>도서 및 음반/DVD, 문구/GIFT, eBook, 클래스24, 업체배송 및 중고 상품 구매 (카드, 간편결제, 무통장 등 결제 가능)</li>
880                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>eBook 구매 내역, 내 서재를 비롯한 전체 서비스</li>
881                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>전자도서관, 크레마클럽 전체 서비스</li>
882                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>티켓 서비스 (예매 및 취소, 공연 관람)</li>
883                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>나의 주문 내역 : 주문 및 반품/교환, 취소</li>
884                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>YES포인트/머니/상품권/쿠폰 등 나의 계좌 정보 조회</li>
885                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>1:1 문의</li>
886                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>SCM/USCM</li>
887                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>매장 정상 영업</li>
888                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>채널예스</li>
889                                                </ul>
890                                            </dd>
891                                        </dl>
892                                        <dl class="contTableDl mgt10">
893                                            <dt>복구 중인 서비스</dt>
894                                            <dd>
895                                                <ul class="yesAlertLi alertLi">
896                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>사락, 영중문몰</li>
897                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>마이페이지 : 나의 리뷰/한줄평</li>
898                                                </ul>
899                                            </dd>
900                                        </dl>
901                                        <p class="txt_des txt_desM mgt20">또한 직접적 피해를 입으신 회원에 대한 보상안을 공지사항에 게재하였습니다.</p>
902                                        <div class="mgt20">
903                                            <a href="https://m.yes24.com/Help/Notice?seq=2017" class="btn_c l_size btn_act02 btn_wSizeF"><em class="txt">공지사항 > 1차 보상안</em></a>
904                                        </div>
905                                        <p class="txt_des txt_desM mgt20">전체 회원에 대한 보상안은 마련 중이며, 구체적인 안이 확정되는 대로 자사 홈페이지에 안내드리도록 하겠습니다.</p>
906                                        <p class="txt_des txt_desM mgt20">지난 6월 9일 월요일부터 발생한 서비스 장애로 큰 불편을 겪으신 모든 분들께 다시 한 번 사과드립니다.</p>
907                                        <p class="txt_des txt_desM mgt20">예스24는 재발 방지를 위해 보안 점검과 시스템 관리 체계를 강화하고, 예방 조치에 만전을 기하겠습니다.</p>
908                                        <p class="txt_des txt_desM mgt20"><strong class="txC_black">관련 문의는 예스24 고객센터를 통해 문의 부탁드립니다.</strong></p>
909                                    </div>
910                                </div>
911                                <div class="notPopMnu">
912                                    <ul>
913                                        <li><a href="javascript:void(0);" onclick="setTodayUrgentClose('A1');">오늘은 그만 보기</a></li>
914                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup();">닫기</a></li>
915                                    </ul>
916                                </div>
917                            </div>
918                        </div>
919                    </div>
920                    <div class="yNotPopMask" style="display:block"></div>
921                </section>`;
922        }
923        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
924        //$('#' + appendId).append(popupHtml);
925    }
926}
927
928//서비스이용안내 팝업: typeB - 미사용
929function setGuidePopB(platform) {
930    if (getCookie("HideUrgentPopupB1") !== "Y") {
931        var popupHtml = '';
932        if (platform == "p") {
933            if (!$('link[href*="yesPopUp_not.css"]').length) {
934                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css">');
935            }
936            
937            if (!$('#maskYUI').length) {
938                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
939            }
940
941            popupHtml = `
942                <div id="dPop_notPop">
943                    <div class="yesPopUp yesPopUpNot bgWhite" style="position:fixed;margin-left:-275px;margin-top:-280px;left:50%;
943top:50%;">
944                        <div class="popYUIArea" style="width:550px;">
945                            <div class="popYUI_cont">
946                                <div class="notCon">
947                                    <p class="txt_tit">서비스 이용에 대해 안내 드립니다.</p>
948                                    <p class="txt_des">먼저, 이번 서비스 장애로 이용에 큰 불편을 드린 점 진심으로 사과드립니다.</p>
949                                    <p class="txt_des">
950                                        서비스 정상화를 위해 순차적인 복구 작업을 진행하고 있으며,
951                                        빠른 문제 해결과 완벽한 정상화를 위해 최선을 다해 조속히 안정된 서비스로 찾아뵐 수 있도록 노력하겠습니다.
952                                    </p>
953                                    <p class="txt_des">다시 한 번 서비스 이용에 불편을 드려 진심으로 사과의 말씀 드립니다.</p>
954                                </div>
955                                <dl class="notConDl">
956                                    <dt>이용 가능 서비스</dt>
957                                    <dd>
958                                        <ul class="yesAlertLi alertLi">
959                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>도서 및 음반/DVD, 문구/GIFT, eBook, 클래스24, 업체배송 및 중고 상품 구매 (카드, 간편결제, 무통장 등 결제 가능)</li>
960                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>eBook 구매 내역, 내 서재를 비롯한 전체 서비스</li>
961                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>전자도서관, 크레마클럽 전체 서비스</li>
962                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>티켓 서비스 (예매 및 취소, 공연 관람)</li>
963                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>나의 주문 내역 : 주문 및 반품/교환, 취소</li>
964                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>YES포인트/머니/상품권/쿠폰 등 나의 계좌 정보 조회</li>
965                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>1:1 문의</li>
966                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>SCM/USCM</li>
967                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>매장 정상 영업</li>
968                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>채널예스</li>
969                                        </ul>
970                                    </dd>
971                                </dl>
972                                <dl class="notConDl">
973                                    <dt>이용 불가 서비스</dt>
974                                    <dd>
975                                        <ul class="yesAlertLi alertLi">
976                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>사락, 영중문몰</li>
977                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>마이페이지: 나의 리뷰/한줄평</li>
978                                        </ul>
979                                    </dd>
980                                </dl>
981                            </div>
982                        </div>
983                        <div class="popYUIMnu">
984                            <ul class="clearfix">
985                                <li><a href="javascript:void(0);" onclick="setTodayUrgentClose('B1');">오늘은 그만 보기</a></li>
986                                <li><a href="javascript:void(0);" onclick="closeUrgentPopup();">닫기</a></li>
987                            </ul>
988                        </div>
989                    </div>
990                </div>`;
991        }
992        else {
993            popupHtml = `
994                <section id="dPop_notPop">
995                    <div class="yNotPop" style="display:block">
996                        <div class="notPopWrap">
997                            <div class="notPopGrp">
998                                <div class="notPopTxt">
999                                    <div class="popTxtCont">
1000                                        <p class="txt_tit">서비스 이용에 대해 안내 드립니다.</p>
1001                                        <p class="txt_des txt_desM">먼저, 이번 서비스 장애로 이용에 큰 불편을 드린 점 진심으로 사과드립니다.</p>
1002                                        <p class="txt_des txt_desM">
1003                                            서비스 정상화를 위해 순차적인 복구 작업을 진행하고 있으며,
1004                                            빠른 문제 해결과 완벽한 정상화를 위해 최선을 다해 조속히 안정된 서비스로 찾아뵐 수 있도록 노력하겠습니다.
1005                                        </p>
1006                                        <p class="txt_des txt_desM">다시 한 번 서비스 이용에 불편을 드려 진심으로 사과의 말씀 드립니다.</p>
1007                                        <dl class="contTableDl contTableDl_act mgt20">
1008                                            <dt>이용 가능 서비스</dt>
1009                                            <dd>
1010                                                <ul class="yesAlertLi alertLi">
1011                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>도서 및 음반/DVD, 문구/GIFT, eBook, 클래스24, 업체배송 및 중고 상품 구매 (카드, 간편결제, 무통장 등 결제 가능)</li>
1012                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>eBook 구매 내역, 내 서재를 비롯한 전체 서비스</li>
1013                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>YES포인트/머니/상품권/쿠폰 등 나의 계좌 정보 조회</li>
1014                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>전자도서관, 크레마클럽 전체 서비스</li>
1015                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>티켓 서비스 (예매 및 취소, 공연 관람)</li>
1016                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>나의 주문 내역 : 주문 및 반품/교환, 취소</li>
1017                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>1:1 문의</li>
1018                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>SCM/USCM</li>
1019                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>매장 정상 영업</li>
1020                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>채널예스</li>
1021                                                </ul>
1022                                            </dd>
1023                                        </dl>
1024                                        <dl class="contTableDl mgt20">
1025                                            <dt>이용 불가 서비스</dt>
1026                                            <dd>
1027                                                <ul class="yesAlertLi alertLi">
1028                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>사락, 영중문몰</li>
1029                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>마이페이지: 나의 리뷰/한줄평</li>
1030                                                </ul>
1031                                            </dd>
1032                                        </dl>
1033                                    </div>
1034                                </div>
1035                                <div class="notPopMnu">
1036                                    <ul>
1037                                        <li><a href="javascript:void(0);" onclick="setTodayUrgentClose('B1');">오늘은 그만 보기</a></li>
1038                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup();">닫기</a></li>
1039                                    </ul>
1040                                </div>
1041                            </div>
1042                        </div>
1043                    </div>
1044                    <div class="yNotPopMask" style="display:block"></div>
1045                </section>`;
1046        }
1047        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
1048        $('#' + appendId).append(popupHtml);
1049    }
1050}
1051
1052//서비스이용안내 팝업: typeC - 미사용
1053function setGuidePopC(platform) {
1054
1055}
1056
1057//서비스이용안내 팝업: typeD - 미사용
1058function setGuidePopD(platform) {
1059    if (getCookie("HideUrgentPopupD") !== "Y") {
1060        var popupHtml = '';
1061        if (platform == "p") {
1062            if (!$('link[href*="yesPopUp_not.css"]').length) {
1063                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css">');
1064            }
1065            
1066            if (!$('#maskYUI').length) {
1067                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
1068            }
1069
1070            popupHtml = `
1071                <div id="dPop_notPop">
1072                    <div class="yesPopUp yesPopUpNot bgWhite" style="position:fixed;margin-left:-275px;margin-top:-280px;left:50%;
1072top:50%;">
1073                        <div class="popYUIArea" style="width:550px;">
1074                            <div class="popYUI_cont">
1075                                <div class="notCon">
1076                                    <p class="txt_tit">구매/취소 제한 상품 안내</p>
1077                                    <p class="txt_des">
1078                                        해당 상품은 서비스 복구 작업으로 인해 구매가 일시적으로 제한되었습니다.
1079                                    </p>
1080                                    <p class="txt_des">
1081                                        조속히 안정된 서비스로 찾아뵐 수 있도록 최선을 다하겠습니다.
1082                                        불편을 드려 대단히 죄송합니다.
1083                                    </p>
1084                                </div>
1085                                <dl class="notConDl">
1086                                    <dt>구매/취소 불가 상품</dt>
1087                                    <dd>
1088                                        <ul class="yesAlertLi alertLi">
1089                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>중고(C2C, 매장ON)</li>
1090                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>업체배송 상품</li>
1091                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>테이크북(매장) 상품</li>
1092                                        </ul>
1093                                    </dd>
1094                                </dl>
1095                            </div>
1096                        </div>
1097                        <div class="popYUIMnu">
1098                            <ul class="clearfix">
1099                                <li><a href="javascript:void(0);" onclick="closeUrgentPopup();">확인</a></li>
1100                            </ul>
1101                        </div>
1102                    </div>
1103                </div>`;
1104        }
1105        else {
1106            popupHtml = `
1107                <section id="dPop_notPop">
1108                    <div class="yNotPop" style="display:block">
1109                        <div class="notPopWrap">
1110                            <div class="notPopGrp">
1111                                <div class="notPopTxt">
1112                                    <div class="popTxtCont">
1113                                        <p class="txt_tit">구매/취소 제한 상품 안내</p>
1114                                        <p class="txt_des txt_desM">
1115                                            해당 상품은 서비스 복구 작업으로 인해 구매가 일시적으로 제한되었습니다.
1116                                        </p>
1117                                        <p class="txt_des txt_desM">
1118                                            조속히 안정된 서비스로 찾아뵐 수 있도록 최선을 다하겠습니다.
1119                                            불편을 드려 대단히 죄송합니다.
1120                                        </p>
1121                                        <dl class="contTableDl mgt20">
1122                                            <dt>구매/취소 불가 상품</dt>
1123                                            <dd>
1124                                                <ul class="yesAlertLi alertLi">
1125                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>중고(C2C, 매장ON)</li>
1126                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>업체배송 상품</li>
1127                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>테이크북(매장) 상품</li>
1128                                                </ul>
1129                                            </dd>
1130                                        </dl>
1131                                    </div>
1132                                </div>
1133                                <div class="notPopMnu">
1134                                    <ul>
1135                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup();">닫기</a></li>
1136                                    </ul>
1137                                </div>
1138                            </div>
1139                        </div>
1140                    </div>
1141                    <div class="yNotPopMask" style="display:block"></div>
1142                </section>`;
1143        }
1144        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
1145        $('#' + appendId).append(popupHtml);
1146    }
1147}
1148
1149//서비스이용안내 팝업: typeE - 미사용
1150function setGuidePopE(platform) {
1151    if (getCookie("HideUrgentPopupE") !== "Y") {
1152        var popupHtml = '';
1153        if (platform == "p") {
1154            if (!$('link[href*="yesPopUp_not.css"]').length) {
1155                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css">');
1156            }
1157            
1158            if (!$('#maskYUI').length) {
1159                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
1160            }
1161
1162            popupHtml = `
1163                <div id="dPop_notPop">
1164                    <div class="yesPopUp yesPopUpNot bgWhite" style="position:fixed;margin-left:-275px;margin-top:-280px;left:50%;
1164top:50%;">
1165                        <div class="popYUIArea" style="width:550px;">
1166                            <div class="popYUI_cont">
1167                                <div class="notCon">
1168                                    <p class="txt_tit">서비스 이용 안내</p>
1169                                    <p class="txt_des">
1170                                        먼저, eBook 서비스를 이용해 주시는 고객 여러분께 예상치 못한 불편을 드린 점 진심으로 사과드립니다. 
1171                                    </p>
1172                                    <p class="txt_des">
1173                                        현재 eBook 서비스는 복구 작업이 진행 중이며 빠른 시일내에 다시 이용하실 수 있도록 하겠습니다. 
1174                                    </p>
1175                                    <p class="txt_des">
1176                                        고객님께서 보유하신 eBook과 이용 기록 등은 모두 안전하게 보호되고 있습니다. 
1177                                    </p>
1178                                    <p class="txt_des">
1179                                        믿고 기다려주셔서 감사드리며, 하루빨리 안정된 서비스로 인사드릴 수 있도록 최선을 다하겠습니다.
1180                                    </p>
1181                                </div>
1182                                <dl class="notConDl">
1183                                    <dt>서비스 이용 불가 항목</dt>
1184                                    <dd>
1185                                        <ul class="yesAlertLi alertLi">
1186                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>eBook (구매, 열람, 다운로드, eBook App 등 전체 서비스)</li>
1187                                            <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>크레마클럽 (가입, 해지, 정기결제, 이용권 등 전체 서비스)</li>
1188                                        </ul>
1189                                    </dd>
1190                                </dl>
1191                            </div>
1192                        </div>
1193                        <div class="popYUIMnu">
1194                            <ul class="clearfix">
1195                                <li><a href="javascript:void(0);" onclick="setTodayUrgentClose('E');">오늘은 그만 보기</a></li>
1196                                <li><a href="javascript:void(0);" onclick="closeUrgentPopup();">닫기</a></li>
1197                            </ul>
1198                        </div>
1199                    </div>
1200                </div>`;
1201        }
1202        else {
1203            popupHtml = `
1204                <section id="dPop_notPop">
1205                    <div class="yNotPop" style="display:block">
1206                        <div class="notPopWrap">
1207                            <div class="notPopGrp">
1208                                <div class="notPopTxt">
1209                                    <div class="popTxtCont">
1210                                        <p class="txt_tit">서비스 이용 안내</p>
1211                                        <p class="txt_des txt_desM">
1212                                            먼저, eBook 서비스를 이용해 주시는 고객 여러분께 예상치 못한 불편을 드린 점 진심으로 사과드립니다. 
1213                                        </p>
1214                                        <p class="txt_des txt_desM">
1215                                            현재 eBook 서비스는 복구 작업이 진행 중이며 빠른 시일내에 다시 이용하실 수 있도록 하겠습니다. 
1216                                        </p>
1217                                        <p class="txt_des txt_desM">
1218                                            고객님께서 보유하신 eBook과 이용 기록 등은 모두 안전하게 보호되고 있습니다. 
1219                                        </p>
1220                                        <p class="txt_des txt_desM">
1221                                            믿고 기다려주셔서 감사드리며, 하루빨리 안정된 서비스로 인사드릴 수 있도록 최선을 다하겠습니다.
1222                                        </p>
1223                                        <dl class="contTableDl mgt20">
1224                                            <dt>서비스 이용 불가 항목</dt>
1225                                            <dd>
1226                                                <ul class="yesAlertLi alertLi">
1227                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>eBook (구매, 열람, 다운로드, eBook App 등 전체 서비스)</li>
1228                                                    <li><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>크레마클럽 (가입, 해지, 정기결제, 이용권 등 전체 서비스)</li>
1229                                                </ul>
1230                                            </dd>
1231                                        </dl>
1232                                    </div>
1233                                </div>
1234                                <div class="notPopMnu">
1235                                    <ul>
1236                                        <li><a href="javascript:void(0);" onclick="setTodayUrgentClose('E');">오늘은 그만 보기</a></li>
1237                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup();">닫기</a></li>
1238                                    </ul>
1239                                </div>
1240                            </div>
1241                        </div>
1242                    </div>
1243                    <div class="yNotPopMask" style="display:block"></div>
1244                </section>`;
1245        }
1246        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
1247        $('#' + appendId).append(popupHtml);
1248    }
1249}
1250
1251//서비스이용안내 팝업: typeH - 미사용
1252function setGuidePopH(platform) {
1253    var guideType = 'H3';
1254    if (getCookie("HideUrgentPopup" + guideType) !== "Y") {
1255        var popupHtml = '';
1256        if (platform == "p") {
1257            if (!$('link[href*="yesPopUp_not.css"]').length) {
1258                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css">');
1259            }
1260            
1261            if (!$('#maskYUI').length) {
1262                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
1263            }
1264
1265            popupHtml = `
1266                <div id="dPop_notPop_${guideType}">
1267                    <div class="yesPopUp yesPopUpNot bgWhite" style="position:fixed;margin-left:-275px;margin-top: -270px;left:50%;
1267top:50%;">
1268                        <div class="popYUIArea" style="width:550px;">
1269                            <div class="popYUI_cont">
1270                                <div class="notCon">
1271                                    <p class="txt_tit">크레마클럽 서비스 중단에 따른 이용 기간 연장 안내</p>
1272                                    <p class="txt_des">안녕하세요, 예스24 크레마클럽입니다.</p>
1273                                    <p class="txt_des">6월 9일부터 13일까지 크레마클럽 서비스 이용이 불가하여 불편을 드리게 된 점에 대해 깊은 사과의 말씀을 드립니다.</p>
1274                                    <p class="txt_des">이에 대한 사과의 마음을 담아 크레마클럽 회원님들의 이용 기간을 30일 자동 연장 조치하였습니다.</p>
1275                                    <p class="txt_des">다시 한번 이용에 불편을 겪으신 회원님들께 죄송하다는 말씀을 드리며, 앞으로 더욱 안정적인 서비스와 향상된 사용자 경험을 제공할 수 있도록 최선을 다하겠습니다.</p>
1276                                    <p class="txt_des">감사합니다.</p>
1277                                    <p class="txt_des">예스24 크레마클럽 드림</p>
1278                                    <p class="txt_des">
1279                                        ※ 연장된 이용 기간은 크레마클럽 사이트 로그인 후 상단 검색창 옆 아이콘을 클릭하여 확인 가능합니다.
1280                                        <br>※ 6월 9일부터 복구일까지 해지를 예약하지 않은 정기결제 예정 회원의 경우, 시스템 이슈로 인해 자동 해지 처리되었으며, 이에 대한 조치로 30일간 무료 이용이 가능하도록 하였습니다.
1281                                        <br>※ B2B 회원은 서비스 정책에 따라 위 대상에 포함되지 않았으며, 99요금제 회원은 별도 안내 예정입니다.
1282                                    </p>
1283                                </div>
1284                            </div>
1285                        </div>
1286                        <div class="popYUIMnu">
1287                            <ul class="clearfix">
1288                                <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1289                                <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1290                            </ul>
1291                        </div>
1292                    </div>
1293                </div>`;
1294        }
1295        else {
1296            popupHtml = `
1297                <section id="dPop_notPop_${guideType}">
1298                    <div class="yNotPop" style="display:block">
1299                        <div class="notPopWrap">
1300                            <div class="notPopGrp">
1301                                <div class="notPopTxt">
1302                                <div class="popTxtCont">
1303                                        <p class="txt_tit">크레마클럽 서비스 중단에 따른 이용 기간 연장 안내</p>
1304                                        <p class="txt_des txt_desM">안녕하세요, 예스24 크레마클럽입니다.</p>
1305                                        <p class="txt_des txt_desM">6월 9일부터 13일까지 크레마클럽 서비스 이용이 불가하여 불편을 드리게 된 점에 대해 깊은 사과의 말씀을 드립니다.</p>
1306                                        <p class="txt_des txt_desM">이에 대한 사과의 마음을 담아 크레마클럽 회원님들의 이용 기간을 30일 자동 연장 조치하였습니다.</p>
1307                                        <p class="txt_des txt_desM">다시 한번 이용에 불편을 겪으신 회원님들께 죄송하다는 말씀을 드리며, 앞으로 더욱 안정적인 서비스와 향상된 사용자 경험을 제공할 수 있도록 최선을 다하겠습니다.</p>
1308                                        <p class="txt_des txt_desM">감사합니다.</p>
1309                                        <p class="txt_des txt_desM">예스24 크레마클럽 드림</p>
1310                                        <p class="txt_des txt_desM">
1311                                            ※ 연장된 이용 기간은 크레마클럽 사이트 로그인 후 상단 ☰ 버튼을 클릭하여 확인 가능합니다.
1312                                            <br>※ 6월 9일부터 복구일까지 해지를 예약하지 않은 정기결제 예정 회원의 경우, 시스템 이슈로 인해 자동 해지 처리되었으며, 이에 대한 조치로 30일간 무료 이용이 가능하도록 하였습니다.
1313                                            <br>※ B2B 회원은 서비스 정책에 따라 위 대상에 포함되지 않았으며, 99요금제 회원은 별도 안내 예정입니다.    
1314                                        </p>
1315                                    </div>
1316                                </div>
1317                                <div class="notPopMnu">
1318                                    <ul>
1319                                        <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1320                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1321                                    </ul>
1322                                </div>
1323                            </div>
1324                        </div>
1325                    </div>
1326                    <div class="yNotPopMask" style="display:block"></div>
1327                </section>`;
1328        }
1329        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
1330        $('#' + appendId).append(popupHtml);
1331    }
1332}
1333
1334//서비스이용안내 팝업: typeJ - 미사용
1335function setGuidePopJ(platform, page) {
1336    var guideType = 'J2';
1337    if (getCookie("HideUrgentPopup" + guideType) !== "Y") {
1338        var popupHtml = '';
1339        if (platform == "p") {
1340            if (!$('link[href*="yesPopUp_not.css"]').length) {
1341                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css?v=20250618">');
1342            }
1343            
1344            if (!$('#maskYUI').length) {
1345                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
1346            }
1347
1348            popupHtml = `
1349                <div id="dPop_notPop_${guideType}">
1350                    <style>
1351                        .yesPopUpArea { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1352                        .yesPopUpArea { flex-direction: column;flex-wrap: nowrap;justify-content: center;align-items: center; }
1353                        .yesPopUpArea { position:fixed;left:0;top:0;right:0;bottom:0;z-index:998001; }
1354                        .yesPopUpArea .yesPopUp { position:relative;
1354left:auto; }
1355                        .yesPopUpArea .yesPopUp { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1356                        .yesPopUpArea .yesPopUp { flex-direction: column;flex-wrap: nowrap; }
1357                        .yesPopUpArea .yesPopUp { max-height:calc(100vh - 200px); }
1358                        .yesPopUpArea .yesPopUp .popYUIArea { flex:1;box-sizing:border-box;padding-top:30px;max-height:calc(100vh - 250px); }
1359                        .yesPopUpArea .yesPopUp .popYUIArea .popYUI_cont { box-sizing:border-box;margin:0;padding:30px;padding-top:0;height:100%;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;-webkit-overflow-scrolling:touch; }
1360                        .yesPopUpArea .yesPopUp .popYUIMnu { flex-shrink:0; }
1361                    </style>
1362                    <div class="yesPopUpArea">
1363                        <div class="yesPopUp yesPopUpNot bgWhite">
1364                            <div class="popYUIArea" style="width:550px;">
1365                                <div class="popYUI_cont">
1366                                    <div class="notCon">
1367                                        <p class="txt_tit">예스24 랜섬웨어 장애 사고 공식 사과문</p>
1368                                        <p class="txt_des txt_desM"><strong class="txC_black">고객 여러분께 진심으로 사과드립니다.</strong></p>
1369                                        <p class="txt_des txt_desM">2025년 6월 9일, 예스24는 외부 세력의 랜섬웨어 공격으로 인해 전사 시스템이 마비되며 서비스 접속이 중단되는 사고를 겪었습니다. 이로 인해 도서 주문, 전자책 열람, 공연 예매 등 고객 여러분의 소중한 일상 속 활동이 멈추는 불편과 불안을 초래했습니다. 예스24는 그 누구보다 이 불편함의 무게를 통감하고 있습니다. 이번 사고로 불편을 겪으신 고객님들과 협력사분들을 비롯한 모든 분들에게 머리 숙여 깊이 사과드립니다. 예스24는 고객의 신뢰 위에서 성장해 온 플랫폼입니다. 이번 사고로 인해 그 신뢰가 흔들린 점을 무겁게 받아들이며, 현재 모든 역량을 동원해 피해 복구와 신뢰 회복에 전념하고 있습니다.</p>
1370                                        <p class="txt_des txt_desM mgt20"><strong class="txC_black">사고 경위 및 복구 현황</strong></p>
1371                                        <p class="txt_des txt_desM">이번 사태는 외부 랜섬웨어 공격으로 인해 발생한 시스템 장애 사고이며, 예스24는 책임 있는 플랫폼 사업자로서 서비스 복구와 보안 점검에 온 힘을 기울이고 있습니다. 공격 직후, 예스24는 내부 분석과 복구를 최우선으로 대응하는 한편, 정부 유관기관과 협조하여 조사에 성실히 응하고 있습니다. 사고 발생 직후 적법한 신고 등을 진행했으나, 랜섬웨어 공격이라는 특수성상 해커가 외부 반응을 감시하거나 추가 위협을 가할 수 있어서 대외적으로 정보 공개 수위와 시점을 신중하게 접근할 수밖에 없었던 점 양해 부탁드립니다. 그럼에도 고객 여러분께 정확한 정보를 더 빠르고 올바르게 전해 드리지 못한 점에 대해서 다시 한 번 사과드립니다. 앞으로는 더욱 투명하고 일관된 커뮤니케이션을 위해 최선을 다하겠습니다. 도서 및 음반, 문구, eBook 등 상품 구매와 티켓 서비스, 주문 결제 등 핵심 서비스는 복구가 완료되었으며, 일부 서비스는 순차적으로 최선을 다해 복구 중입니다.</p>
1372                                        <p class="txt_des txt_desM mgt20"><strong class="txC_black">고객 피해 보상과 회복 조치</strong></p>
1373                                        <p class="txt_des txt_desM">예스24는 서비스 중단으로 불편을 겪으신 고객 여러분께 서비스 유형별로 적용 가능한 보상 기준을 마련하여, 직접적 피해를 입으신 고객분들 대상으로 16일 1차 보상안을 공지하였고 사이트를 이용하고 계신 전체 회원을 대상으로 한 2차 보상안을 추가 안내드립니다.</p>
1374                                        <div class="btn_row mgt20">
1375                                            <span><a href="https://www.yes24.com/Mall/Help/Notice?seq=2017" class="btnC m_size btn_blue btn_wSizeF"><span class="bWrap"><em class="txt">1차 보상안</em></span></a></span>
1376                                            <span><a href="https://www.yes24.com/Mall/Help/Notice?seq=2019" class="btnC m_size btn_blue btn_wSizeF"><span class="bWrap"><em class="txt">2차 보상안</em></span></a></span>
1377                                        </div>
1378                                        <p class="txt_des txt_desM mgt20"><strong class="txC_black">재발 방지 및 보안 강화 방안</strong></p>
1379                                        <p class="txt_des txt_desM">예스24는 정부 유관기관(KISA, 개인정보보호위원회) 및 외부 보안 전문가들과 협력하여 사고 원인 조사와 보안 진단을 병행하고 있으며, 이후 유관기관의 조사 결과에 대해서도 투명하게 공개하겠습니다. 또한 이번 사고를 계기로 보안 체계를 원점에서 재점검할 예정입니다. 외부 보안 자문단을 도입하고, 보안 예산을 확대하여 시스템 설계부터 운영 전반까지 플랫폼의 신뢰도와 복원력을 강화하겠습니다. 아울러 정부 및 업계와 협력하여 더 안전한 디지털 생태계 조성을 위한 제도 개선 논의에도 적극 참여하고, 사회적 역할을 다하는 책임 있는 기업이 되겠습니다. 고객 여러분의 신뢰를 다시 쌓아가기 위한 이 과정에 진심을 담아 끝까지 책임을 다할 것을 약속드립니다. 다시 한 번 불편을 겪으신 모든 분들에게 고개 숙여 사과드립니다.</p>
1380                                        <p class="txt_des txt_desM mgt20">2025년 6월 16일</p>
1381                                        <p class="txt_des txt_desM mgt5"><strong class="txC_black">예스24 대표이사 김석환, 최세라 올림</strong></p>
1382                                    </div>
1383                                </div>
1384                            </div>
1385                            <div class="popYUIMnu">
1386                                <ul class="clearfix">
1387                                    <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1388                                    <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1389                                </ul>
1390                            </div>
1391                        </div>
1392                    </div>
1393                </div>`;
1394        }
1395        else {
1396            popupHtml = `
1397                <section id="dPop_notPop_${guideType}">
1398                    <div class="yNotPop" style="display:block">
1399                        <div class="notPopWrap">
1400                            <div class="notPopGrp">
1401                                <div class="notPopTxt">
1402                                    <div class="popTxtCont">
1403                                        <p class="txt_tit">예스24 랜섬웨어 장애 사고 공식 사과문</p>
1404                                        <p class="txt_des txt_desM"><strong class="txC_black">고객 여러분께 진심으로 사과드립니다.</strong></p>
1405                                        <p class="txt_des txt_desM">2025년 6월 9일, 예스24는 외부 세력의 랜섬웨어 공격으로 인해 전사 시스템이 마비되며 서비스 접속이 중단되는 사고를 겪었습니다. 이로 인해 도서 주문, 전자책 열람, 공연 예매 등 고객 여러분의 소중한 일상 속 활동이 멈추는 불편과 불안을 초래했습니다. 예스24는 그 누구보다 이 불편함의 무게를 통감하고 있습니다. 이번 사고로 불편을 겪으신 고객님들과 협력사분들을 비롯한 모든 분들에게 머리 숙여 깊이 사과드립니다. 예스24는 고객의 신뢰 위에서 성장해 온 플랫폼입니다. 이번 사고로 인해 그 신뢰가 흔들린 점을 무겁게 받아들이며, 현재 모든 역량을 동원해 피해 복구와 신뢰 회복에 전념하고 있습니다.</p>
1406                                        <p class="txt_des txt_desM mgt20"><strong class="txC_black">사고 경위 및 복구 현황</strong></p>
1407                                        <p class="txt_des txt_desM">이번 사태는 외부 랜섬웨어 공격으로 인해 발생한 시스템 장애 사고이며, 예스24는 책임 있는 플랫폼 사업자로서 서비스 복구와 보안 점검에 온 힘을 기울이고 있습니다. 공격 직후, 예스24는 내부 분석과 복구를 최우선으로 대응하는 한편, 정부 유관기관과 협조하여 조사에 성실히 응하고 있습니다. 사고 발생 직후 적법한 신고 등을 진행했으나, 랜섬웨어 공격이라는 특수성상 해커가 외부 반응을 감시하거나 추가 위협을 가할 수 있어서 대외적으로 정보 공개 수위와 시점을 신중하게 접근할 수밖에 없었던 점 양해 부탁드립니다. 그럼에도 고객 여러분께 정확한 정보를 더 빠르고 올바르게 전해 드리지 못한 점에 대해서 다시 한 번 사과드립니다. 앞으로는 더욱 투명하고 일관된 커뮤니케이션을 위해 최선을 다하겠습니다. 도서 및 음반, 문구, eBook 등 상품 구매와 티켓 서비스, 주문 결제 등 핵심 서비스는 복구가 완료되었으며, 일부 서비스는 순차적으로 최선을 다해 복구 중입니다.</p>
1408                                        <p class="txt_des txt_desM mgt20"><strong class="txC_black">고객 피해 보상과 회복 조치</strong></p>
1409                                        <p class="txt_des txt_desM">예스24는 서비스 중단으로 불편을 겪으신 고객 여러분께 서비스 유형별로 적용 가능한 보상 기준을 마련하여, 직접적 피해를 입으신 고객분들 대상으로 16일 1차 보상안을 공지하였고 사이트를 이용하고 계신 전체 회원을 대상으로 한 2차 보상안을 추가 안내드립니다.</p>
1410                                        <div class="btn_row mgt20">
1411                                            <span><a href="https://m.yes24.com/Help/Notice?seq=2017" class="btn_c l_size btn_act02 btn_wSizeF"><em class="txt">1차 보상안</em></a></span>
1412                                            <span><a href="https://m.yes24.com/Help/Notice?seq=2019" class="btn_c l_size btn_act02 btn_wSizeF"><em class="txt">2차 보상안</em></a></span>
1413                                        </div>
1414                                        <p class="txt_des txt_desM mgt20"><strong class="txC_black">재발 방지 및 보안 강화 방안</strong></p>
1415                                        <p class="txt_des txt_desM">예스24는 정부 유관기관(KISA, 개인정보보호위원회) 및 외부 보안 전문가들과 협력하여 사고 원인 조사와 보안 진단을 병행하고 있으며, 이후 유관기관의 조사 결과에 대해서도 투명하게 공개하겠습니다. 또한 이번 사고를 계기로 보안 체계를 원점에서 재점검할 예정입니다. 외부 보안 자문단을 도입하고, 보안 예산을 확대하여 시스템 설계부터 운영 전반까지 플랫폼의 신뢰도와 복원력을 강화하겠습니다. 아울러 정부 및 업계와 협력하여 더 안전한 디지털 생태계 조성을 위한 제도 개선 논의에도 적극 참여하고, 사회적 역할을 다하는 책임 있는 기업이 되겠습니다. 고객 여러분의 신뢰를 다시 쌓아가기 위한 이 과정에 진심을 담아 끝까지 책임을 다할 것을 약속드립니다. 다시 한 번 불편을 겪으신 모든 분들에게 고개 숙여 사과드립니다.</p>
1416                                        <p class="txt_des txt_desM mgt20">2025년 6월 16일</p>
1417                                        <p class="txt_des txt_desM mgt5"><strong class="txC_black">예스24 대표이사 김석환, 최세라 올림</strong></p>
1418                                    </div>
1419                                </div>
1420                                <div class="notPopMnu">
1421                                    <ul>
1422                                        <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1423                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1424                                    </ul>
1425                                </div>
1426                            </div>
1427                        </div>
1428                    </div>
1429                    <div id="yesNotPopTxtMask" class="yNotPopMask" style="display:block"></div>
1430                </section>`;
1431        }
1432        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
1433        $('#' + appendId).append(popupHtml);
1434    }
1435}
1436
1437//서비스이용안내 팝업: B2E
1438function setGuidePopB2E(platform) {
1439    var guideType = 'B2E';
1440    if (getCookie("HideUrgentPopup" + guideType) !== "Y") {
1441        var popupHtml = '';
1442        if (platform == "p") {
1443            if (!$('link[href*="yesPopUp_not.css"]').length) {
1444                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css?v=20250623">');
1445            }
1446            
1447            if (!$('#maskYUI').length) {
1448                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
1449            }
1450
1451            popupHtml = `
1452                <div id="dPop_notPop_${guideType}">
1453                    <style>
1454                        .yesPopUpArea { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1455                        .yesPopUpArea { flex-direction: column;flex-wrap: nowrap;justify-content: center;align-items: center; }
1456                        .yesPopUpArea { position:fixed;left:0;top:0;right:0;bottom:0;z-index:998001; }
1457                        .yesPopUpArea .yesPopUp { position:relative;left:auto; }
1458                        .yesPopUpArea .yesPopUp { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1459                        .yesPopUpArea .yesPopUp { flex-direction: column;flex-wrap: nowrap; }
1460                        .yesPopUpArea .yesPopUp { max-height:calc(100vh - 200px); }
1461                        .yesPopUpArea .yesPopUp .popYUIArea { flex:1;box-sizing:border-box;padding-top:30px;max-height:calc(100vh - 250px); }
1462                        .yesPopUpArea .yesPopUp .popYUIArea .popYUI_cont { box-sizing:border-box;margin:0;padding:30px;padding-top:0;height:100%;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;-webkit-overflow-scrolling:touch; }
1463                        .yesPopUpArea .yesPopUp .popYUIMnu { flex-shrink:0; }	
1464                    </style>
1465                    <div class="yesPopUpArea">
1466                        <div class="yesPopUp yesPopUpNot bgWhite">
1467                            <div class="popYUIArea" style="width:550px;">
1468                                <div class="popYUI_cont">
1469                                    <div class="notCon">
1470                                        <p class="txt_tit">서비스 장애 보상안 안내</p>
1471                                        <p class="txt_des txt_desM">안녕하세요. 예스24입니다.<br> 이번 서비스 장애로 인해 불편을 겪으신 장병 여러분께 진심으로 사과드립니다.</p>
1472                                        <p class="txt_des txt_desM">예스24는 서비스 중단으로 불편을 겪으신 장병 여러분께 아래와 같은 보상안을 안내드립니다.</p>
1473                                        <div class="btn_row mgt20">
1474                                            <span><a href="https://www.yes24.com/Mall/Help/Notice?seq=2017" class="btnC m_size btn_blue btn_wSizeF"><span class="bWrap"><em class="txt">1차 보상안</em></span></a></span>
1475                                            <span><a href="https://www.yes24.com/Mall/Help/Notice?seq=2019" class="btnC m_size btn_blue btn_wSizeF"><span class="bWrap"><em class="txt">2차 보상안</em></span></a></span>
1476                                        </div>
1477                                        <div class="contTableBox mgt20">
1478                                            <p>보상안 중 지급된 상품권의 사용방법은 아래와 같습니다. (아래 순서에 따라 결제 적용하시면 됩니다.)</p>
1479                                            <p>1. 자기 개발 포인트 적용 <br>2. 예스24상품권 사용 <br>3. 개인결제수단(신용카드, 휴대폰 등) 사용</p>
1480                                            <div class="con_sclH mgt15"><img alt="상품권 사용법1" src="https://image.yes24.com/sysimage/noticeN/compensation/img_not_pc01_250623.png" width="460"></div>
1481                                            <div class="con_sclH mgt15"><img alt="상품권 사용법2" src="https://image.yes24.com/sysimage/noticeN/compensation/img_not_pc02_250623.png" width="460"></div>
1482                                        </div>
1483                                    </div>
1484                                </div>
1485                            </div>
1486                            <div class="popYUIMnu">
1487                                <ul class="clearfix">
1488                                    <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1489                                    <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1490                                </ul>
1491                            </div>
1492                        </div>
1493                    </div>
1494                </div>`;
1495        }
1496        else {
1497            popupHtml = `
1498                <section id="dPop_notPop_${guideType}">
1499                    <div class="yNotPop" style="display:block">
1500                        <div class="notPopWrap">
1501                            <div class="notPopGrp">
1502                                <div class="notPopTxt">
1503                                    <div class="popTxtCont">
1504                                        <p class="txt_tit">서비스 장애 보상안 안내</p>
1505                                        <p class="txt_des txt_desM">안녕하세요. 예스24입니다.<br> 이번 서비스 장애로 인해 불편을 겪으신 장병 여러분께 진심으로 사과드립니다.</p>
1506                                        <p class="txt_des txt_desM">예스24는 서비스 중단으로 불편을 겪으신 장병 여러분께 아래와 같은 보상안을 안내드립니다.</p>
1507                                        <div class="btn_row mgt20">
1508                                            <span><a href="https://www.yes24.com/Mall/Help/Notice?seq=2017" class="btn_c l_size btn_act02 btn_wSizeF"><em class="txt">1차 보상안</em></a></span>
1509                                            <span class="gap"></span>
1510                                            <span><a href="https://www.yes24.com/Mall/Help/Notice?seq=2019" class="btn_c l_size btn_act02 btn_wSizeF"><em class="txt">2차 보상안</em></a></span>
1511                                        </div>
1512                                        <div class="contTableBox mgt20">
1513                                            <p>보상안 중 지급된 상품권의 사용방법은 아래와 같습니다. (아래 순서에 따라 결제 적용하시면 됩니다.)</p>
1514                                            <p>1. 자기 개발 포인트 적용 <br>2. 예스24상품권 사용 <br>3. 개인결제수단(신용카드, 휴대폰 등) 사용</p>
1515                                            <div class="mgt15"><img alt="상품권 사용법1" src="https://image.yes24.com/sysimage/noticeN/compensation/img_not_mo01_250623.png" width="100%"></div>
1516                                        </div>
1517                                    </div>
1518                                </div>
1519                                <div class="notPopMnu">
1520                                    <ul>
1521                                        <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1522                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1523                                    </ul>
1524                                </div>
1525                            </div>
1526                        </div>
1527                    </div>
1528                    <div class="yNotPopMask" style="display:block"></div>
1529                </section>`;
1530        }
1531        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
1532        $('#' + appendId).append(popupHtml);
1533    }
1534}
1535
1536//서비스이용안내 팝업: 크레마클럽
1537function setGuidePopCrema(platform) {
1538    var guideType = 'Crema';
1539    if (getCookie("HideUrgentPopup" + guideType) !== "Y") {
1540        var popupHtml = '';
1541        if (platform == "p") {
1542            if (!$('link[href*="yesPopUp_not.css"]').length) {
1543                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css?v=20250701">');
1544            }
1545            
1546            if (!$('#maskYUI').length) {
1547                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
1548            }
1549            else {
1550                $('#maskYUI').show();
1551            }
1552
1553            popupHtml = `
1554                <div id="dPop_notPop_${guideType}">
1555                    <style>
1556                        .yesPopUpArea { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1557                        .yesPopUpArea { flex-direction: column;flex-wrap: nowrap;justify-content: center;align-items: center; }
1558                        .yesPopUpArea { position:fixed;left:0;top:0;right:0;bottom:0;z-index:998001; }
1559                        .yesPopUpArea .yesPopUp { position:relative;
1559left:auto; }
1560                        .yesPopUpArea .yesPopUp { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1561                        .yesPopUpArea .yesPopUp { flex-direction: column;flex-wrap: nowrap; }
1562                        .yesPopUpArea .yesPopUp { max-height:calc(100vh - 200px); }
1563                        .yesPopUpArea .yesPopUp .popYUIArea { flex:1;box-sizing:border-box;padding-top:30px;max-height:calc(100vh - 250px); }
1564                        .yesPopUpArea .yesPopUp .popYUIArea .popYUI_cont { box-sizing:border-box;margin:0;padding:30px;padding-top:0;height:100%;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;-webkit-overflow-scrolling:touch; }
1565                        .yesPopUpArea .yesPopUp .popYUIMnu { flex-shrink:0; }	
1566                    </style>
1567                    <div class="yesPopUpArea">
1568                        <div class="yesPopUp yesPopUpNot bgWhite">
1569                            <div class="popYUIArea" style="width:550px;">
1570                                <div class="popYUI_cont">
1571                                    <div class="notCon">
1572                                        <p class="txt_tit">크레마클럽 2차 보상 안내</p>
1573                                        <p class="txt_des txt_desM">안녕하세요. 예스24 크레마클럽입니다.</p>
1574                                        <p class="txt_des txt_desM">서비스 장애에 대한 보상으로 준비한 크레마클럽 30일 이용권이 회원님의 계정에 순차적으로 지급되고 있습니다.</p>
1575                                        <p class="txt_des txt_desM">자세한 내용은 아래 안내를 참고해 주세요.</p>
1576                                        <div class="contTableBox mgt20">
1577                                            <p><strong class="txC_black">이용권 확인 방법</strong></p>
1578                                            <p>로그인 후 상단 검색창 옆 아이콘 클릭 또는 마이페이지 &gt; 나의 eBook &gt; 크레마클럽 요금제 관리에서 확인하실 수 있습니다.</p>
1579                                        </div>
1580                                        <div class="contTableBox mgt10">
1581                                            <p><strong class="txC_black">크레마클럽 이용 방법</strong></p>
1582                                            <p>예스24 eBook앱을 다운받으시면 바로 사용 가능합니다.</p>
1583                                        </div>
1584                                        <div class="contTableBox mgt10">
1585                                            <p><strong class="txC_black">지급 일정 안내</strong></p>
1586                                            <p>2025년 6월 24일부터 7월 8일까지 순차 지급되며, 시스템 상황에 따라 지급 기간은 단축될 수 있습니다.</p>
1587                                        </div>
1588                                        <div class="contTableBox mgt10">
1589                                            <p><strong class="txC_black">참고사항</strong></p>
1590                                            <p>99요금제 회원은 별도 안내 예정입니다.</p>
1591                                        </div>
1592                                        <p class="txt_des txt_desM mgt20">이용에 불편을 드린 점 다시 한번 깊이 사과 드리며, 앞으로 신뢰 회복과 서비스 안정성 강화를 위한 근본적인 개선에도 최선을 다하겠습니다.</p>
1593                                        <p class="txt_des txt_desM">감사합니다.</p>
1594                                    </div>
1595                                </div>
1596                            </div>
1597                            <div class="popYUIMnu">
1598                                <ul class="clearfix">
1599                                    <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1600                                    <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1601                                </ul>
1602                            </div>
1603                        </div>
1604                    </div>
1605                </div>`;
1606        }
1607        else {
1608            popupHtml = `
1609                <section id="dPop_notPop_${guideType}">
1610                    <div class="yNotPop" style="display:block">
1611                        <div class="notPopWrap">
1612                            <div class="notPopGrp">
1613                                <div class="notPopTxt">
1614                                    <div class="popTxtCont">
1615                                        <p class="txt_tit">크레마클럽 2차 보상 안내</p>
1616                                        <p class="txt_des txt_desM">안녕하세요. 예스24 크레마클럽입니다.</p>
1617                                        <p class="txt_des txt_desM">서비스 장애에 대한 보상으로 준비한 크레마클럽 30일 이용권이 회원님의 계정에 순차적으로 지급되고 있습니다.</p>
1618                                        <p class="txt_des txt_desM">자세한 내용은 아래 안내를 참고해 주세요.</p>
1619                                        <div class="contTableBox mgt20">
1620                                            <p><strong class="txC_black">이용권 확인 방법</strong></p>
1621                                            <p>로그인 후 크레마클럽 페이지 내 ☰ 메뉴 또는 마이페이지 &gt; 크레마클럽 요금제 관리에서 확인하실 수 있습니다.</p>
1622                                        </div>
1623                                        <div class="contTableBox mgt10">
1624                                            <p><strong class="txC_black">크레마클럽 이용 방법</strong></p>
1625                                            <p>예스24 eBook앱을 다운받으시면 바로 사용 가능합니다.</p>
1626                                        </div>
1627                                        <div class="contTableBox mgt10">
1628                                            <p><strong class="txC_black">지급 일정 안내</strong></p>
1629                                            <p>2025년 6월 24일부터 7월 8일까지 순차 지급되며, 시스템 상황에 따라 지급 기간은 단축될 수 있습니다.</p>
1630                                        </div>
1631                                        <div class="contTableBox mgt10">
1632                                            <p><strong class="txC_black">참고사항</strong></p>
1633                                            <p>99요금제 회원은 별도 안내 예정입니다.</p>
1634                                        </div>
1635                                        <p class="txt_des txt_desM mgt20">이용에 불편을 드린 점 다시 한번 깊이 사과 드리며, 앞으로 신뢰 회복과 서비스 안정성 강화를 위한 근본적인 개선에도 최선을 다하겠습니다.</p>
1636                                        <p class="txt_des txt_desM">감사합니다.</p>
1637                                    </div>
1638                                </div>
1639                                <div class="notPopMnu">
1640                                    <ul>
1641                                        <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1642                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1643                                    </ul>
1644                                </div>
1645                            </div>
1646                        </div>
1647                    </div>
1648                    <div class="yNotPopMask" style="display:block"></div>
1649                </section>`;
1650        }
1651        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
1652        $('#' + appendId).append(popupHtml);
1653    }
1654}
1655
1656//서비스이용안내 팝업: 99요금제
1657function setGuidePop99Plan(platform) {
1658    var guideType = '99Plan';
1659    if (getCookie("HideUrgentPopup" + guideType) !== "Y") {
1660        var popupHtml = '';
1661        if (platform == "p") {
1662            if (!$('link[href*="yesPopUp_not.css"]').length) {
1663                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css?v=20250704">');
1664            }
1665            
1666            if (!$('#maskYUI').length) {
1667                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
1668            }
1669            else {
1670                $('#maskYUI').show();
1671            }
1672
1673            popupHtml = `
1674                <div id="dPop_notPop_${guideType}">
1675                    <style>
1676                        .yesPopUpArea { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1677                        .yesPopUpArea { flex-direction: column;flex-wrap: nowrap;justify-content: center;align-items: center; }
1678                        .yesPopUpArea { position:fixed;left:0;top:0;right:0;bottom:0;z-index:998001; }
1679                        .yesPopUpArea .yesPopUp { position:relative;
1679left:auto; }
1680                        .yesPopUpArea .yesPopUp { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1681                        .yesPopUpArea .yesPopUp { flex-direction: column;flex-wrap: nowrap; }
1682                        .yesPopUpArea .yesPopUp { max-height:calc(100vh - 200px); }
1683                        .yesPopUpArea .yesPopUp .popYUIArea { flex:1;box-sizing:border-box;padding-top:30px;max-height:calc(100vh - 250px); }
1684                        .yesPopUpArea .yesPopUp .popYUIArea .popYUI_cont { box-sizing:border-box;margin:0;padding:30px;padding-top:0;height:100%;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;-webkit-overflow-scrolling:touch; }
1685                        .yesPopUpArea .yesPopUp .popYUIMnu { flex-shrink:0; }	
1686                    </style>
1687                    <div class="yesPopUpArea">
1688                        <div class="yesPopUp yesPopUpNot bgWhite">
1689                            <div class="popYUIArea" style="width:550px;">
1690                                <div class="popYUI_cont">
1691                                    <div class="notCon">
1692                                        <p class="txt_tit">99요금제 회원 보상 안내</p>
1693                                        <p class="txt_des txt_desM">안녕하세요. 예스24 크레마클럽입니다. </p>
1694                                        <p class="txt_des txt_desM">2025년 6월 9일부터 13일까지 크레마클럽 서비스 이용이 불가했던 점에 대해 진심으로 사과드립니다. </p>
1695                                        <p class="txt_des txt_desM">해당 기간 동안 99요금제를 이용하신 고객님들께 아래와 같이 보상 방안을 안내드립니다.</p>		
1696                                        <div class="contTableBox mgt20">
1697                                            <p><strong class="txC_black">대상</strong></p>
1698                                            <p>2025년 6월 9일 04시 기준 99요금제를 이용 중이었던 고객</p>
1699                                        </div>
1700                                        <div class="contTableBox mgt10">
1701                                            <p><strong class="txC_black">99요금제 페이백 보상</strong></p>
1702                                            <ul class="yesAlertLi yAlertLi b_size mgt10">
1703                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>2025년 7월 7일부터 진행되는 99요금제 정기 결제 금액에 대해 1회 전액 환불 처리          </li>
1704                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>결제일 기준 다음 주 월요일에 결제수단 승인 취소 방식으로 환불                          </li>
1705                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>현재 99요금제를 사용하지 않는 경우, 2025년 7월 7일 기준 1년 내 재가입 시 자동 환불 처리</li>
1706                                            </ul>
1707                                        </div>
1708                                        <div class="contTableBox mgt10">
1709                                            <p><strong class="txC_black">정기 결제일 확인 방법</strong></p>
1710                                            <ul class="yesAlertLi yAlertLi b_size mgt10">
1711                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>PC : 로그인 후 상단 검색창 옆 아이콘 클릭 또는 마이페이지 &gt; 나의 eBook &gt; 크레마클럽 요금제 관리 </li>
1712                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>모바일 : 로그인 후 상단 검색창 옆 아이콘 클릭 또는 마이페이지 &gt; 크레마클럽 요금제 관리          </li>
1713                                            </ul>
1714                                        </div>
1715                                        <div class="contTableBox mgt10">
1716                                            <p><strong class="txC_black">크레마클럽 이용권 지급 보상</strong></p>
1717                                            <ul class="yesAlertLi yAlertLi b_size mgt10">
1718                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>크레마클럽 30일 이용권 제공 (8월 11일 개별 문자 발송 예정)	                                                                                                                         </li>
1719                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>발송일 기준, 예스24 회원정보에 등록된 휴대전화번호로 발송됩니다. (99요금제 사용 중에는 이용권 등록이 불가하며, 등록 유효기간은 발송일로부터 5년으로, 기한 내 언제든 사용 가능합니다.)</li>
1720                                            </ul>
1721                                        </div>
1722                                        <p class="txt_des txt_desM mgt20">다시 한번 이용에 불편을 겪으신 회원님들께 사과드립니다. 더욱 안정적인 서비스와 향상된 사용자 경험을 제공할 수 있도록 최선을 다하겠습니다.</p>
1723                                        <p class="txt_des txt_desM">감사합니다.</p>
1724                                    </div>
1725                                </div>
1726                            </div>
1727                            <div class="popYUIMnu">
1728                                <ul class="clearfix">
1729                                    <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1730                                    <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1731                                </ul>
1732                            </div>
1733                        </div>
1734                    </div>
1735                </div>`;
1736        }
1737        else {
1738            popupHtml = `
1739                <section id="dPop_notPop_${guideType}">
1740                    <div class="yNotPop" style="display:block">
1741                        <div class="notPopWrap">
1742                            <div class="notPopGrp">
1743                                <div class="notPopTxt">
1744                                    <div class="popTxtCont">
1745                                        <p class="txt_tit">99요금제 회원 보상 안내</p>
1746                                        <p class="txt_des txt_desM">안녕하세요. 예스24 크레마클럽입니다. </p>
1747                                        <p class="txt_des txt_desM">2025년 6월 9일부터 13일까지 크레마클럽 서비스 이용이 불가했던 점에 대해 진심으로 사과드립니다. </p>
1748                                        <p class="txt_des txt_desM">해당 기간 동안 99요금제를 이용하신 고객님들께 아래와 같이 보상 방안을 안내드립니다.</p>		
1749                                        <div class="contTableBox mgt20">
1750                                            <p><strong class="txC_black">대상</strong></p>
1751                                            <p>2025년 6월 9일 04시 기준 99요금제를 이용 중이었던 고객</p>
1752                                        </div>
1753                                        <div class="contTableBox mgt10">
1754                                            <p><strong class="txC_black">99요금제 페이백 보상</strong></p>
1755                                            <ul class="yesAlertLi yAlertLi b_size mgt10">
1756                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>2025년 7월 7일부터 진행되는 99요금제 정기 결제 금액에 대해 1회 전액 환불 처리          </li>
1757                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>결제일 기준 다음 주 월요일에 결제수단 승인 취소 방식으로 환불                          </li>
1758                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>현재 99요금제를 사용하지 않는 경우, 2025년 7월 7일 기준 1년 내 재가입 시 자동 환불 처리</li>
1759                                            </ul>
1760                                        </div>
1761                                        <div class="contTableBox mgt10">
1762                                            <p><strong class="txC_black">정기 결제일 확인 방법</strong></p>
1763                                            <ul class="yesAlertLi yAlertLi b_size mgt10">
1764                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>PC : 로그인 후 상단 검색창 옆 아이콘 클릭 또는 마이페이지 &gt; 나의 eBook &gt; 크레마클럽 요금제 관리 </li>
1765                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>모바일 : 로그인 후 상단 검색창 옆 아이콘 클릭 또는 마이페이지 &gt; 크레마클럽 요금제 관리          </li>
1766                                            </ul>
1767                                        </div>
1768                                        <div class="contTableBox mgt10">
1769                                            <p><strong class="txC_black">크레마클럽 이용권 지급 보상</strong></p>
1770                                            <ul class="yesAlertLi yAlertLi b_size mgt10">
1771                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>크레마클럽 30일 이용권 제공 (8월 11일 개별 문자 발송 예정)	                                                                                                                         </li>
1772                                                <li class="txC_black"><em class="bl_dot bgYUI bl_rnd">&nbsp;</em>발송일 기준, 예스24 회원정보에 등록된 휴대전화번호로 발송됩니다. (99요금제 사용 중에는 이용권 등록이 불가하며, 등록 유효기간은 발송일로부터 5년으로, 기한 내 언제든 사용 가능합니다.)</li>
1773                                            </ul>
1774                                        </div>
1775                                        <p class="txt_des txt_desM mgt20">다시 한번 이용에 불편을 겪으신 회원님들께 사과드립니다. 더욱 안정적인 서비스와 향상된 사용자 경험을 제공할 수 있도록 최선을 다하겠습니다.</p>
1776                                        <p class="txt_des txt_desM">감사합니다.</p>
1777                                    </div>
1778                                </div>
1779                                <div class="notPopMnu">
1780                                    <ul>
1781                                        <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1782                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1783                                    </ul>
1784                                </div>
1785                            </div>
1786                        </div>
1787                    </div>
1788                    <div class="yNotPopMask" style="display:block"></div>
1789                </section>`;
1790        }
1791        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
1792        $('#' + appendId).append(popupHtml);
1793    }
1794}
1795
1796//서비스이용안내 팝업: 시스템 점검
1797function setGuidePopSystemCheck(platform) {
1798    var guideType = 'SystemCheckA';
1799    if (getCookie("HideUrgentPopup" + guideType) !== "Y") {
1800        var popupHtml = '';
1801        if (platform == "p") {
1802            if (!$('link[href*="yesPopUp_not.css"]').length) {
1803                $('head').append('<link rel="stylesheet" type="text/css" href="https://image.yes24.com/sysimage/yesUI/common/yesPopUp_not.css?v=20250821">');
1804            }
1805            
1806            if (!$('#maskYUI').length) {
1807                $('body').prepend('<div id="maskYUI" style="display: block;"></div>');
1808            }
1809            else {
1810                $('#maskYUI').show();
1811            }
1812
1813            popupHtml = `
1814                <div id="dPop_notPop_${guideType}">
1815                    <style>
1816                        .yesPopUpArea { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1817                        .yesPopUpArea { flex-direction: column;flex-wrap: nowrap;justify-content: center;align-items: center; }
1818                        .yesPopUpArea { position:fixed;left:0;top:0;right:0;bottom:0;z-index:998001; }
1819                        .yesPopUpArea .yesPopUp { position:relative;
1819left:auto; }
1820                        .yesPopUpArea .yesPopUp { display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex; }
1821                        .yesPopUpArea .yesPopUp { flex-direction: column;flex-wrap: nowrap; }
1822                        .yesPopUpArea .yesPopUp { max-height:calc(100vh - 200px); }
1823                        .yesPopUpArea .yesPopUp .popYUIArea { flex:1;box-sizing:border-box;padding-top:30px;max-height:calc(100vh - 250px); }
1824                        .yesPopUpArea .yesPopUp .popYUIArea .popYUI_cont { box-sizing:border-box;margin:0;padding:30px;padding-top:0;height:100%;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;-webkit-overflow-scrolling:touch; }
1825                        .yesPopUpArea .yesPopUp .popYUIMnu { flex-shrink:0; }	
1826                    </style>
1827                    <div class="yesPopUpArea">
1828                        <div class="yesPopUp yesPopUpNot bgWhite">
1829                            <div class="popYUIArea" style="width:611px;">
1830                                <div class="popYUI_cont">
1831                                    <div class="notCon">
1832                                        <p class="txt_tit">시스템 점검으로 인한 서비스 일시 중지 안내</p>
1833                                        <p class="txt_des">안녕하십니까? 예스24 입니다.<br>항상 예스24를 이용해주셔서 감사합니다. </p>
1834                                        <p class="txt_des">
1834보다 원활하고 안정적인 서비스 제공을 위해 아래와 같이 시스템 정기 점검을 실시할 예정입니다.<br>작업 중에는 사이트 이용이 중단되오니 참고하시어 이용에 불편이 없으시길 바랍니다.</p>
1835                                    </div>
1836                                    <dl class="notConDl">
1837                                        <dd>
1838                                            <ul class="yesAlertLi alertLi">
1839                                                <li>1. 일시 : 08월 24일(일) 오전 00시~오전 10시</li>
1840                                                <li>2. 내용 : 정기 점검으로 인한 사이트 일시 중지</li>
1841                                                <li>3. 서비스 영향</li>
1842                                                <li>- 도서 전체 서비스 이용 불가</li>
1843                                                <li>- 공연 로그인 서비스 중지</li>
1844                                                <li>- eBook/크레마클럽 구매 및 신규 다운로드 불가 (이용권 등록 제한)</li>
1845                                                <br>
1846                                                <li>※ 24DAY 프로모션은 점검 종료 후 오후 1시에 오픈될 예정입니다.</li>
1847                                            </ul>
1848                                        </dd>
1849                                    </dl>
1850                                    <div class="notCon">
1851                                        <p class="txt_des"></p>
1852                                        <p class="txt_des">불편을 드리게 된 점 너그러운 양해를 부탁드리며,<br>한층 더 안정적인 서비스로 보답하겠습니다.</p>
1853                                        <p class="txt_des">감사합니다.</p>
1854                                    </div>
1855                                </div>
1856                            </div>
1857                            <div class="popYUIMnu">
1858                                <ul class="clearfix">
1859                                    <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1860                                    <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1861                                </ul>
1862                            </div>
1863                        </div>
1864                    </div>
1865                </div>`;
1866        }
1867        else {
1868            popupHtml = `
1869                <section id="dPop_notPop_${guideType}">
1870                    <div class="yNotPop" style="display:block">
1871                        <div class="notPopWrap">
1872                            <div class="notPopGrp">
1873                                <div class="notPopTxt">
1874                                    <div class="popTxtCont">
1875                                        <p class="txt_tit">시스템 점검으로 인한 서비스 일시 중지 안내</p>
1876                                        <p class="txt_des txt_desM">안녕하십니까? 예스24 입니다.<br>항상 예스24를 이용해주셔서 감사합니다.</p>
1877                                        <p class="txt_des txt_desM">
1877보다 원활하고 안정적인 서비스 제공을 위해 아래와 같이 시스템 정기 점검을 실시할 예정입니다.</p>
1878                                        <p class="txt_des txt_desM">작업 중에는 사이트 이용이 중단되오니 참고하시어 이용에 불편이 없으시길 바랍니다.</p>
1879                                        <dl class="contTableDl contTableDl_act mgt20">
1880                                            <dd>
1881                                                <ul class="yesAlertLi alertLi">
1882                                                    <li>1. 일시 : 08월 24일(일) 오전 00시~오전 10시</li>
1883                                                    <li>2. 내용 : 정기 점검으로 인한 사이트 일시 중지</li>
1884                                                    <li>3. 서비스 영향</li>
1885                                                    <li>- 도서 전체 서비스 이용 불가</li>
1886                                                    <li>- 공연 로그인 서비스 중지</li>
1887                                                    <li>- eBook/크레마클럽 구매 및 신규 다운로드 불가 (이용권 등록 제한)</li>
1888                                                    <br>
1889                                                    <li>※ 24DAY 프로모션은 점검 종료 후 오후 1시에 오픈될 예정입니다.</li>
1890                                                </ul>
1891                                            </dd>
1892                                        </dl>
1893                                        <p class="txt_des txt_desM"></p>
1894                                        <p class="txt_des txt_desM">불편을 드리게 된 점 너그러운 양해를 부탁드리며, 한층 더 안정적인 서비스로 보답하겠습니다.</p>
1895                                        <p class="txt_des txt_desM">감사합니다.</p>
1896                                    </div>
1897                                </div>
1898                                <div class="notPopMnu">
1899                                    <ul>
1900                                        <li><a href="javascript:void(0);" onclick="setYearUrgentClose('${guideType}');">앞으로 그만 보기</a></li>
1901                                        <li><a href="javascript:void(0);" onclick="closeUrgentPopup('${guideType}');">닫기</a></li>
1902                                    </ul>
1903                                </div>
1904                            </div>
1905                        </div>
1906                    </div>
1907                    <div class="yNotPopMask" style="display:block"></div>
1908                </section>`;
1909        }
1910        var appendId = $('#bookClubWrap').length > 0 ? 'bookClubWrap' : 'yesWrap';
1911        $('#' + appendId).append(popupHtml);
1912    }
1913}
1914
1915// 팝업공통화 - 단순 안내 팝업
1916function showGoodsDetailPopup(popId, obj, cock, width, options) {
1917    if ($("#dPop_" + popId).length > 0) {
1918        $("#dPop_" + popId).remove();
1919    }
1920
1921    if (isAjaxDoing == false && $("dPop_" + popId).length == 0) {
1922        isAjaxDoing = true;
1923
1924        const url = `${FRONT_API_URL}/Module/GoodsInformation?platform=p&popId=${popId}`;
1925        fetch(url, {
1926            method: 'GET', mode: 'cors', credentials: 'include'
1927        }).then(function (response) {
1928            return response.text();
1929        }).then(function (data) {
1930            $('#yesWrap').append(data);
1931            isAjaxDoing = false;
1932
1933            // var options = { cock: cock, mask: false, pWidth: width, baseWidth: $('#yDetailTopWrap').width(), ajaxURL: url };
1934            var pop = $("#dPop_" + popId);
1935            var mask = null;
1936            var marginL = 0;
1937            var popT = 0;
1938            var cockTarget;
1939            var $obj = $(obj);
1940            var popPosition = "absolute";
1941
1942            var settings = {
1943                mask: false,
1944                ovrMask: false,
1945                cock: cock,
1946                cockW: 7, //cock width/2
1947                cockH: 10, //cock height
1948                cockClassSelector: ".popYUI_cock",
1949                pGap: 50, //popWidth
1950                pWidth: width, //popWidth
1951                fixed: false, //fixed
1952                flexOn: false, //flex fixed
1953                posTChg: false, // goods detail position top change
1954                posTGap: 0, // goods detail position top change
1955                posLft: null, //position Left
1956                posTop: null, //position top
1957                baseWidth: 960, // base width
1958                showOnly: true, // show opt only ? multi
1959                align: "objBottom",
1960                ajaxURL: "", // ajax opt
1961                ajaxCallBack: function () { },
1962                closeEvent: function (settings) { } // close event callback
1963            };
1964
1965            // 이벤트 설정 함수        
1966            var bindEvent = function () {
1967                pop.find(".popYUI_close a").bind("click", function () {
1968                    if (settings.ovrMask) {
1969                        $("#ovrMaskYUI").hide();
1970                    } else if (settings.mask) {
1971                        $("#maskYUI").hide();
1972                    }
1973                    pop.hide();
1974                    settings.closeEvent(settings);
1975                });
1976
1977                pop.find(".popYUIArea").css({
1978                    "width": settings.pWidth + "px"
1979                })
1980            };
1981
1982            var popPosSet = function () {
1983                if (!settings.mask) {
1984                    if ($obj.css("display") == "inline") {
1985                        cockTarget = $obj.children()[0];
1986                        if (cockTarget == null) {
1987                            cockTarget = $obj;
1988                        }
1989                    } else {
1990                        cockTarget = $obj;
1991                    }
1992
1993                    var agent = navigator.userAgent.toLowerCase();
1994                    if ((navigator.appName == 'Netscape' && navigator.userAgent.
1994search('Trident') != -1) || (agent.indexOf("msie") != -1)) {
1995                        var gapW = 0;
1996                    }
1997                    else {
1998                        var jVer = $.fn.jquery.split('.');
1999                        if (jVer[0] > 1 || (jVer[0] == 1 && jVer[1] > 11)) {
2000                            var gapW = 0;
2001                        } else {
2002                            var gapW = 7;
2003                        }
2004                    }
2005
2006                    if (settings.posLft == null) {
2007                        marginL = ($(cockTarget).offset().left + ($(cockTarget).width() / 2)) - ($(window).width() / 2) - (settings.pWidth / 2) + gapW;
2008                    } else {
2009                        marginL = ($(cockTarget).offset().left + ($(cockTarget).width() / 2)) - ($(window).width() / 2) - (settings.pWidth / 2) + gapW + settings.posLft;
2010                    }
2011
2012                    var targetX = $(window).width() / 2 + marginL;
2013                    var targetXW = targetX + settings.pWidth;
2014
2015                    //만약 marginL이 baseWidth에 넘치면
2016                    if (targetXW > ($(window).width() / 2) + (settings.baseWidth / 2)) {
2017                        var moveX = ($(window).width() / 2) + (settings.baseWidth / 2) - targetXW + settings.cockW; //cock 너비/2
2018                        marginL += moveX - settings.cockW + (settings.pWidth / 4);
2019                        if (settings.cock) {
2020                            pop.find(settings.cockClassSelector).css("margin-left", "");
2021                            pop.find(settings.cockClassSelector).css("margin-left", (-moveX - settings.pWidth / 4) + "px");
2022                        }
2023                    } else if (targetX < ($(window).width() / 2) - (settings.baseWidth / 2)) {
2024                        var moveX = ($(window).width() / 2) - (settings.baseWidth / 2) - targetX + settings.cockW; //cock 너비/2
2025                        marginL += moveX - settings.cockW;
2026                        if (settings.cock) {
2027                            pop.find(settings.cockClassSelector).css("margin-left", "");
2028                            pop.find(settings.cockClassSelector).css("margin-left", -moveX + "px");
2029                        }
2030                    }
2031
2032                    if (settings.fixed) {
2033                        popPosition = "fixed";
2034
2035                        if (settings.flexOn) {
2036                            pop.find(".yesPopUp").addClass("flexOn");
2037                        } else {
2038                            if (settings.cock) {
2039                                popT = $(cockTarget).offset().top - $(window).scrollTop() + $(cockTarget).height() + settings.cockH;
2040                            } else {
2041                                popT = $(cockTarget).offset().top - $(window).scrollTop() + $(cockTarget).height() + 5;
2042
2043                                if ((popT + pop.find(".popYUIArea").height()) > $(document).height()) {
2044                                    popT = $(cockTarget).offset().top - $(window).scrollTop() - pop.find(".popYUIArea").height() - 5;
2045                                }
2046                            }
2047                            if (settings.align != "objBottom") {
2048                                popT -= (pop.find(".popYUIArea").height() + $(cockTarget).height() + 10);
2049                            }
2050                        }
2051                    } else {
2052                        popPosition = "absolute";
2053
2054                        if (settings.cock) {
2055                            popT = $(cockTarget).offset().top + $(cockTarget).height() + settings.cockH;
2056                        } else {
2057                            popT = $(cockTarget).offset().top + $(cockTarget).height() + 5;
2058
2059                            if ((popT + pop.find(".popYUIArea").height()) > $(document).height()) {
2060                                popT = $(cockTarget).offset().top - pop.find(".popYUIArea").height() - 5;
2061                            }
2062                        }
2063                        if (settings.align != "objBottom") {
2064                            popT -= (pop.find(".popYUIArea").height() + $(cockTarget).height() + 10);
2065                        }
2066                    }
2067
2068                } else {
2069                    if (settings.posLft == null) {
2070                        marginL = -Math.floor(settings.pWidth / 2);
2071                    } else {
2072                        marginL = -Math.floor(settings.pWidth / 2) + settings.posLft - Math.floor((settings.baseWidth - settings.pWidth) / 2);
2073                    }
2074
2075                    if (settings.posTop == null) {
2076                        if (settings.fixed) {
2077                            popPosition = "fixed";
2078                            popT = Math.floor((window.innerHeight - pop.find(".yesPopUp").height()) / 2) - settings.pGap;
2079                        } else {
2080                            popT = $(window).scrollTop() + Math.floor((window.innerHeight - pop.find(".yesPopUp").height()) / 2) - settings.pGap;
2081                        }
2082                    } else {
2083                        if (settings.fixed) {
2084                            popPosition = "fixed";
2085                            popT = settings.posTop;
2086                        } else {
2087                            popT = $(window).scrollTop() + settings.posTop;
2088                        }
2089                    }
2090                    if (settings.align != "objBottom") {
2091                        popT -= (pop.find(".popYUIArea").height() + $(cockTarget).height() + 10);
2092                    }
2093                }
2094            };
2095
2096            if (options) { $.extend(settings, options); };
2097
2098            if (settings.showOnly) {
2099                if ($("#maskYUI")) {
2100                    $("#maskYUI").hide();
2101                }
2102            }
2103
2104            bindEvent();
2105            pop.show();
2106            popPosSet();
2107
2108            // 페이지에 팝업 내용이 있을때
2109            pop.find(".yesPopUp").css({
2110                "position": popPosition,
2111                "marginLeft": marginL + "px",
2112                "top": popT + "px"
2113            });
2114            if (settings.posTChg) {
2115                pop.find(".yesPopUp").addClass("tPosChg");
2116                pop.find(".yesPopUp").attr("data-tpos", popT);
2117                pop.find(".yesPopUp").attr("data-tgap", settings.posTGap);
2118            }
2119            if (settings.mask) {
2120                if ($("#maskYUI").length == 0) {
2121                    $('body').append('<div id="maskYUI"></div>');
2122                }
2123                mask = $("#maskYUI");
2124                mask.stop().fadeIn();
2125            }
2126            if (settings.ovrMask) {
2127                if ($("#ovrMaskYUI").length == 0) {
2128                    $('body').append('<div id="ovrMaskYUI"></div>');
2129                }
2130                mask = $("#ovrMaskYUI");
2131                mask.stop().fadeIn();
2132            }
2133        }).catch(function (error) {
2134            isAjaxDoing = false;
2135        });
2136    }
2137}
2138
2139// 팝업 닫기 함수
2140function closeUrgentPopup(type) {
2141    var popupId = 'dPop_notPop';
2142    if (type){
2143        popupId += '_' + type;
2144    }
2145    
2146    $('[id="' + popupId + '"]').each(function() {
2147        $(this).remove();
2148    });
2149
2150    $('#maskYUI').remove();
2151}
2152
2153// 오늘은 그만 보기
2154function setTodayUrgentClose(type) {
2155    var date = new Date();
2156    date.setTime(date.getTime() + (24 * 60 * 60 * 1000)); // 시간 단위
2157    document.cookie = "HideUrgentPopup" + type + "=Y; path=/; expires=" + date.toUTCString();
2158
2159    closeUrgentPopup(type);
2160}
2161
2162// 앞으로 그만 보기
2163function setYearUrgentClose(type) {
2164    var date = new Date();
2165    date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000));
2166    document.cookie = "HideUrgentPopup" + type + "=Y; path=/; expires=" + date.toUTCString();
2167
2168    closeUrgentPopup(type);
2169}
2170
2171var frontCommonTryCount = 0;
2172var frontCommonMaxTries = 3;
2173
2174function frontCommonWaitUntilJqueryReady() {
2175    if (typeof jQuery === 'undefined') {
2176        if (++frontCommonTryCount < frontCommonMaxTries) {
2177            setTimeout(frontCommonWaitUntilJqueryReady, 100);
2178        }
2179        return;
2180    }
2181    $(function () {
2182        var url = location.href.replace(/^https:\/\//i, '').toLowerCase();
2183        var isExceptionPage = false;
2184        var platform = url.startsWith('www.yes24.com/main/default.aspx') ? 'p' : (url.startsWith('m.yes24.com/home/main') || url.startsWith('bookshop.yes24.com')) ? 'm' : '';
2185        if (!isExceptionPage && platform && new Date() < new Date('2025-08-24T00:00:00+09:00').getTime()) {
2186            setGuidePopSystemCheck(platform);
2187        }
2188    });
2189}
2190
2191/**
2192 * eBook / 오디오북 미리보기 점검 제어 함수
2193 * - 점검 시간일 경우 alert 노출 후 클릭 동작 차단
2194 * - 점검 시간이 아니면 기존 동작 허용
2195 * @returns {boolean} true: 정상 진행 / false: 동작 차단
2196 */
2197function PreviewMaintenanceGuard() {
2198
2199    // 점검 시간 설정 (월: 0부터 시작)
2200    var MaintenanceStart = new Date(2026, 0, 28, 18, 0);   // 1/28 18:00
2201    var MaintenanceEnd   = new Date(2026, 0, 28, 20, 30);  // 1/28 20:30
2202
2203    // 현재 시간
2204    var Now = new Date();
2205
2206    // 점검 시간 여부 판단
2207    if (Now >= MaintenanceStart && Now <= MaintenanceEnd) {
2208
2209        alert(
2210            "이용에 불편을 드려 죄송합니다.\n\n" +
2211            "현재 네트워크 점검 작업으로 인해\n" +
2212            "미리보기/미리듣기 서비스가 일시 중단되었습니다.\n\n" +
2213            "점검 시간: 1/28(수) 18:00 ~ 20:30\n" +
2214            "(약 2시간 30분 소요 예정)"
2215        );
2216
2217        return false; // href, 기존 onclick 모두 차단
2218    }
2219
2220    return true; // 정상 동작
2221}
2222
2223/**
2224 * 오디오북 미리듣기 팝업 오픈 (화면 중앙)
2225 */
2226function PreviewAudioBook(goodsNo) {
2227
2228    var popupWidth = 300;
2229    var popupHeight = 400;
2230
2231    // 현재 브라우저 기준 위치 계산
2232    var dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left;
2233    var dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top;
2234
2235    var windowWidth = window.innerWidth
2236        ? window.innerWidth
2237        : document.documentElement.clientWidth
2238            ? document.documentElement.clientWidth
2239            : screen.width;
2240
2241    var windowHeight = window.innerHeight
2242        ? window.innerHeight
2243        : document.documentElement.clientHeight
2244            ? document.documentElement.clientHeight
2245            : screen.height;
2246
2247    // 중앙 좌표 계산
2248    var left = ((windowWidth - popupWidth) / 2) + dualScreenLeft;
2249    var top = ((windowHeight - popupHeight) / 2) + dualScreenTop;
2250
2251    window.open(
2252        FRONT_API_URL + '/Module/Preview?goodsNo=' + goodsNo,
2253        '_blank',
2254        'width=' + popupWidth +
2255        ',height=' + popupHeight +
2256        ',top=' + top +
2257        ',left=' + left +
2258        ',scrollbars=yes'
2259    );
2260
2261    return false;
2262}
2263
2264/**
2265 * 디스크 클릭 시 점검 여부를 확인하고 재생을 처리한다
2266 * @param {HTMLElement} element 클릭된 a 태그
2267 * @returns {boolean} false 반환으로 기본 동작 차단
2268 */
2269function OnDiscClick(element) {
2270    if (!PreviewMaintenanceGuard()) {
2271        return false;
2272    }
2273
2274    discPlay(element);
2275    return false;
2276}
2277
2278// 현재 시간을 yyyy-MM-ddTHH:mm:ss+09:00 형식으로 반환
2279function nowIsoWithLocalOffset() {
2280  var d = new Date();
2281  function pad(n){ return ('0' + n).slice(-2); }
2282
2283  var tzMin = -d.getTimezoneOffset();        // 분 단위 오프셋 (한국이면 540)
2284  var sign  = tzMin >= 0 ? '+' : '-';
2285  var abs   = Math.abs(tzMin);
2286  var hh    = pad(Math.floor(abs / 60));
2287  var mm    = pad(abs % 60);
2288
2289  return d.getFullYear() + '-' + pad(d.getMonth()+1) + '-' + pad(d.getDate()) +
2290         'T' + pad(d.getHours()) + ':' + pad(d.getMinutes()) + ':' + pad(d.getSeconds()) +
2291         sign + hh + ':' + mm;
2292}
2293
2294/**
2295 * 브레이즈 회원가입 완료 로그 전송 함수
2296 * @param {Object} userData - 회원가입 정보
2297 * @param {boolean} userData.isFriendtalkYn - 카카오 알림톡 수신 동의 여부
2298 * @param {boolean} userData.isSmsYn - SMS 수신 동의 여부
2299 * @param {boolean} userData.isEmail - 이메일 수신 동의 여부
2300 * @param {string} userData.regDate - 가입일자 (YYYY-MM-DD)
2301 * @param {string} userData.gender - 성별 (M/F)
2302 * @param {string}
2302 userData.birthDM - 생년월일 (YYYY-MM-00)
2303 * @param {boolean} userData.isIpinCheck - 본인인증 여부
2304 * @param {string} userData.address - 도로명 주소
2305 * @param {string} userData.sigup_type - 가입 경로 (naver|kakao|apple|facebook|simple|mobile|pc|usedstore)
2306 * @param {string} userData.platform - 접속 플랫폼 (yes24_web)
2307*/
2308function initBrazeSignup(userData) {
2309    if (typeof brazeHelper === "undefined") {
2310        console.warn("brazeHelper is not defined.");
2311        return;
2312    }
2313    
2314    // 사용자 속성 설정
2315    brazeHelper.setBrazeUser("$dateOfBirth", userData.birthDM);
2316    brazeHelper.setBrazeUser("$gender", userData.gender);
2317    brazeHelper.setBrazeUser("YS_mkt_sms_agree", userData.isSmsYn);
2318    brazeHelper.setBrazeUser("YS_mkt_kakao_agree", userData.isFriendtalkYn);
2319    brazeHelper.setBrazeUser("YS_mkt_email_agree", userData.isEmail);
2320    brazeHelper.setBrazeUser("YS_signup_date", userData.regDate);
2321    brazeHelper.setBrazeUser("YS_is_adult_verified", false);
2322    brazeHelper.setBrazeUser("YS_mania_grade", "일반");
2323    brazeHelper.setBrazeUser("YS_is_identity_verified", userData.isIpinCheck);
2324    brazeHelper.setBrazeUser("YS_address", userData.address);
2325
2326    // 회원가입 완료 로그 전송
2327    brazeHelper.setBrazeLog("signup_completed", {
2328        is_email_optin: userData.isEmail,
2329        is_sms_optin: userData.isSmsYn,
2330        is_kakao_optin: userData.isFriendtalkYn,
2331        signup_type: userData.sigup_type,
2332        platform: userData.platform
2333    });
2334}
2335
2336//이북앱(PC뷰어) 접속 여부
2337function checkYesAppEbook() {
2338    var userAgent = navigator.userAgent || "";
2339    return userAgent.toUpperCase().indexOf("YESAPPEBOOK") > -1;
2340}
2341
2342frontCommonWaitUntilJqueryReady();
2343
2344/**
2345 * 프론트 API 장바구니 관련 모듈
2346 */
2347var frontApiCart = (function () {
2348    var _frontApiUrl = (function () {
2349        var url = "";
2350
2351        if (typeof YesData !== "undefined"
2352            && YesData
2353            && typeof YesData.FRONT_API_URL === "function") {
2354            url = YesData.FRONT_API_URL();
2355
2356            if (url) {
2357                return url;
2358            }
2359        }
2360
2361        if (typeof FRONT_API_URL !== "undefined" && FRONT_API_URL) {
2362            return FRONT_API_URL;
2363        }
2364
2365        return "https://frontapi.yes24.com";
2366    })();
2367
2368    var API_URL = _frontApiUrl + '/api/goods/cart';
2369    var DEFAULT_SUCCESS_MESSAGE = '카트담기에 성공하였습니다.';
2370    var DEFAULT_ERROR_MESSAGE = '카트담기에 실패하였습니다.';
2371    var INVALID_CART_ITEMS_MESSAGE = '상품 정보가 올바르지 않습니다.';
2372    var INVALID_GOODS_NO_MESSAGE = '상품번호가 올바르지 않습니다.';
2373    var TIMEOUT_ERROR_MESSAGE = '요청 시간이 초과되었습니다.';
2374    var REQUEST_TIMEOUT = 10000;
2375
2376    async function addCart(cartItems) {
2377        var items = normalizeCartItems(cartItems);
2378        var payload = [];
2379        var controller = new AbortController();
2380        var timeoutId = null;
2381        var response;
2382        var result;
2383        var checkResult;
2384        var cartResponse;
2385        var i;
2386        var item;
2387        var qty;
2388
2389        if (!items.length) {
2390            throw createError(INVALID_CART_ITEMS_MESSAGE, { cartItems: cartItems });
2391        }
2392
2393        for (i = 0; i < items.length; i++) {
2394            item = items[i];
2395
2396            if (!item || item.goodsNo == null || item.goodsNo === '') {
2397                throw createError(INVALID_GOODS_NO_MESSAGE, { item: item, index: i });
2398            }
2399
2400            qty = parseInt(item.qty, 10);
2401            if (isNaN(qty) || qty < 1) {
2402                qty = 1;
2403            }
2404
2405            payload.push({
2406                goodsNo: String(item.goodsNo),
2407                qty: qty
2408            });
2409        }
2410
2411        timeoutId = setTimeout(function () {
2412            controller.abort();
2413        }, REQUEST_TIMEOUT);
2414
2415        try {
2416            response = await fetch(API_URL, {
2417                method: 'POST',
2418                credentials: 'include',
2419                headers: buildHeaders(),
2420                body: JSON.stringify(payload),
2421                signal: controller.signal
2422            });
2423
2424            result = await readJson(response);
2425
2426            if (!response.ok) {
2427                throw createError(
2428                    (result && result.message) || DEFAULT_ERROR_MESSAGE,
2429                    { response: response, result: result }
2430                );
2431            }
2432
2433            checkResult = result && result.CheckResult;
2434            cartResponse = result && result.CartResponse;
2435
2436            if (!checkResult || !checkResult.IsSuccess) {
2437                throw createError(
2438                    extractCheckResultMessage(checkResult) || DEFAULT_ERROR_MESSAGE,
2439                    result
2440                );
2441            }
2442
2443            if (!cartResponse || !cartResponse.IsSuccess) {
2444                throw createError(
2445                    (cartResponse && cartResponse.ResultMessage) || DEFAULT_ERROR_MESSAGE,
2446                    result
2447                );
2448            }
2449
2450            return result;
2451        } catch (error) {
2452            if (error && error.name === 'AbortError') {
2453                throw createError(TIMEOUT_ERROR_MESSAGE, { error: error });
2454            }
2455
2456            if (error && error.message && error.detail) {
2457                throw error;
2458            }
2459
2460            throw createError(DEFAULT_ERROR_MESSAGE, { error: error });
2461        } finally {
2462            clearTimeout(timeoutId);
2463        }
2464    }
2465
2466    function buildHeaders() {
2467        var cartNo = getCookie('CART_NO');
2468        var serviceCookies = getCookie('ServiceCookies');
2469        var headers = {
2470            'Content-Type': 'application/json; charset=utf-8'
2471        };
2472
2473        if (cartNo) {
2474            headers['X-Cart-No'] = cartNo;
2475        }
2476
2477        if (serviceCookies) {
2478            headers['X-Service-Cookies'] = serviceCookies;
2479        }
2480
2481        return headers;
2482    }
2483
2484    function normalizeCartItems(value) {
2485        if (value == null) {
2486            return [];
2487        }
2488
2489        if (typeof value === 'string' || typeof value === 'number') {
2490            return [{ goodsNo: value, qty: 1 }];
2491        }
2492
2493        if (Object.prototype.toString.call(value) === '[object Array]') {
2494            return value;
2495        }
2496
2497        if (typeof value === 'object') {
2498            return [value];
2499        }
2500
2501        return [];
2502    }
2503
2504    function extractCheckResultMessage(checkResult) {
2505        var list = checkResult && checkResult.ResultList;
2506        var i;
2507
2508        if (!list || !list.length) {
2509            return null;
2510        }
2511
2512        for (i = 0; i < list.length; i++) {
2513            if (list[i] && list[i].ErrorMsg) {
2514                return list[i].ErrorMsg;
2515            }
2516        }
2517
2518        return null;
2519    }
2520
2521    function getCookie(name) {
2522        var cookieString = document.cookie || '';
2523        var cookies = cookieString ? cookieString.split('; ') : [];
2524        var prefix = name + '=';
2525        var i;
2526
2527        for (i = 0; i < cookies.length; i++) {
2528            if (cookies[i].indexOf(prefix) === 0) {
2529                return decodeURIComponent(cookies[i].substring(prefix.length));
2530            }
2531        }
2532
2533        return '';
2534    }
2535
2536    async function readJson(response) {
2537        var text = await response.text();
2538
2539        if (!text) {
2540            return null;
2541        }
2542
2543        try {
2544            return JSON.parse(text);
2545        } catch (e) {
2546            return {
2547                message: text,
2548                rawText: text
2549            };
2550        }
2551    }
2552
2553    function createError(message, detail) {
2554        var error = new Error(message);
2555        error.detail = detail;
2556        return error;
2557    }
2558
2559    return {
2560        addCart: addCart,
2561        messages: {
2562            defaultSuccess: DEFAULT_SUCCESS_MESSAGE,
2563            defaultError: DEFAULT_ERROR_MESSAGE,
2564            invalidCartItems: INVALID_CART_ITEMS_MESSAGE,
2565            invalidGoodsNo: INVALID_GOODS_NO_MESSAGE,
2566            timeout: TIMEOUT_ERROR_MESSAGE
2567        }
2568    };
2569})();

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.