PageSourceSearch

https://www.yes24.com/24/Scripts/YES24.Common-1.6.js?v=20260630

js yes24.com collected 2026-09-24 08:36:35 UTC 92,291 bytes, 2,167 lines download raw bytes

1/*GLOBAL VALUE v1.0*/
2var YES_HTTP_URL = "http://www.yes24.com";
3var YES_HTTPS_URL = "https://www.yes24.com";
4var NOW_YES_HTTP_URL = (document.location.protocol == "https:" ? YES_HTTPS_URL : YES_HTTP_URL);
5var YES_BLOG_URL = "http://blog.yes24.com";
6var YES_BLOG_SURL = "https://blog.yes24.com";
7var YES_SARAK_SURL = "https://sarak.yes24.com";
8var YES_ORDER_URL = 'http://ssl.yes24.com';
9var YES_ORDER_SURL = 'https://ssl.yes24.com';
10var YES_CART_URL = (document.location.protocol == "https:" ? YES_ORDER_SURL : YES_ORDER_URL) + '/Cart/Cart';
11var YES_CART_AJAX_URL = '/24/Content/AjaxPage/Cart/Cart.ashx';
12var YES_DIRECT_ORDER_URL = YES_ORDER_SURL + '/OrderGift/OrderGift';
13var YES_DIGITAL_ORDER_URL = YES_ORDER_SURL + '/DigitalMoney/DigitalMoney';
14var YES_DIRECTPAY_TYPE = ''; // 간편결제 미리 지정시 사용
15
16var URLUtil = function () {
17    URLUtil.prototype.getClickCodeUrl = function (originUrl, codeName, code) {
18        if (originUrl.indexOf('?') > 0)
19            if (originUrl.substr(originUrl.length - 1, 1) == "&")
20                return originUrl + codeName + "=" + code;
21            else
22                return originUrl + "&" + codeName + "=" + code;
23        else
24            if (originUrl.substr(originUrl.length - 1, 1) == "?")
25                return originUrl + codeName + "=" + code;
26            else
27                return originUrl + "?" + codeName + "=" + code;
28    };
29    URLUtil.prototype.getURL = function () {
30        return window.location.href.split("?")[0];
31    };
32    URLUtil.prototype.getQueryString = function () {
33        var arr = new Array();
34        arr = window.location.href.split("?");
35        if (arr.length > 1)
36            return arr[1];
37        else
38            return "";
39    };
40}
41
42var LoginUtil = function () {
43    var urlU = new URLUtil();
44
45    this.isLogin = function () {
46        var logYn = false;
47        try { logYn = ($("#LoginYnH").val() == "N") ? false : true; }
48        catch (Exception) { }
49        return logYn;
50    };
51    this.redirectLoginPage = function (returnUrl, returnParams) {
52        var loginUrl = YES_HTTPS_URL + "/Templates/FTLogin.aspx?ReturnURL=" + returnUrl;
53        if (returnParams != '') loginUrl += "&ReturnParams=" + returnParams.replace(/&/g, "`");
54        document.location = loginUrl;
55    };
56    LoginUtil.prototype.checkLoginByMsg = function (msg) {
57        if (!this.isLogin()) {
58            if (confirm(msg)) {
59                this.redirectLoginPage(urlU.getURL(), urlU.getQueryString());
60            }
61            return false;
62        }
63        return true;
64    };
65    LoginUtil.prototype.checkLoginByMsg2 = function (msg) {
66        if (!this.isLogin()) {
67            if (confirm(msg)) {
68                this.redirectLoginPage(urlU.getURL(), urlU.getQueryString());
69                return true;
70            }
71            return false;
72        }
73        return true;
74    };
75    LoginUtil.prototype.checkLoginByMsgWithRedirectUtl = function (msg, url, param) {
76        if (!this.isLogin()) {
77            if (confirm(msg)) {
78                if (param.substring(0, 1) === "?") {
79                    param = param.substring(1);
80                }
81                this.redirectLoginPage(url, param);
82                return true;
83            }
84            return false;
85        }
86        return true;
87    };
88    LoginUtil.prototype.checkLoginByMsgAlert = function (msg) {
89        if (!this.isLogin()) {
90            alert(msg);
91            this.redirectLoginPage(urlU.getURL(), urlU.getQueryString());
92            return false;
93        }
94        return true;
95    };
96    LoginUtil.prototype.redirectAdultPage = function (returnUrl, returnParams) {
97        var AdultPage = YES_HTTPS_URL + "/Member/Adult.aspx?ReturnURL=" + returnUrl;
98        if (returnParams != '') AdultPage += "&ReturnParams=" + returnParams.replace(/&/g, "`");
99        document.location = AdultPage;
100    };
101}
102
103var GoodsUtil = function () {
104    var urlU = new URLUtil();
105    var loginU = new LoginUtil();
106
107    this.getFormInstance = function () {
108        var form = document.createElement("FORM");
109        form.method = "POST";
110        document.body.appendChild(form);
111        return form;
112    };
113
114    this.canBuyGoodsByAge = function (data) {
115        var bRet = true;
116        try {
117            if (data.limit_age_yn == "Y") {
118                if (data.limit_age >= 19) {
119                    bRet = false;
120                } else if (data.limit_age != 0) {
121                    bRet = false;
122                }
123            }
124        } catch (Exception) { alert("연령 체크 오류 입니다."); }
125        return bRet;
126    };
127
128    //리스트 -성인 상품 체크
129    this.isAvailableGoodsByMyList = function (data) {
130        var result = true;
131        if (!this.canBuyGoodsByAge(data)) {
132            if (data.limit_age == null) {
133                data.limit_age = 19;
134            }
135
136            if (!loginU.checkLoginByMsg("[" + data.limit_age.toString() == "15" ? "15" : "19" + "세 이상] 나이제한 상품입니다.\n로그인을 하시겠습니까?")) {
137                result = false;
138            } else {
139                //회원 연령 체크
140                if (data.limit_age <= data.member_age && data.limit_age >= 19) {
141                    //인증 체크
142                    if (!this.AdultCheck()) {
143                        if (getCookie("AdultAuthYN") == "N") {
144                            alert("[" + data.limit_age.toString() == "15" ? "15" : "19" + "세 이상] 나이제한 상품입니다.");
145                            result = false;
146                        }
147                        else result = false;
148                    }
149                }
150                else {
151                    if (data.limit_age > data.member_age) {
152                        //TICKET-17596 나이제한 얼럿 문구 수정 요청
153                        this.checkUnder19AdultMsgAlert(data.limit_age);
154                        result = false;
155                    }
156                }
157            }
158        }
159        return result;
160    };
161
162    //인증 체크
163    this.AdultCheck = function () {
164        var bRet = "";
165        if (getCookie("AdultAuthYN") == "") {
166            loginU.redirectAdultPage(urlU.getURL(), urlU.getQueryString());
167            bRet = false;
168            return false;
169        }
170        else if (getCookie("AdultAuthYN") == "Y") {
171            bRet = true;
172        }
173        else if (getCookie("AdultAuthYN") == "N") {
174            bRet = false;
175        }
176        return bRet;
177    }
178
179    // 성인 상품 체크
180    this.isAvailableAdultGoodsCheck = function (chkControlList, ordCountList, goodsOptList, goodsOptMsgList, loginYn, CartorList, categoryNumber, islayerUI, layerid, codeName, code) {
181        var bRet;
182        var sMsg;
183        var CheckGoods = "";
184        var ReturnGoods = "";
185        var list_yn, cart_yn = true;
186        var sMsg = "";
187
188        for (var i = 0; i < chkControlList.length; i++) {
189            if (chkControlList[i].checked) {
190                var goods = eval("(" + $(goodsOptList[i]).val() + ")");
191                if (i == 0) CheckGoods = goods.goods_no;
192                else CheckGoods += ',' + goods.goods_no;
193            } //if checked
194        }
195
196        if (CheckGoods == "") {
197            alert("상품을 선택하세요.");
198            return false;
199        }
200        else {
201
202            this.checkValidGoodsToJson(CheckGoods, false,
203                function (isSuccess, data) {
204                    if (isSuccess) {
205                        if (CartorList == "Cart") {
206                            yes24GU.CreateCartData(chkControlList, ordCountList, goodsOptList, goodsOptMsgList, categoryNumber, islayerUI, layerid, codeName, code);
207                        }
208                        else if (CartorList == "List") {
209                            yes24GU.CreateMyListData(chkControlList, ordCountList, goodsOptList);
210                        }
211                        return true;
212                    }
213                    else {
214                        //상품 유효성 체크
215                        if (yes24GU.VailableAdultGoodsErrorCheck(data, loginYn)) {
216                            if (CartorList == "Cart") {
217                                yes24GU.CreateCartData(chkControlList, ordCountList, goodsOptList, goodsOptMsgList, categoryNumber, islayerUI, layerid, codeName, code);
218                            }
219                            else if (CartorList == "List") {
220                                yes24GU.CreateMyListData(chkControlList, ordCountList, goodsOptList);
221                            }
222                        } //if
223                    } //else
224                } //fn
225            ,
226            function (data) { return false; }
227           );
228        } //else
229        return bRet;
230    };
231
232    this.CreateCartData = function (chkControlList, ordCountList, goodsOptList, goodsOptMsgList, categoryNumber, islayerUI, layerid, codeName, code) {
233        var isSubmit;
234        var cartData = "";
235        for (var i = 0; i < chkControlList.length; i++) {
236            if (chkControlList[i].checked) {
237                isCheckedGoods = true;
238                var goods = eval("(" + $(goodsOptList[i]).val() + ")");
239                var cnt = 1;
240                if (ordCountList.length != 0 && $(ordCountList[i]) != null)
241                    cnt = $(ordCountList[i]).val();
242                isSubmit = yes24GU.isValidGoods(goods, cnt, true, true);
243                if (isSubmit) {
244                    var optMsg = "";
245                    if (goodsOptMsgList.length != 0 && $(goodsOptMsgList[i]) != null)
246                        optMsg = $(goodsOptMsgList[i]).val();
247                    cartData += this.getCartData(goods, cnt, optMsg);
248                    isSelectedGoods = true;
249                }
250                else { break; }
251            }
252        } //for
253
254        if (isSubmit) {
255            if (islayerUI) {
256                var msg = this.ajaxCartData(cartData, categoryNumber, codeName, code);
257                if (msg == '') $("#" + layerid).show();
258                else alert(msg);
259            } else {
260                this.submitCartData(cartData, categoryNumber, codeName, code);
261            }
262        }
263    };
264
265    this.CreateMyListData = function (chkControlList, ordCountList, goodsOptList) {
266        var isSubmit;
267        var selectedGoodsList = "";
268        var isCheckedGoods = false;
269
270        for (var i = 0; i < chkControlList.length; i++) {
271            if (chkControlList[i].checked) {
272                isCheckedGoods = true;
273
274                var data = eval("(" + $(goodsOptList[i]).val() + ")");
275                isSubmit = this.isAvailableGoodsByMyList(data);
276                if (isSubmit) {
277                    selectedGoodsList += data.goods_no + ",";
278                    isSelectedGoods = true;
279                }
280                else { break; }
281            }
282        } //for
283
284        if (!isCheckedGoods) {
285            alert("상품을 선택하세요.");
286            return false;
287        }
288
289        if (isSubmit) {
290            centerNewWinNoScroll(YES_BLOG_URL + '/yes24/listAddGoodsPop.aspx?goodsno=' + selectedGoodsList, 'addinlist', "320", "180");
291            return;
292        }
293    };
294
295    this.VailableAdultGoodsErrorCheck = function (data, loginYn) {
296        var bRet = false;
297        var IsAdult = false;
298        var IsUnder19 = false;
299        var AdultGoods = [];
300        var returnErrorGoods = [];
301        var returnErrorCode = [];
302        var IsUnder19Goods = [];
303
304        if (data.ErrorCount > 0) {
305            for (var i = 0; i < data.ErrorCount; i++) {
306                if (data.ErrorCodes[i] == -4 || data.ErrorCodes[i] == -10 || data.ErrorCodes[i] == -5) {
307                    AdultGoods.push(data.Goods[i]);
308                    IsAdult = true;
309                    if (data.ErrorCodes[i] == -5) {
310                        IsUnder19 = true;
311                        IsUnder19Goods.push(data.Goods[i]);
312                    }
313                } else {
314                    returnErrorCode.push(data.ErrorCodes[i]);
315                    returnErrorGoods.push(data.Goods[i]);
316                }
317            }
318
319            if (IsAdult) {
320                sMsg = "나이제한 상품이 포함되어 있습니다.\n";
321                //19세 상품.
322                if (AdultGoods.length > 0) {
323                    if (!loginYn) {
324                        sMsg += "로그인 후 이용하세요.\n";
325
326                        alert(sMsg + this.returnAdultGoodsList(AdultGoods));
327                        if (!loginU.isLogin()) loginU.redirectLoginPage(urlU.getURL(), urlU.getQueryString());
328                        bRet = false;
329                    }
330                    else {
331                        //회원 연령 체크
332                        if (IsUnder19) {
333                            alert(sMsg + this.returnAdultGoodsList(IsUnder19Goods));
334                            bRet = false;
335                        }
336                        else {
337                            if (!this.AdultCheck()) {
338                                bRet = false;
339                            }
340                            else bRet = true;
341                        }
342                    }
343                }
344                else {
345                    bRet = true;
346                }
347            }
348            else {
349                var checkErrorCode = 0;
350                var checkErrorGoods;
351                var sMsgArr = [];
352
353                //리턴될 에러코드 체크
354                for (var i = 0; i < returnErrorCode.length; i++) {
355                    if (i == 0) checkErrorCode = returnErrorCode[i];
356                    else {
357                        if (checkErrorCode > returnErrorCode[i]) {
358                            checkErrorCode = checkErrorCode;
359                        }
360                        else {
361                            checkErrorCode = returnErrorCode[i];
362                        }
363                    }
364                } //for
365
366                for (var i = 0; i < returnErrorGoods.length; i++) {
367                    switch (checkErrorCode) {
368                        case -2:
369                            if (!loginYn) {
370                                msg = 'eBook상품이 포함되어있어 로그인 후 사용가능합니다. 로그인 하시겠습니까?\n';
371                                sMsgArr += "- " + returnErrorGoods[i].GoodsName + "\n";
372
373                                var url = YES_HTTPS_URL + '/Templates/FTLogin.aspx?ReturnURL=' + escape(location.href);
374
375                                if (confirm(msg + sMsgArr)) {
376                                    location.href = url;
377                                }
378                                return false;
379                            }
380                            break;
381                        case -3:
382                            msg = '일시품절, 품절인 상품이 포함되어있습니다.\n';
383                            sMsgArr += "- " + returnErrorGoods[i].GoodsName + "\n";
384                            break;
385                        case -6:
386                            msg = '재고수량이 부족한 상품이 포함되어 있습니다.\n';
387                            sMsgArr += "- " + returnErrorGoods[i].GoodsName + "\n";
388                            break;
389                        case -7:
390                            msg = '카트에 담을 수 없는 상품이 포함되어 있습니다.\n';
391                            sMsgArr += "- " + returnErrorGoods[i].GoodsName + "\n";
392                            break;
393                        case -8:
394                            msg = '최대허용 주문수량이 초과된 상품이 포함되어있습니다.\n'
395                            sMsgArr += "- " + returnErrorGoods[i].GoodsName + "\n";
396                            break;
397                        case -9:
398                            msg = '상품상세 페이지에서 옵션 선택 후 구입 가능한 상품이 포함되어 있습니다\n';
399                            sMsgArr += "- " + returnErrorGoods[i].GoodsName + "\n";
400                            break;
401                    } //switch
402                } //for
403                if (sMsgArr != "") {
404                    alert(msg + sMsgArr);
405                    bRet = false;
406                    return false;
407                }
408            } //else
409        } else {
410            bRet = true;
411        }
412        //else
413        return bRet;
414    };
415
416    this.returnAdultGoodsList = function (AdultGoods) {
417        var goods = "";
418        for (var i = 0; i < AdultGoods.length; i++) {
419            goods += "- [" + AdultGoods[i].LimitAge + "세 이상] " + AdultGoods[i].GoodsName + "\n";
420        }
421        return goods;
422    };
423
424    // 성인 상품 체크
425    this.isAvailableAdultGoodsCheck2 = function (areaid, loginYn, CartorList) {
426        var bRet;
427        var sMsg;
428        var CheckGoods = "";
429        var ReturnGoods = "";
430        var list_yn, cart_yn = true;
431        var sMsg = "";
432        var loginMessage = "eBook 상품은 로그인을 먼저 해주세요.\r\n로그인 하시겠습니까?";
433
434        var CheckGoodsCount = 0;
435        $('#' + areaid).find(":checkbox").each(function () {
436            if (this.checked == true) {
437                var goods = eval("(" + this.value + ")");
438
439                if (goods.resource_key != "12" && goods.resource_key != "13") {
440                    loginMessage = "로그인이 필요합니다.\r\n로그인 하시겠습니까?";
441                }
442
443                if (CheckGoodsCount == 0) CheckGoods = goods.goods_no;
444                else CheckGoods += ',' + goods.goods_no;
445                CheckGoodsCount++;
446            }
447        });
448
449        if (CheckGoods == "") {
450            alert("상품을 선택하세요.");
451            return false;
452        } else if (!loginU.checkLoginByMsg(loginMessage)) {
453            return;
454        }
455        else {
456
457            this.checkValidGoodsToJson(CheckGoods, false,
458                function (isSuccess, data) {
459                    if (isSuccess) {
460                        yes24GU.CreateCartDataOrMyList(CheckGoodsCount, CheckGoods, CartorList);
461                    }
462                    else {
463                        //상품 유효성 체크
464                        if (yes24GU.VailableAdultGoodsErrorCheck(data, loginYn)) {
465                            yes24GU.CreateCartDataOrMyList(CheckGoodsCount, CheckGoods, CartorList);
466                        } //if
467                    } //else
468                } //fn
469            ,
470            function (data) { return false; }
471            , (CartorList == "List" ? true : false)
472           );
473        } //else
474        return bRet;
475    };
476
477    this.CreateCartDataOrMyList = function (CheckGoodsCount, CheckGoods, CartorList) {
478        var cartData = "";
479        var goodsNo = (CheckGoodsCount > 1) ? CheckGoods.split(',') : CheckGoods;
480        if (CartorList == "Cart") {
481            if (CheckGoodsCount > 1) {
482                for (var i = 0; i < CheckGoodsCount; i++) {
483                    cartData += yes24GU.getCartDataByNo(goodsNo[i], 1, 1, '');
484                }
485            }
486            else
487                cartData += yes24GU.getCartDataByNo(goodsNo, 1, 1, '');
488
489            if (cartData != "") yes24GU.submitCartData(cartData, '');
490        }
491        else if (CartorList == "List") {
492            centerNewWinNoScroll(YES_SARAK_SURL + '/popup/list-add/?goodsNo=' + goodsNo, 'addinlist', "461", "580");
493        }
494    }
495
496    //상품 정보 체크
497    this.isAvailableGoods = function (data, order_count, cart_yn, list_yn, isMyList) {
498        var result = true;
499
500        if (data.goods_state == "01" || data.goods_state == "02") {
501            if (!this.canBuyGoodsByAge(data)) {
502                if (data.limit_age == null) {
503                    data.limit_age = 19;
504                }
505
506                if (!loginU.checkLoginByMsgAlert("[" + data.limit_age.toString() == "15" ? "15" : "19" + "세 이상] 나이제한 상품입니다.\n로그인 후 이용하세요.")) {
507                    result = false;
508                } else {
509                    //회원 연령 체크
510                    if (data.limit_age <= data.member_age && data.limit_age >= 19) {
511                        //인증 체크
512                        if (!this.AdultCheck()) {
513                            if (getCookie("AdultAuthYN") == "N") {
514                                alert("[" + data.limit_age.toString() == "15" ? "15" : "19" + "세 이상] 나이제한 상품입니다.");
515                                result = false;
516                            }
517                            else result = false;
518                        }
519                    }
520                    else {
521                        if (data.limit_age > data.member_age) {
522                            //TICKET-17596 나이제한 얼럿 문구 수정 요청
523                            this.checkUnder19AdultMsgAlert(data.limit_age);
524                            result = false;
525                        }
526                    }
527                }
528            } else if (data.order_limit_yn == "Y" && order_count > data.order_remain_count) {
529                alert("[" + data.goods_name + "]의 재고수량이 부족합니다.");
530                result = false;
531            } else if (data.order_limit_count > 0 && order_count > data.order_limit_count) {
532                alert("[" + data.goods_name + "]은 최대허용 주문수량 [" + data.order_limit_count + "]을 초과하였습니다.");
533                result = false;
534            }
535
536            if (cart_yn) {
537                if (data.add_cart_yn == "N") {
538                    alert("[" + data.goods_name + "]은 카트에 담을 수 없는 상품입니다.");
539                    result = false;
540                } else if (data.min_cnt > 0 && data.max_cnt > 0 && !(order_count >= data.min_cnt && order_count <= data.max_cnt) && !list_yn) {
541                    alert("선택옵션에 맞는 주문수량을 구매하셔야 옵션가격을 적용받으실 수 있습니다.");
542                    result = false;
543                } else if ((data.opt_yn == "Y" || data.opt_inst_yn == "Y") && list_yn) {
544                    alert("옵션 상품은 상품상세페이지에서 카트에 담을 수 있습니다.\n카트에 담지 못한 상품을 확인해주세요.\n\n상품명: " + data.goods_name);
545                    result = false;
546                }
547            } else {
548                if (data.opt_inst_yn == "Y" && list_yn) {
549                    alert("주문옵션 기입이 필요한 상품이므로 바로구매 하실 수 없습니다.");
550                    result = false;
551                } else if (data.opt_yn == "Y" && list_yn) {
552                    alert("주문옵션 선택이 필요한 상품이므로 바로구매 하실 수 없습니다.");
553                    result = false;
554                } else if (data.min_cnt > 0 && data.max_cnt > 0 && !(order_count >= data.min_cnt && order_count <= data.max_cnt) && !list_yn) {
555                    alert("선택옵션에 맞는 주문수량을 구매하셔야 옵션가격을 적용받으실 수 있습니다.");
556                    result = false;
557                }
558            }
559        } else if (isMyList == false) {
560            alert("[" + data.goods_name + "](일시품절 상품)은 카트에 담을 수 없는 상품입니다.");
561            result = false;
562        }
563        return result;
564    };
565
566    // 상품 옵션 확인    
567    this.isValidGoods = function (goods, ordCnt, isCart, isListType, isMyList) {
568        if (goods == null) {
569            alert('상품의 옵션을 선택하세요.');
570            return false;
571        }
572
573        if (isMyList == undefined || isMyList == null)
574            isMyList = false;
575
576        if (goods.resource_key == '12' || goods.resource_key == '13') {
577            if (!loginU.checkLoginByMsg('eBook 상품은 로그인을 먼저 해주세요.\r\n로그인 하시겠습니까?'))
578                return false;
579            else {
580                //북클럽
581                if (goods.flat_rate_yn == 'Y' && goods.bookclue_yn == 'Y' && !isMyList) {
582                    if (goods.rent_goods_yn == 'N') {
583                        if (!confirm('[크레마클럽] 서비스를 이용 중 이십니다.\n[크레마클럽] 이용 기간 동안은  본 상품을 무료로 이용하실 수 있습니다.\n\n추가로 해당 도서를 구매(소장) 하시겠습니까?\n아래 확인을 누르시면 결제가 진행 됩니다.'))
584                            return false;
585                    }
586                    else {
587                        alert('[크레마클럽] 서비스를 이용 중 이십니다.\n[크레마클럽] 이용 기간 동안은  본 상품을 무료로 이용하실 수 있습니다.\n\neBook App에서 본 상품을 다운로드 후 무료로 이용하세요!');
588                        return false;
589                    }
590                }
591            }
592        }
593
594        if (goods.resource_key == '27' || goods.resource_key == '37' || goods.resource_key == '40') {
595            if (!loginU.checkLoginByMsg('e러닝 상품은 로그인을 먼저 해주세요.\r\n로그인 하시겠습니까?'))
596                return false;
597        }
598
599        return (this.isAvailableGoods(goods, ordCnt, isCart, isListType, isMyList));
600    };
601
602    this.getCartData = function (goods, ordCnt, ordGoodsOptMsg) {
603        return ordCnt + String.fromCharCode(8) + goods.goods_no + String.fromCharCode(8) + goods.goods_seq + String.fromCharCode(8) + encodeURIComponent(ordGoodsOptMsg) + String.fromCharCode(7);
604    };
605    this.getCartDataByNo = function (goodsNo, goodsSeqNo, ordCnt, ordGoodsOptMsg) {
606        return ordCnt + String.fromCharCode(8) + goodsNo + String.fromCharCode(8) + goodsSeqNo + String.fromCharCode(8) + encodeURIComponent(ordGoodsOptMsg) + String.fromCharCode(7);
607    };
608    this.ajaxCartData = function (cartData, categoryNumber, codeName, code) {
609        var r = '';
610        var carturl = YES_CART_AJAX_URL + '?CategoryNumber=' + categoryNumber;
611        if (codeName != null)
612            carturl = urlU.getClickCodeUrl(carturl, codeName, code);
613
614        try {
615            jQuery.ajax({
616                type: 'POST',
617                cache: false,
618                async: false,
619                dataType: 'json',
620                url: carturl,
621                data: 'CART_GOODS_INFO=' + encodeURIComponent(cartData),
622                success: function (data) {
623                    if (!data.IsSuccess)
624                        r = data.ResultMessage;
625                },
626                error: function (xhr, ajaxOptions, thrownError) { r = thrownError; }
627            });
628        }
628 catch (e) { r = e.description; }
629
630        return r;
631    };
632    this.submitCartDataWithOpt = function (cartData, categoryNumber, codeName, code, optSeqeNos) {
633        var mainForm = this.getFormInstance();
634        var inputControl = document.createElement("INPUT");
635        inputControl.type = "hidden";
636        inputControl.name = "PROC_CART_EXPEND";
637        inputControl.value = cartData;
638
639        var inputControlByOpt = document.createElement("INPUT");
640        inputControlByOpt.type = "hidden";
641        inputControlByOpt.name = "PROC_CART_OPTIONS";
642        inputControlByOpt.value = optSeqeNos;
643
644        mainForm.appendChild(inputControl);
645        mainForm.appendChild(inputControlByOpt);
646
647        var carturl = YES_CART_URL + '?CategoryNumber=' + categoryNumber;
648        if (codeName != null)
649            carturl = urlU.getClickCodeUrl(carturl, codeName, code);
650
651        mainForm.action = carturl;
652        mainForm.submit();
653
654    };
655    this.submitCartData = function (cartData, categoryNumber, codeName, code) {
656        var mainForm = this.getFormInstance();
657        var inputControl = document.createElement("INPUT");
658        inputControl.type = "hidden";
659        inputControl.name = "PROC_CART_EXPEND";
660        inputControl.value = cartData;
661
662        mainForm.appendChild(inputControl);
663
664        var carturl = YES_CART_URL + '?CategoryNumber=' + categoryNumber;
665        if (codeName != null)
666            carturl = urlU.getClickCodeUrl(carturl, codeName, code);
667
668        mainForm.action = carturl;
669        mainForm.submit();
670    };
671    this.checkSalesInterestFree = function (qty, index) {
672        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
673        if (goodsOptList.length >= index) {
674            var data = eval("(" + $(goodsOptList[index]).val() + ")");
675            if (data.noint_quotamonth > 0)
676                if (qty > 1)
677                    alert("주문수량이 2개 이상이면, " + data.noint_quotamonth + "개월 무이자할부 혜택을 받을 수 없습니다.");
678        }
679    };
680    this.checkSeller = function (entrNo, memNo) {
681        var r = '';
682        try {
683            jQuery.ajax({
684                type: 'POST',
685                url: NOW_YES_HTTP_URL + '/24/UsedShop/IsCheckSellerToMem?entrNo=' + entrNo + '&memNo=' + memNo,
686                data: '',
687                success: function (data) {
688                    r = data;
689                },
690                error: function (xhr, ajaxOptions, thrownError) { r = 'E'; }
691            });
692        } catch (e) { r = 'E'; }
693        return r;
694    };
695    this.getOrderDataWithCode = function (goodsNo, goodsSeqNo, ordCnt, categoryNumber, loginYn, optMsg, codeName, code) {
696        var data = "?ActionType=DIRECT&" + codeName + "=" + code + "&OrdGoodsNoH=" + goodsNo + "&OrdGoodsSeqH=" + goodsSeqNo + "&OCNT=" + ordCnt + "&DispNoH=" + categoryNumber;
697        if (loginYn == "Y")
698            data += "&LoginYnH=" + loginYn;
699        if (optMsg != "")
700            data += "&GoodsSeqOrdMsgH=" + optMsg;
701        return data;
702    };
703    this.getOrderData = function (goodsNo, goodsSeqNo, ordCnt, categoryNumber, loginYn, optMsg) {
704        var data = "?ActionType=DIRECT&OrdGoodsNoH=" + goodsNo + "&OrdGoodsSeqH=" + goodsSeqNo + "&OCNT=" + ordCnt + "&DispNoH=" + categoryNumber;
705        if (loginYn == "Y")
706            data += "&LoginYnH=" + loginYn;
707        if (optMsg != "")
708            data += "&GoodsSeqOrdMsgH=" + optMsg;
709        return data;
710    };
711    this.getOrderDataByDigital = function (goodsNo, goodsSeqNo, ordCnt, categoryNumber, optMsg) {
712        var data = "?Mode=G&ActionType=ONECLICK&OrdGoodsNoH=" + goodsNo + "&OrdGoodsSeqH=" + goodsSeqNo + "&OCNT=" + ordCnt + "&DispNoH=" + categoryNumber;
713        if (optMsg != "")
714            data += "&GoodsSeqOrdMsgH=" + optMsg;
715        return data;
716    };
717    this.isNumber = function (s) {
718        s += '';
719        s = s.replace(/^\s*|\s*$/g, '');
720        if (s == '' || isNaN(s)) return false;
721        return true;
722    };
723    GoodsUtil.prototype.setConfig = function (httpUrl, httpsUrl) {
724        if (httpUrl != null && httpUrl != "")
725            YES_HTTP_URL = httpUrl;
726        if (httpsUrl != null && httpsUrl != "")
727            YES_HTTPS_URL = httpsUrl;
728    };
729    GoodsUtil.prototype.insertOrderCount = function (index, isUsedGoods, remainCnt) {
730        var ordCountList = $("*[name='ORD_GOODS_CNT']");
731        if (ordCountList.length > 0) {
732            if (!this.isNumber(ordCountList[index].value)) {
733                alert('숫자만 입력 가능합니다.');
734                ordCountList[index].value = "1";
735                return false;
736            } else {
737                var cur_qty = parseInt(ordCountList[index].value, 10);
738                if (cur_qty >= 1) {
739                    if (isUsedGoods == null) { isUsedGoods = false; remainCnt = 0; }
740                    if (isUsedGoods && remainCnt < cur_qty)
741                        alert('본 상품은 한정수량 상품으로 ' + remainCnt + '개 이상으로는 주문할 수 없습니다.');
742                    if (!isUsedGoods)
743                        this.checkSalesInterestFree(ordCountList[index].value, index);
744                } else {
745                    alert("1개 이상 구매 가능합니다.");
746                    ordCountList[index].value = "1";
747                }
748            }
749        }
750        return;
751    };
752    GoodsUtil.prototype.upOrderCount = function (index, isUsedGoods, remainCnt) {
753        var ordCountList = $("*[name='ORD_GOODS_CNT']");
754        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
755
756        var ordCnt = ordCountList.val();
757        var goods = eval("(" + $(goodsOptList[0]).val() + ")");
758
759        if (ordCountList.length > 0) {
760            old_qty = parseInt(ordCountList[index].value, 10);
761            if (isUsedGoods == null) { isUsedGoods = false; remainCnt = 0; }
762
763            if (isUsedGoods && remainCnt < old_qty + 1)
764                alert('본 상품은 한정수량 상품으로 ' + remainCnt + '개 이상으로는 주문할 수 없습니다.');
765            else {
766                if (ordCnt > 999) {
767                    alert("[" + goods.goods_name + "]은 최대허용 주문수량 1,000을 초과하였습니다.");
768                } else {
769                    ordCountList[index].value = old_qty + 1;
770                }
771            }
772
773            if (!isUsedGoods)
774                this.checkSalesInterestFree(ordCountList[index].value, index);
775        }
776        return;
777    };
778    GoodsUtil.prototype.downOrderCount = function (index, isUsedGoods, remainCnt) {
779        var ordCountList = $("*[name='ORD_GOODS_CNT']");
780        if (ordCountList.length > 0) {
781            old_qty = parseInt(ordCountList[index].value, 10);
782            if (isUsedGoods == null) { isUsedGoods = false; remainCnt = 0; }
783            if (old_qty > 1)
784                ordCountList[index].value = old_qty - 1;
785            else
786                alert("1개 이상 구매 가능합니다.");
787            if (!isUsedGoods)
788                this.checkSalesInterestFree(ordCountList[index].value, index);
789        }
790        return;
791    };
792
793    GoodsUtil.prototype.addToCartSetPos = function (btnid, isTopPosition, xgap, ygap, index, categoryNumber, islayerUI, layerid, codeName, code) {
794        var x = $("#" + btnid).offset().left + $("#" + btnid).width() / 2;
795        var y = $("#" + btnid).offset().top + $("#" + btnid).height();
796        if (isTopPosition)
797            y -= ($("#" + btnid).height() + 66);
798        $("#" + layerid).css("left", x + xgap);
799        $("#" + layerid).css("top", y + ygap);
800
801        this.addToCart(index, categoryNumber, islayerUI, layerid, codeName, code);
802    };
803
804    /*카트 담기*/
805    GoodsUtil.prototype.addToCart = function (index, categoryNumber, islayerUI, layerid, codeName, code) {
806        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
807        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
808        var ordCountList = $("*[name='ORD_GOODS_CNT']");
809        var goodsOptMsgList = $("*[name='ORD_GOODS_OPT_MSG']"); // null처리
810
811        var isSubmit = false;
812        var cartData = "";
813        var AdultGoods = [];
814        if (chkControlList.length > 0) { // CHECKBOX LIST
815            if (index >= 0) chkControlList[index].checked = true;
816
817            var isSelectedGoods = false;
818            var isCheckedGoods = false;
819
820            //19세 상품 유무 체크
821            this.isAvailableAdultGoodsCheck(chkControlList, ordCountList, goodsOptList, goodsOptMsgList, (loginU.isLogin() ? true : false), "Cart", categoryNumber, islayerUI, layerid, codeName, code);
822
823        } else { // ONLY ONE GOODS
824            if (goodsOptList.length == 0) {
825                alert('옵션을 선택하세요.');
826                return;
827            }
828
829            var goods = eval("(" + $(goodsOptList[0]).val() + ")");
830            isSubmit = this.isValidGoods(goods, $(ordCountList[0]).val(), true, false)
831            if (isSubmit) {
832                var optMsg = "";
833                if (goodsOptMsgList.length != 0 && $(goodsOptMsgList[0]) != null)
834                    optMsg = $(goodsOptMsgList[0]).val();
835                if (goods.opt_inst_yn == "Y" && optMsg == "") {
836                    alert("문구입력란을 입력해주세요.");
837                    isSubmit = false;
838                }
839
840                cartData = this.getCartData(goods, $(ordCountList[0]).val(), optMsg);
841            }
842        }
843
844        if (isSubmit) {
845            if (islayerUI) {
846                var msg = this.ajaxCartData(cartData, categoryNumber, codeName, code);
847                if (msg == '') $("#" + layerid).show();
848                else alert(msg);
849            } else {
850                this.submitCartData(cartData, categoryNumber, codeName, code);
851            }
852        }
853    };
854    //카트담기 
855    GoodsUtil.prototype.addToCartByArea = function (areaid) {
856        var cartData = "";
857        var isSelectedGoods = false;
858        var isCheckedGoods = false;
859
860        //19세 상품 유무 체크
861        this.isAvailableAdultGoodsCheck2(areaid, (loginU.isLogin() ? true : false), "Cart");
862    };
863
864    GoodsUtil.prototype.addToCartSetPosByOnlyOneGoodsNo = function (goodsNo, btnid, isTopPosition, xgap, ygap, index, categoryNumber, islayerUI, layerid) {
865        if (btnid != null) {
866            var x = $("#" + btnid).offset().left + $("#" + btnid).width() / 2;
867            var y = $("#" + btnid).offset().top + $("#" + btnid).height();
868            if (isTopPosition)
869                y -= ($("#" + btnid).height() + 66);
870            $("#" + layerid).css("left", x + xgap);
871            $("#" + layerid).css("top", y + ygap);
872        }
873
874        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
875        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
876        var ordCountList = $("*[name='ORD_GOODS_CNT']");
877        var ordCnt = 1;
878        if (ordCountList.length != 0) {
879            ordCnt = $(ordCountList[index]).val();
880        }
881        this.addToCartByGoodsNo(goodsNo, ordCnt, islayerUI, layerid, categoryNumber);
882    };
883
884    // 카트담기
885    GoodsUtil.prototype.addToCartByGoodsNo = function (goodsNo, ordCount, islayerUI, layerid, categoryNumber) {
886        if (goodsNo <= 0) { alert('상품을 선택하세요.'); return; }
887        if (categoryNumber == null) { categoryNumber = ""; }
888
889        if (document.referrer.indexOf("yes24.com/Animation") != -1) { //채널예스 > 동화 > 카트에 넣기
890            this.checkValidGoods(goodsNo, false,
891                function (isSuccess, data) {
892                    if (isSuccess) {
893
894                        // dfinery 카트에 넣기 로그.
895                        sendDfineryAddCartLogByGoodsNo(goodsNo);
896
897                        var cartData = yes24GU.getCartDataByNo(goodsNo, 1, ordCount, '');
898
899                        if (islayerUI) {
900                            var msg = yes24GU.ajaxCartData(cartData, categoryNumber);
901                            if (msg == '') $("#" + layerid).show();
902                            else alert(msg);
903
904                        } else {
905                            yes24GU.submitCartData(cartData, categoryNumber);
906                        }
907                    }
908                    else {
909                        yes24GU.showCartError(data.ErrorCodes[0], data.Goods[0], '');
910                    }
911                },
912                function (data) { }
913            );
914        }
915        else {
916            this.checkValidGoodsToJson(goodsNo, false,
917                function (isSuccess, data) {
918                    if (isSuccess) {
919
920                        // dfinery 카트에 넣기 로그. // yes24common.js
921                        sendDfineryAddCartLogByGoodsNo(goodsNo);
922
923                        var cartData = yes24GU.getCartDataByNo(goodsNo, 1, ordCount, '');
924
925                        if (islayerUI) {
926                            var msg = yes24GU.ajaxCartData(cartData, categoryNumber);
927                            if (msg == '') $("#" + layerid).show();
928                            else alert(msg);
929
930                        } else {
931                            yes24GU.submitCartData(cartData, categoryNumber);
932                        }
933                    }
934                    else {
935                        yes24GU.showCartError(data.ErrorCodes[0], data.Goods[0], '');
936                    }
937                },
938                function (data) { }
939            );
940        }
941    };
942
943    GoodsUtil.prototype.addToCartByGoodsList = function (goodsListNo, categoryNumber) {
944        var cartData = "";
945        for (var i = 0; i < goodsListNo.split(",").length; i++) {
946            cartData += this.getCartDataByNo(goodsListNo.split(",")[i], 1, 1, '');
947        }
948
949        this.submitCartData(cartData, categoryNumber);
950    };
951
952    GoodsUtil.prototype.addToCartByGoodsListByOptionNo = function (goodsListNo, goodsListSeqNo) {
953        var cartData = "";
954        var categoryNumber = "";
955        for (var i = 0; i < goodsListNo.split(",").length; i++) {
956            cartData += this.getCartDataByNo(goodsListNo.split(",")[i], 1, 1, '');
957        }
958        this.submitCartDataWithOpt(cartData, categoryNumber, '', '', goodsListSeqNo);
959    };
960
961    GoodsUtil.prototype.addToCartForData = function (index, categoryNumber, islayerUI, layerid, codeName, code) {
962        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
963        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
964        var ordCountList = $("*[name='ORD_GOODS_CNT']");
965        var goodsOptMsgList = $("*[name='ORD_GOODS_OPT_MSG']"); // null처리
966
967        var cartData = "";
968        if (index >= 0) chkControlList[index].checked = true;
969
970        var isSelectedGoods = false;
971        for (var i = 0; i < chkControlList.length; i++) {
972            if (chkControlList[i].checked) {
973                var goods = eval("(" + $(goodsOptList[i]).val() + ")");
974                var cnt = 1;
975                if (ordCountList.length != 0 && $(ordCountList[i]) != null)
976                    cnt = $(ordCountList[i]).val();
977                if (this.isValidGoods(goods, cnt, true, true)) {
978                    var optMsg = "";
979                    if (goodsOptMsgList.length != 0 && $(goodsOptMsgList[i]) != null)
980                        optMsg = $(goodsOptMsgList[i]).val();
981
982                    cartData += this.getCartData(goods, cnt, optMsg);
983                    isSelectedGoods = true;
984                }
985            }
986        }
987        if (!isSelectedGoods) {
988            alert('상품을 선택하세요.');
989            return;
990        }
991        return cartData;
992    };
993    GoodsUtil.prototype.addToCartForDataByGoodsNo = function (goodsNo, ordCount) {
994        if (goodsNo <= 0) { alert('상품을 선택하세요.'); return; }
995        return this.getCartDataByNo(goodsNo, 1, ordCount, '');
996    };
997
998    // 상품의 goods_state 변경(ex. 리스트 담기 시 품절인 경우도 가능하도록 상태 변경)
999    this._changeGoodsStateForList = function (data, changeStateList, changedState) {
1000        for (var i in changeStateList) {
1001            if (data.goods_state == changeStateList[i]) {
1002                data.goods_state = changedState;
1003                break;
1004            }
1005        }
1006        return data;
1007    };
1008
1009    //리스트담기 -베스트 셀러 메인
1010    GoodsUtil.prototype.addToMyListByIndex = function (index) {
1011        if (!loginU.checkLoginByMsg("로그인이 필요합니다.\r\n로그인 하시겠습니까?")) {
1012            return;
1013        }
1014
1015        var isMyList = true;
1016        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
1017        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
1018        var ordCountList = $("*[name='ORD_GOODS_CNT']");
1019
1020        var goods = eval("(" + $(goodsOptList[index]).val() + ")");
1021        var isSubmit = this.isValidGoods(goods, $(ordCountList[index]).val(), true, false, isMyList)
1022        if (isSubmit) {
1023
1024            // dfinery 디파이너리 리스트 넣기 로그.
1025            sendDfineryAddWishListLog($(goodsOptList[index]).val());
1026
1027            centerNewWinNoScroll(YES_BLOG_URL + '/yes24/listAddGoodsPop.aspx?goodsno=' + goods.goods_no, 'addinlist', "320", "180");
1028        }
1029    };
1030
1031    //리스트담기
1032    GoodsUtil.prototype.addToMyListByGoodsNo = function (goodsNo) {
1033        var isMyList = true;
1034        if (!loginU.checkLoginByMsg("로그인이 필요합니다.\r\n로그인 하시겠습니까?")) {
1035            return;
1036        }
1037
1038        if (document.referrer.indexOf("yes24.com/Animation") != -1) {
1039            yes24GU.checkValidGoods(goodsNo, false,
1040                function (isSuccess, data) {
1041                    if (isSuccess) {
1042                        centerNewWinNoScroll(YES_SARAK_SURL + '/popup/list-add/?goodsNo=' + goodsNo, 'addinlist', "461", "580");
1043                    }
1044                    else {
1045                        yes24GU.showCartError(data.ErrorCodes[0], data.Goods[0], '');
1046                    }
1047                },
1048            function (data) { }
1049            );
1050        }
1051        else {
1052            yes24GU.checkValidGoodsToJson(goodsNo, false,
1053                function (isSuccess, data) {
1054                    if (isSuccess) {
1055                        centerNewWinNoScroll(YES_SARAK_SURL + '/popup/list-add/?goodsNo=' + goodsNo, 'addinlist', "461", "580");
1056                    }
1057                    else {
1058                        yes24GU.showCartError(data.ErrorCodes[0], data.Goods[0], '');
1059                    }
1060                },
1061            function (data) { }
1062            , isMyList
1063            );
1064        }
1065    };
1066
1067    //리스트 담기 - 전시
1068    GoodsUtil.prototype.addToMyList = function (index, codeName, code) {
1069        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
1070        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
1071        var ordCountList = $("*[name='ORD_GOODS_CNT']");
1072        var AdultGoods = [];
1073        var isSubmit = false;
1074        var loginMessage = "로그인이 필요합니다.\r\n로그인 하시겠습니까?";
1075        var isSelectedGoods = false;
1076
1077        //선택된 상품있는지 확인
1078        for (var i = 0; i < chkControlList.length; i++) {
1079            if (chkControlList[i].checked) {
1080                isSelectedGoods = true;
1081                break;
1082            }
1083        }
1084
1085        if (!isSelectedGoods) {
1086            alert('상품을 선택하세요.');
1087            return;
1088        }
1089
1090        //리스트담기는 로그인 필수
1091        if (!loginU.checkLoginByMsg(loginMessage)) {
1092            return;
1093        }
1094
1095        if (chkControlList.length > 0) { // CHECKBOX LIST
1096            if (index >= 0) chkControlList[index].checked = true;
1097
1098            var isCheckedGoods = false;
1099            var selectedGoodsList = "";
1100
1101            yes24GU.CreateMyListData(chkControlList, ordCountList, goodsOptList);
1102            /*
1103            //19세 상품 유무 체크
1104            this.isAvailableAdultGoodsCheck(chkControlList, ordCountList, goodsOptList, null, (loginU.isLogin() ? true : false), "List", null);
1105            */
1106
1107        } else { // ONLY ONE GOODS
1108            if (goodsOptList.length == 0) {
1109                alert('옵션을 선택하세요.');
1110                return;
1111            }
1112            var goods = eval("(" + $(goodsOptList[0]).val() + ")");
1113            var changeStateList = ["03", "04", "05", "07"];
1114            goods = this._changeGoodsStateForList(goods, changeStateList, "02");   // 리스트담기는 품절(03)/일시품절(04)/절판(05)인 경우도 가능 
1115
1116            isSubmit = this.isValidGoods(goods, $(ordCountList[0]).val(), true, false)
1117            if (isSubmit) {
1118                var optionValue = $("#SelectGoodsOptions option:selected").val();
1119                if (optionValue != undefined && optionValue != null) {
1120                    var goodsSeqNo = goods.goods_seq;
1121                    var url = YES_BLOG_URL + '/yes24/listAddGoodsPop.aspx?goodsno=' + goods.goods_no + "&option=" + goodsSeqNo; //obj.goods_seq; (IE 오류)
1122                }
1123                else {
1124                    var url = YES_BLOG_URL + '/yes24/listAddGoodsPop.aspx?goodsno=' + goods.goods_no;
1125                }
1126                if (codeName != null) url = urlU.getClickCodeUrl(url, codeName, code);
1127
1128                centerNewWinNoScroll(url, 'addinlist', "320", "180");
1129            }
1130        }
1131
1132    };
1133
1134    //리스트 담기 - 상세 left
1135    GoodsUtil.prototype.addToMyListByArea = function (areaid) {
1136        var goodsList = "";
1137        var isSelectedGoods = false;
1138        var isCheckedGoods = false;
1139
1140        this.isAvailableAdultGoodsCheck2(areaid, "Y", "List");
1141    };
1142
1143    //바로구매
1144    GoodsUtil.prototype.buyWithoutCart = function (index, categoryNumber, islayerUI, layerid, btnObj, codeName, code) {
1145        var orderURI = null;
1146        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
1147        var ordCountList = $("*[name='ORD_GOODS_CNT']");
1148        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
1149        var goodsOptMsgList = $("*[name='ORD_GOODS_OPT_MSG']");
1150
1151        if (goodsOptList.length == 0) {
1152            alert('옵션을 선택하세요.');
1153            return;
1154        }
1155
1156        var data = eval("(" + $(goodsOptList[index]).val() + ")");
1157        var ordCnt = $(ordCountList[index]).val();
1158        var goods_price = $("*[name='Goods_Price']").val();
1159
1160        if (this.isValidGoods(data, ordCnt, false, (chkControlList != null && chkControlList.length > 0) ? true : false)) {
1161            var optMsg = "";
1162            if (goodsOptMsgList.length != 0 && $(goodsOptMsgList[index]) != null)
1163                optMsg = $(goodsOptMsgList[index]).val();
1164
1165            if (data.opt_inst_yn == "Y" && optMsg == "") {
1166                alert("문구입력란을 입력해주세요.");
1167                return false;
1168            }
1169
1170            if (!loginU.isLogin()) {
1171                if (islayerUI) {
1172                    open_layer(layerid, btnObj);
1173                } else {
1174                    if (!loginU.checkLoginByMsgWithRedirectUtl('로그인을 하시겠습니까?', YES_DIRECT_ORDER_URL, this.getOrderData(data.goods_no, data.goods_seq, ordCnt, categoryNumber, "N", optMsg) + ((YES_DIRECTPAY_TYPE == '') ? "" : "&DirectPayType=" + YES_DIRECTPAY_TYPE))) {
1175                        orderURI = YES_DIRECT_ORDER_URL + this.getOrderData(data.goods_no, data.goods_seq, ordCnt, categoryNumber, "N", optMsg);
1176
1177                        if (codeName != null)
1178                            orderURI = urlU.getClickCodeUrl(orderURI, codeName, code);
1179                    }
1180                }
1181            } else {
1182                orderURI = YES_DIRECT_ORDER_URL + this.getOrderData(data.goods_no, data.goods_seq, ordCnt, categoryNumber, "Y", optMsg);
1183
1184                if (codeName != null)
1185                    orderURI = urlU.getClickCodeUrl(orderURI, codeName, code);
1186            }
1187
1188            if (orderURI != null) {
1189                var strUrl = orderURI + ((YES_DIRECTPAY_TYPE == '') ? "" : "&DirectPayType=" + YES_DIRECTPAY_TYPE);
1190
1191                //eBook 첫구매 여부 api 호출
1192                if (data.resource_key == 12 || data.resource_key == 13) {
1193                    this.checkBuyEbook(data,
1194                        function (isSuccess, data) {
1195                            if (isSuccess) {
1196                                if (data.HasEbook != "1") {
1197                                    //eBook 첫구매일 경우 eBook 구매 안내 팝업 호출
1198                                    var popUrl = "/product/goods/Popup?id=dPop_dBuyEbook&param=" + escape(strUrl);
1199                                    $.yesPop('dPop_dBuyEbook', layerid, { posTChg: true, posTGap: 0, cock: false, mask: true, fixed: false, pWidth: 480, ajaxURL: popUrl });
1200                                } else {
1201                                    location.href = strUrl;
1202                                }
1203                            }
1204                        }
1205                    );
1206                } else {
1207                    location.href = strUrl;
1208                }
1209            }
1210        }
1211    };
1212
1213    //eBook 첫구매 여부 호출
1214    GoodsUtil.prototype.checkBuyEbook = function (data, successCallback, failCallback) {
1215        $.ajax({
1216            cache: false,
1217            url: "https://ssl.yes24.com/Cart/GetEbookBuyHistoryExistsAjax?memNo=" + USERNO,
1218            dataType: "jsonp",
1219            data: "",
1220            success: function (data) {
1221                if (successCallback != undefined && successCallback != null)
1222                    successCallback(true, data);
1223            },
1224            error: function (xhr, status, errorMsg) {
1225                if (failCallback != undefined && failCallback != null)
1226                    failCallback(data);
1227            }
1228        });
1229    };
1230
1231    GoodsUtil.prototype.buyWithoutCartByMatchGoodsNo = function (goodsNo, isEbook, islayUI, layerid, btnObj, codeName, code, isGoodsOption) {
1232        if (goodsNo <= 0) { alert('상품을 선택하세요.'); return; }
1233        if (isGoodsOption == 'y') {
1234            if (confirm("본 상품은 옵션 선택 후 구매하실 수 있습니다.\r\n확인 버튼을 클릭하면 상품 상세 페이지로 이동합니다")) {
1235
1236                location.href = NOW_YES_HTTP_URL + "/24/goods/" + goodsNo;
1237                return;
1238            }
1239            else {
1240                return;
1241            }
1242        }
1243
1244        if (isEbook) {
1245            if (!loginU.checkLoginByMsg("로그인이 필요합니다.\r\n로그인 하시겠습니까?")) {
1246                return;
1247            }
1248            else {
1249                if (codeName != null) {
1250                    location.href = urlU.getClickCodeUrl(YES_DIRECT_ORDER_URL + this.getOrderData(goodsNo, 1, 1, "000", "Y", ''),
1251                                                codeName,
1252                                                code);
1253                }
1254                else {
1255                    location.href = YES_DIRECT_ORDER_URL + this.getOrderData(goodsNo, "1", 1, "000", "Y", '');
1256                }
1257            }
1258        }
1259        else {
1260            if (!loginU.isLogin()) {
1261                open_layer(layerid, btnObj);
1262
1263            }
1264            else {
1265                if (codeName != null) {
1266                    location.href = urlU.getClickCodeUrl(YES_DIRECT_ORDER_URL + this.getOrderData(goodsNo, 1, 1, "000", "Y", ''),
1267                                                codeName,
1268                                                code);
1269                }
1270                else {
1271                    location.href = YES_DIRECT_ORDER_URL + this.getOrderData(goodsNo, "1", 1, "000", "Y", '');
1272                }
1273            }
1274        }
1275    };
1276
1277    GoodsUtil.prototype.buyWithoutCartOnlyMatchEbookGoods = function (type, id) { //use goods detail page
1278        var goods_no = $("#EboosMatchGodosNo").val();
1279        var pcode = $("#pcode").val();
1280        var optMsg = "";
1281
1282
1283        if (type == "MEM_ORDER") {
1284            loginU.redirectLoginPage(YES_DIRECT_ORDER_URL, this.getOrderDataWithCode(goods_no, 1, 1, '000', "Y", optMsg, "pcode", pcode).replace('?', ''));
1285        } else if (type == "NONE_MEM_ORDER") {
1286            location.href = urlU.getClickCodeUrl(YES_DIRECT_ORDER_URL + this.getOrderData(goods_no, 1, 1, '000', "N", optMsg), "pcode", pcode);
1287        } else {
1288            $('#' + id).parent().remove();
1289            return;
1290        }
1291    };
1292
1293    GoodsUtil.prototype.buyWithoutCartByGoodsNo = function (goodsNo, ordCount, categoryNumber, entrNo, memNo) {
1294        if (goodsNo <= 0) { alert('상품을 선택하세요.'); return; }
1295        if (!loginU.isLogin()) {
1296            if (categoryNumber.startsWith("018")) {//소장용, 바로구매하기
1297                if (!loginU.checkLoginByMsgWithRedirectUtl('로그인을 하시겠습니까?', YES_DIRECT_ORDER_URL, this.getOrderData(goodsNo, 1, ordCount, categoryNumber, "N", ''))) {
1298                    location.href = YES_DIRECT_ORDER_URL + this.getOrderData(goodsNo, "1", ordCount, categoryNumber, "N", '');
1299                }
1300            }
1301            else {
1302                if (entrNo != null && memNo != null) {
1303                    if (this.checkSeller(entrNo, memNo) == "Y") { alert('중고샵판매자 본인의 상품은 구매하실 수 없습니다.'); }
1304                    else {
1305                        this.checkUsedHub(goodsNo, YES_DIRECT_ORDER_U
1305RL + this.getOrderData(goodsNo, "1", ordCount, categoryNumber, "N", ''));
1306                    }
1307                } else {
1308                    this.checkUsedHub(goodsNo, YES_DIRECT_ORDER_URL + this.getOrderData(goodsNo, "1", ordCount, categoryNumber, "N", ''));
1309                }
1310            }
1311        } else {
1312            if (entrNo != null && memNo != null) {
1313                if (this.checkSeller(entrNo, memNo) == "Y") { alert('중고샵판매자 본인의 상품은 구매하실 수 없습니다.'); }
1314                else { this.checkUsedHub(goodsNo, YES_DIRECT_ORDER_URL + this.getOrderData(goodsNo, "1", ordCount, categoryNumber, "Y", '')); }
1315            } else {
1316                this.checkUsedHub(goodsNo, YES_DIRECT_ORDER_URL + this.getOrderData(goodsNo, "1", ordCount, categoryNumber, "Y", ''));
1317            }
1318        }
1319    };
1320
1321    // 중고샵 허브 채널예스 바로 구매
1322    GoodsUtil.prototype.checkUsedHub = function (goodsNo, url) {
1323        if (document.referrer.indexOf("yes24.com/Animation") != -1) {
1324            this.checkValidGoods(goodsNo, false,
1325                function (isSuccess, data) {
1326                    if (isSuccess) {
1327                        location.href = url;
1328                    }
1329                    else {
1330                        yes24GU.showCartError(data.ErrorCodes[0], data.Goods[0], '');
1331                    }
1332                },
1333                function (data) { }
1334            );
1335        }
1336        else {
1337            this.checkValidGoodsToJson(goodsNo, false,
1338                function (isSuccess, data) {
1339                    if (isSuccess) {
1340                        location.href = url;
1341                    }
1342                    else {
1343                        yes24GU.showCartError(data.ErrorCodes[0], data.Goods[0], '');
1344                    }
1345                },
1346                function (data) { }
1347            );
1348        }
1349    };
1350
1351    GoodsUtil.prototype.buyWithoutCartOnlyGoods = function (type, id) { //use goods detail page
1352        var data = eval("(" + $("*[name='ORD_GOODS_OPT']").val() + ")");
1353        var ordCnt = $("*[name='ORD_GOODS_CNT']").val();
1354        var dispNo = $("#dispNo").val();
1355        var goodsOptMsgList = $("*[name='ORD_GOODS_OPT_MSG']");
1356        var optMsg = "";
1357        var directPayParam = ((YES_DIRECTPAY_TYPE == '') ? "" : "&DirectPayType=" + YES_DIRECTPAY_TYPE);
1358        var params;
1359
1360        if (goodsOptMsgList.length != 0 && $(goodsOptMsgList[0]) != null)
1361            optMsg = $(goodsOptMsgList[0]).val();
1362
1363        if (type == "MEM_ORDER") {
1364            params = this.getOrderData(data.goods_no, data.goods_seq, ordCnt, dispNo, "Y", optMsg).replace('?', '') + directPayParam;
1365            loginU.redirectLoginPage(YES_DIRECT_ORDER_URL, params);
1366        } else if (type == "NONE_MEM_ORDER") {
1367            params = this.getOrderData(data.goods_no, data.goods_seq, ordCnt, dispNo, "N", optMsg) + directPayParam;
1368            location.href = YES_DIRECT_ORDER_URL + params;
1369        } else {
1370            $('#' + id).parent().remove();
1371            return;
1372        }
1373    };
1374    //바로 구매 - 상세, 전시
1375    GoodsUtil.prototype.buyDigitalMoney = function (index, categoryNumber, btnObj, gapX, gapY) {
1376        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
1377        var ordCountList = $("*[name='ORD_GOODS_CNT']");
1378        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
1379        var goodsOptMsgList = $("*[name='ORD_GOODS_OPT_MSG']");
1380
1381        if (goodsOptList.length == 0) {
1382            alert('상품을 선택하세요.');
1383            return;
1384        }
1385
1386        var data = eval("(" + $(goodsOptList[index]).val() + ")");
1387        var ordCnt = $(ordCountList[index]).val();
1388
1389        if (this.isValidGoods(data, ordCnt, false, (chkControlList != null && chkControlList.length > 0) ? true : false)) {
1390            var optMsg = "";
1391            if (goodsOptMsgList.length != 0 && $(goodsOptMsgList[index]) != null)
1392                optMsg = $(goodsOptMsgList[index]).val();
1393
1394            if (data.opt_inst_yn == "Y" && optMsg == "") {
1395                alert("문구입력란을 입력해주세요.");
1396                return false;
1397            }
1398
1399            var url = YES_DIGITAL_ORDER_URL + this.getOrderDataByDigital(data.goods_no, data.goods_seq, ordCnt, categoryNumber, optMsg);
1400            centerNewWin2(url, 'popGoodsDigitalMoney', 460, 488);
1401        }
1402    };
1403    // 상품 유효성 Ajax로 체크 -채널yes 에서 사용.
1404    // goodsNos : ","로 구분된 상품 번호
1405    // successCallback(성공여부, 메타데이터);
1406    // failCallback(실패메타데이터);
1407    GoodsUtil.prototype.checkValidGoods = function (goodsNos, optionCheck, successCallback, failCallback) {
1408        var data = {};
1409        data.goodsNos = goodsNos;
1410        data.checkOption = (optionCheck ? "Y" : "N");
1411        $.ajax({
1412            type: "GET",
1413            contentType: "application/json; charset=utf-8",
1414            crossdomain: true,
1415            dataType: "jsonp",
1416            jsonp: 'callback',
1417            url: NOW_YES_HTTP_URL + "/24/Order/GetCheckOrderGoods",
1418            data: data,
1419            success: function (data) {
1420                if (successCallback != undefined && successCallback != null)
1421                    successCallback(data.IsSuccess, data);
1422            },
1423            error: function (data) {
1424                if (failCallback != undefined && failCallback != null)
1425                    failCallback(data);
1426            }
1427        });
1428    };
1429
1430    // 상품 유효성 Ajax로 체크
1431    // goodsNos : ","로 구분된 상품 번호
1432    // successCallback(성공여부, 메타데이터);
1433    // failCallback(실패메타데이터);
1434    GoodsUtil.prototype.checkValidGoodsToJson = function (goodsNos, optionCheck, successCallback, failCallback, isMyList) {
1435        if (isMyList == undefined || isMyList == null)
1436            isMyList = false;
1437
1438        $.ajax({
1439            type: "POST",
1440            contentType: "application/json",
1441            dataType: "json",
1442            url: NOW_YES_HTTP_URL + "/24/Order/CheckOrderGoods?goodsNos=" + goodsNos + "&checkOption=" + (optionCheck ? "Y" : "N") + "&isMyList=" + isMyList,
1443            data: "",
1444            success: function (data) {
1445                if (successCallback != undefined && successCallback != null)
1446                    successCallback(data.IsSuccess, data);
1447            },
1448            error: function (data) {
1449                if (failCallback != undefined && failCallback != null)
1450                    failCallback(data);
1451            }
1452        });
1453    };
1454
1455
1456    // 에러코드에 맞는 메세지
1457    /*
1458    -1  : 상품정보 오류
1459    -2  : 이북상품 오류
1460    -3  : 판매예정, 판매중인 상품이 아닌 오류
1461    -4  : 성인상품일시 로그인 안한 오류
1462    -5  : 성인상품일시 제한 오류
1463    -6  : 재고수량 오류
1464    -7  : 카트담기 제한 상품 오류
1465    -8  : 최대허용 주문수량 오류
1466    -9  : 옵션상품일 경우 카트 담지 못하는 오류
1467    -10 : 성인인증이 필요한 상품 오류
1468    */
1469    GoodsUtil.prototype.showCartError = function (errorCode, data, cartUrl, list_Yn) {//, list_Yn
1470        var msg = '';
1471        var isLoginType = false;
1472        var isAdultAuth = false;
1473        if (list_Yn == undefined) list_Yn = "N";
1474
1475        var returnGoods = "";
1476        if (list_Yn) {
1477            for (var i = 0; i < data.length; i++) {
1478                returnGoods += "-" + data[i].GoodsName + "\n";
1479            }
1480        }
1481        if (data.LimitAge == null) {
1482            data.LimitAge = 19;
1483        }
1484
1485        switch (errorCode) {
1486            case -1:
1487                msg = '유효한 상품이 아닙니다.\r\n다시확인해주세요.';
1488                break;
1489            case -2:
1490                msg = 'eBook 상품은 로그인을 먼저 해주세요.\r\n로그인 하시겠습니까?';
1491                isLoginType = true;
1492                break;
1493            case -3:
1494                msg = '[' + data.GoodsName + '](일시품절 상품)은 카트에 담을 수 없는 상품입니다.';
1495                break;
1496            case -4:
1497                msg = '[' + data.LimitAge.toString() == "15" ? "15" : "19" + '세 이상] 나이제한 상품 입니다.\n로그인 후 이용하세요.';
1498                isLoginType = true;
1499                break;
1500            case -5:
1501                var todayDate = new Date();
1502                //TICKET-17596 나이제한 얼럿 문구 수정 요청
1503                if ((todayDate.getUTCMonth() + 1) == 1) {
1504                    msg = '[' + data.LimitAge.toString() == "15" ? "15" : "19" + '세 이상] 나이제한 상품 입니다.\n제한 나이가 넘었으나 상품을 확인할 수 없는 고객님께서는 다시 로그인 후 이용해 주세요.';
1505                } else {
1506                    msg = '[' + data.LimitAge.toString() == "15" ? "15" : "19" + '세 이상] 나이제한 상품 입니다.';
1507                }
1508                break;
1509            case -6:
1510                msg = '[' + data.GoodsName + ']의 재고수량이 부족합니다.';
1511                break;
1512            case -7:
1513                msg = '[' + data.GoodsName + ']은 카트에 담을 수 없는 상품입니다.'
1514                break;
1515            case -8:
1516                msg = '[' + data.GoodsName + ']은 최대허용 주문수량 [' + data.MaxAmountPerOrd + ']을 초과하였습니다.'
1517                break;
1518            case -9:
1519                msg = '상품 상세에서 옵션 선택 후, 구입 가능합니다.';
1520                break;
1521            case -10:
1522                isAdultAuth = true;
1523                break;
1524        }
1525
1526        if (isLoginType) {
1527
1528            var url = YES_HTTPS_URL + '/Templates/FTLogin.aspx?ReturnURL=' + escape(location.href);
1529
1530            if (errorCode == -5 && cartUrl != undefined && cartUrl != null && cartUrl != '') {
1531                url = cartUrl;
1532            }
1533
1534            alert(msg);
1535            location.href = url;
1536
1537        }
1538        else if (isAdultAuth) {
1539            location.href = YES_HTTPS_URL + '/Member/Adult.aspx?ReturnURL=' + escape(location.href);
1540        }
1541        else {
1542            alert(msg);
1543        }
1544    }
1545
1546    GoodsUtil.prototype.showCartErrorDetailOptionCheck = function (errorCode, data, cartUrl, list_Yn) {//, list_Yn
1547        var msg = '';
1548        var sMsgArr = "";
1549        var isLoginType = false;
1550        var isAdultAuth = false;
1551        if (list_Yn == undefined) list_Yn = "N";
1552
1553        var returnGoods = "";
1554        if (list_Yn) {
1555            for (var i = 0; i < data.length; i++) {
1556                returnGoods += "-" + data[i].GoodsName + "\n";
1557            }
1558        }
1559        for (var i = 0; i < errorCode.length; i++) {
1560            if (data[i].LimitAge == null) {
1561                data[i].LimitAge = 19;
1562            }
1563            switch (errorCode[i]) {
1564                case -1:
1565                    msg = '유효한 상품이 아닙니다.\r\n다시확인해주세요.\n\n';
1566                    sMsgArr += "상품명: " + data[i].GoodsName + "\n";
1567                    break;
1568                case -2:
1569                    msg = 'eBook 상품은 로그인을 먼저 해주세요.\r\n로그인 하시겠습니까?';
1570                    sMsgArr += "상품명: " + data[i].GoodsName + "\n";
1571                    isLoginType = true;
1572                    break;
1573                case -3:
1574                    msg = '일시품절, 품절인 상품이 포함되어있습니다.\n\n';
1575                    sMsgArr += "상품명: " + data[i].GoodsName + "\n";
1576                    break;
1577                case -4:
1578                    msg = '[' + data[i].LimitAge.toString() == "15" ? "15" : "19" + '세 이상] 나이제한 상품 입니다.\n로그인 후 이용하세요.\n';
1579                    isLoginType = true;
1580                    break;
1581                case -5:
1582                    var todayDate = new Date();
1583                    //TICKET-17596 나이제한 얼럿 문구 수정 요청
1584                    if ((todayDate.getUTCMonth() + 1) == 1) {
1585                        msg = '[' + data[i].LimitAge.toString() == "15" ? "15" : "19" + '세 이상] 나이제한 상품 입니다.\n\n';
1586                    } else {
1587                        msg = '[' + data[i].LimitAge.toString() == "15" ? "15" : "19" + '세 이상] 나이제한 상품 입니다.\n제한 나이가 넘었으나 상품을 확인할 수 없는 고객님께서는 다시 로그인 후 이용해 주세요.\n\n';
1588                    }
1589                    sMsgArr += "상품명: " + data[i].GoodsName + "\n";
1590                    break;
1591                case -6:
1592                    msg = '재고수량이 부족한 상품이 포함되어 있습니다.\n\n';
1593                    sMsgArr += "상품명: " + data[i].GoodsName + "\n";
1594                    break;
1595                case -7:
1596                    msg = '[' + data[i].GoodsName + ']은 카트에 담을 수 없는 상품입니다.\n\n'
1597                    sMsgArr += "상품명: " + data[i].GoodsName + "\n";
1598                    break;
1599                case -8:
1600                    msg = '[' + data[i].GoodsName + ']은 최대허용 주문수량 [' + data[i].MaxAmountPerOrd + ']을 초과하였습니다.\n\n'
1601                    sMsgArr += "상품명: " + data[i].GoodsName + "\n";
1602                    break;
1603                case -9:
1604                    msg = '옵션상품은 상품상세페이지에서 카트에 담을 수 있습니다.\n카트에 담지 못한 상품을 확인해주세요.\n\n';
1605                    sMsgArr += "상품명: " + data[i].GoodsName + "\n";
1606                    break;
1607                case -10:
1608                    isAdultAuth = true;
1609                    break;
1610            }
1611        }
1612
1613        if (isLoginType) {
1614
1615            var url = YES_HTTPS_URL + '/Templates/FTLogin.aspx?ReturnURL=' + escape(location.href);
1616
1617            if (errorCode == -5 && cartUrl != undefined && cartUrl != null && cartUrl != '') {
1618                url = cartUrl;
1619            }
1620
1621            alert(msg + sMsgArr);
1622            location.href = url;
1623
1624        }
1625        else if (isAdultAuth) {
1626            location.href = YES_HTTPS_URL + '/Member/Adult.aspx?ReturnURL=' + escape(location.href);
1627        }
1628        else {
1629            alert(msg + sMsgArr);
1630        }
1631    }
1632    //미리보기 - 전시
1633    GoodsUtil.prototype.openPreviewCheck = function (goodsNo) {
1634
1635        yes24GU.checkValidGoodsToJson(goodsNo, false,
1636            function (isSuccess, data) {
1637
1638                if (isSuccess) {
1639                    openPreviewForDisplay(goodsNo);
1640                }
1641                else {
1642                    if ((data.ErrorCodes[0] == -4 || data.ErrorCodes[0] == -5 || data.ErrorCodes[0] == -10) && data.Goods[0].CanRead
1642IfGoodsForAdultOnly == "Y") {
1643                        openPreviewForDisplay(goodsNo);
1644                    }
1645                    else if (data.ErrorCodes[0] == -3 && data.Goods[0].CanReadIfGoodsForAdultOnly == "N") {
1646                        openPreviewForDisplay(goodsNo);
1647                    }
1648                    else {
1649                        yes24GU.showCartError(data.ErrorCodes[0], data.Goods[0], '');
1650                    }
1651                }
1652            },
1653            function (data) { }
1654        );
1655    }
1656    //미리보기 - ebook
1657    GoodsUtil.prototype.openEBookPreview = function (goodsNo) {
1658
1659        var width = 790;
1660        var height = 880;
1661        var c = 0;
1662        var d = 0;
1663
1664        if (screen.width >= screen.height) {
1665            if (screen.width <= 1024 || screen.height <= 768) {
1666                c = 50;
1667                d = 30;
1668                width = 618;
1669                height = 708;
1670            } else {
1671                c = 100;
1672                d = 30;
1673            }
1674        } else {
1675            c = 30;
1676            d = 30;
1677        }
1678        var url = "http://epreview.yes24.com/preview/viewer/viewer.html?ebookcode=" + goodsNo + "&dm=yes24.com"
1679
1680        window.open(url, "yes24preview", "menubar=no,status=no,toolbar=no,scrolling=no,resizable=yes,width=" 
1680+ width + ",height=" + height + ", top=" + c + ",left=" + d);
1681    }
1682    //오디오북 미리듣기
1683    GoodsUtil.prototype.PreviewAudioBookPlaying = function (previewInfo, goodsNo) {
1684        if (previewInfo == undefined || previewInfo.length == 0) {
1685            alert("미리듣기 정보 없습니다.");
1686            return false;
1687        }
1688
1689        previewInfo += "|";
1690        previewInfo += encodeURIComponent("오디오북 미리듣기") + "|";
1691        previewInfo += "01" + "|";
1692
1693        var form = this.getFormInstance();
1694        var oInput = new Object();
1695
1696        oInput = document.createElement("INPUT");
1697        oInput.type = "hidden";
1698        oInput.id = "chkTrackList";
1699        oInput.name = "chkTrackList";
1700        oInput.value = previewInfo;
1701
1702        form.appendChild(oInput);
1703
1704        oInput = document.createElement("INPUT");
1705        oInput.type = "hidden";
1706        oInput.id = "goodsNo";
1707        oInput.name = "goodsNo";
1708        oInput.value = goodsNo;
1709        form.appendChild(oInput);
1710
1711        oInput = document.createElement("INPUT");
1712        oInput.type = "hidden";
1713        oInput.id = "CategoryNumber";
1714        oInput.name = "CategoryNumber";
1715        oInput.value = "017";
1716        form.appendChild(oInput);
1717
1718        oInput = document.createElement("INPUT");
1719        oInput.type = "hidden";
1720        oInput.id = "PreviewType";
1721        oInput.name = "PreviewType";
1722        oInput.value = "AUDIO";
1723        form.appendChild(oInput);
1724
1725        var openWindowStyle = "width=430,height=230,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no;fullscreen;";
1726        var actStr = '/Goods/player/PreMusicPlayer.aspx';
1727        rtn = window.open("", "PreMusicPlay", openWindowStyle);
1728        form.action = actStr;
1729        form.target = 'PreMusicPlay';
1730        form.method = "GET";
1731        form.submit();
1732    }
1733    //상세 - 리스트 카트담기 
1734    GoodsUtil.prototype.AddToCartByAreaOptionCheck = function (areaid) {
1735        var cartData = "";
1736        var isSelectedGoods = false;
1737        var isCheckedGoods = false;
1738
1739        //19세 상품 유무 체크
1740        this.isAvailableAdultGoodsCheckOptionCheck(areaid, (loginU.isLogin() ? true : false), "Cart");
1741    };
1742
1743    // 성인 상품 체크
1744    GoodsUtil.prototype.isAvailableAdultGoodsCheckOptionCheck = function (areaid, loginYn, islayerUI, layerid, categoryNumber) {
1745        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
1746        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
1747        var ordCountList = $("*[name='ORD_GOODS_CNT']");
1748        var goodsOptMsgList = $("*[name='ORD_GOODS_OPT_MSG']"); // null처리
1749
1750        var bRet;
1751        var sMsg;
1752        var CheckGoods = "";
1753        var ReturnGoods = "";
1754        var list_yn, cart_yn = true;
1755        var sMsg = "";
1756        var CheckGoodsCount = 0;
1757        $('#' + areaid).find(":checkbox:checked").each(function () {
1758            if (this.checked == true) {
1759                var goods = eval("(" + this.value + ")");
1760                if (CheckGoodsCount == 0) CheckGoods = goods.goods_no;
1761                else CheckGoods += ',' + goods.goods_no;
1762                CheckGoodsCount++;
1763            }
1764        });
1765
1766        if (CheckGoods == "") {
1767            alert("상품을 선택하세요.");
1768            return false;
1769        }
1770
1771        var isSubmit = false;
1772        yes24GU.checkValidGoodsToJson(CheckGoods, true,
1773            function (isSuccess, data) {
1774                if (isSuccess) {
1775                    var goodsNo = 0;
1776                    var goodsSeqNo = 1;
1777                    var ordCount = 1;
1778                    var cartData = "";
1779                    var optMsg = "";
1780                    $('#' + areaid).find(":checkbox:checked").each(function () {
1781                        isSubmit = false;
1782                        if (this.checked == true) {
1783                            var goods = eval("(" + this.value + ")");
1784                            goodsNo = goods.goods_no;
1785                            if (goods.goods_seq != undefined && goods.goods_seq > 0)
1786                                goodsSeqNo = goods.goods_seq;
1787                            isSubmit = yes24GU.isValidGoods(goods, ordCount, true, true);  //상품 옵션 확인 [goods,ordCnt,isCart,isListType,isMyList]
1788                            if (isSubmit) {
1789                                cartData += yes24GU.getCartData(goods, ordCount, optMsg);   //[goods,ordCnt,ordGoodsOptMsg]
1790                            }
1791                            else { return false; }
1792                        }
1793                    });
1794
1795                    if (isSubmit) {
1796                        yes24GU.submitCartData(cartData, categoryNumber);
1797                    }
1798                } else {
1799                    yes24GU.showCartErrorDetailOptionCheck(data.ErrorCodes, data.Goods, 'Y');
1800                } //else
1801            } //fn
1802        ,
1803        function (data) {
1804            return false;
1805        }
1806        , false
1807       );
1808        return bRet;
1809    };
1810
1811    //카트에 넣기 - 전시개편
1812    GoodsUtil.prototype.addToCartNew = function (index, categoryNumber, islayerUI, layerid, codeName, code) {
1813        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
1814        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
1815        var ordCountList = $("*[name='ORD_GOODS_CNT']");
1816        var goodsOptMsgList = $("*[name='ORD_GOODS_OPT_MSG']"); // null처리
1817
1818        var isSubmit = false;
1819        var cartData = "";
1820        var AdultGoods = [];
1821        if (chkControlList.length > 0) { // CHECKBOX LIST
1822            if (index >= 0) chkControlList[index].checked = true;
1823
1824            var isSelectedGoods = false;
1825            var isCheckedGoods = false;
1826
1827            //19세 상품 유무 체크
1828            this.isAvailableAdultGoodsCheckNew(chkControlList, ordCountList, goodsOptList, goodsOptMsgList, (loginU.isLogin() ? true : false), "Cart", categoryNumber, islayerUI, layerid, codeName, code);
1829
1830        } else {
1831            alert("상품을 선택하세요.");
1832            return;
1833        }
1834
1835        if (isSubmit) {
1836            if (islayerUI) {
1837                var msg = this.ajaxCartData(cartData, categoryNumber, codeName, code);
1838                if (msg == '') {
1839                    $.yesPop('dPop_cart', layerid, { cock: false, mask: false, pWidth: 268 });
1840                }
1841                else alert(msg);
1842            } else {
1843                this.submitCartData(cartData, categoryNumber, codeName, code);
1844            }
1845        }
1846    };
1847
1848    // 성인 상품 체크
1849    this.isAvailableAdultGoodsCheckNew = function (chkControlList, ordCountList, goodsOptList, goodsOptMsgList, loginYn, CartorList, categoryNumber, islayerUI, layerid, codeName, code) {
1850        var bRet;
1851        var sMsg;
1852        var CheckGoods = "";
1853        var ReturnGoods = "";
1854        var list_yn, cart_yn = true;
1855        var sMsg = "";
1856
1857        for (var i = 0; i < chkControlList.length; i++) {
1858            if (chkControlList[i].checked) {
1859                var goods = eval("(" + $(goodsOptList[i]).val() + ")");
1860                if (i == 0) CheckGoods = goods.goods_no;
1861                else CheckGoods += ',' + goods.goods_no;
1862            } //if checked
1863        }
1864
1865        if (CheckGoods == "") {
1866            alert("상품을 선택하세요.");
1867            return false;
1868        }
1869        else {
1870
1871            this.checkValidGoodsToJson(CheckGoods, false,
1872                function (isSuccess, data) {
1873                    if (isSuccess) {
1874                        if (CartorList == "Cart") {
1875                            yes24GU.CreateCartDataNew(chkControlList, ordCountList, goodsOptList, goodsOptMsgList, categoryNumber, islayerUI, layerid, codeName, code);
1876                        }
1877                        else if (CartorList == "List") {
1878                            yes24GU.CreateMyListData(chkControlList, ordCountList, goodsOptList);
1879                        }
1880                        return true;
1881                    }
1882                    else {
1883                        //상품 유효성 체크
1884                        if (yes24GU.VailableAdultGoodsErrorCheck(data, loginYn)) {
1885                            if (CartorList == "Cart") {
1886                                yes24GU.CreateCartDataNew(chkControlList, ordCountList, goodsOptList, goodsOptMsgList, categoryNumber, islayerUI, layerid, codeName, code);
1887                            }
1888                            else if (CartorList == "List") {
1889                                yes24GU.CreateMyListData(chkControlList, ordCountList, goodsOptList);
1890                            }
1891                        } //if
1892                    } //else
1893                } //fn
1894            ,
1895            function (data) { return false; }
1896           );
1897        } //else
1898        return bRet;
1899    };
1900
1901    this.CreateCartDataNew = function (chkControlList, ordCountList, goodsOptList, goodsOptMsgList, categoryNumber, islayerUI, layerid, codeName, code) {
1902        var isSubmit;
1903        var cartData = "";
1904        for (var i = 0; i < chkControlList.length; i++) {
1905            if (chkControlList[i].checked) {
1906                isCheckedGoods = true;
1907                var goods = eval("(" + $(goodsOptList[i]).val() + ")");
1908                var cnt = 1;
1909                if (ordCountList.length != 0 && $(ordCountList[i]) != null)
1910                    cnt = $(ordCountList[i]).val();
1911                isSubmit = yes24GU.isValidGoods(goods, cnt, true, true);
1912                if (isSubmit) {
1913                    var optMsg = "";
1914                    if (goodsOptMsgList.length != 0 && $(goodsOptMsgList[i]) != null)
1915                        optMsg = $(goodsOptMsgList[i]).val();
1916                    cartData += this.getCartData(goods, cnt, optMsg);
1917                    isSelectedGoods = true;
1918                }
1919                else { break; }
1920            }
1921        } //for
1922
1923        if (isSubmit) {
1924            if (islayerUI) {
1925                var msg = this.ajaxCartData(cartData, categoryNumber, codeName, code);
1926                if (msg == '') {
1927                    $.yesPop('dPop_cart', layerid, { cock: false, mask: false, pWidth: 268 });
1928                }
1929                else alert(msg);
1930            } else {
1931                this.submitCartData(cartData, categoryNumber, codeName, code);
1932            }
1933        }
1934    };
1935
1936    //전시 개편 - 단건 카트담기
1937    GoodsUtil.prototype.addToCartSetPosByOnlyOneGoodsNoNew = function (goodsNo, index, categoryNumber, obj) {
1938        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
1939        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
1940        var ordCountList = $("*[name='ORD_GOODS_CNT']");
1941        var ordCnt = 1;
1942        if (ordCountList.length != 0) {
1943            ordCnt = $(ordCountList[index]).val();
1944        }
1945        this.addToCartByGoodsNoNew(goodsNo, ordCnt, categoryNumber, obj);
1946    }
1947
1948    //전시 개편 - 카트담기
1949    GoodsUtil.prototype.addToCartByGoodsNoNew = function (goodsNo, ordCount, categoryNumber, obj) {
1950        if (goodsNo <= 0) { alert('상품을 선택하세요.'); return; }
1951        if (categoryNumber == null) { categoryNumber = ""; }
1952
1953        yes24GU.checkValidGoodsToJson(goodsNo, false,
1954            function (isSuccess, data) {
1955                if (isSuccess) {
1956                    var cartData = yes24GU.getCartDataByNo(goodsNo, 1, ordCount, '');
1957
1958                    //dfinery 디파이너리 카트 넣기 로그. // yes24common.js
1959                    sendDfineryAddCartLogByGoodsNo(goodsNo);
1960
1961                    var msg = yes24GU.ajaxCartData(cartData, categoryNumber);
1962                    if (msg == '') {
1963                        $.yesPop('dPop_cart', obj, { cock: false, mask: false, pWidth: 268 });
1964                    }
1965                    else alert(msg);
1966                }
1967                else {
1968                    yes24GU.showCartError(data.ErrorCodes[0], data.Goods[0], '');
1969                }
1970            },
1971            function (data) { }
1972        );
1973    }
1974
1975    //전시 개편 - 전시
1976    GoodsUtil.prototype.addToMyListNew = function (index, codeName, code) {
1977        var goodsOptList = $("*[name='ORD_GOODS_OPT']");
1978        var chkControlList = $("*[name='ORD_GOODS_CHKBOX']");
1979        var ordCountList = $("*[name='ORD_GOODS_CNT']");
1980        var AdultGoods = [];
1981        var isSubmit = false;
1982        var loginMessage = "eBook 상품은 로그인을 먼저 해주세요.\r\n로그인 하시겠습니까?";
1983        var checkBoxCount = 0;
1984
1985        for (var i = 0; i < chkControlList.length; i++) {
1986            if (chkControlList[i].checked) {
1987                checkBoxCount++;
1988
1989                var goods = eval("(" + $(goodsOptList[i]).val() + ")");
1990
1991                if (goods.resource_key != "12" && goods.resource_key != "13") {
1992                    loginMessage = "로그인이 필요합니다.\r\n로그인 하시겠습니까?";
1993                    break;
1994                }
1995            }
1996        }
1997
1998        if (checkBoxCount == 0) {
1999            alert("상품을 선택하세요.");
2000            return;
2001        }
2002
2003        if (!loginU.checkLoginByMsg(loginMessage)) {
2004            return;
2005        }
2006
2007        if (chkControlList.length > 0) { // CHECKBOX LIST
2008            if (index >= 0) chkControlList[index].checked = true;
2009
2010            var isSelectedGoods = false;
2011            var isCheckedGoods = false;
2012            var selectedGoodsList = "";
2013
2014            yes24GU.CreateMyListData(chkControlList, ordCountList, goodsOptList);
2015        } else {
2016            alert("상품을 선택하세요.");
2017            return;
2018        }
2019    };
2020
2021    this.checkUnder19AdultMsgAlert = function (limitAge) {
2022        var todayDate = new Date();
2023        if (limitAge == null) {
2024            limitAge = 19;
2025        }
2026        //TICKET-17596 나이제한 얼럿 문구 수정 요청
2027        if ((todayDate.getUTCMonth() + 1) == 1) {
2028            alert("[" + limitAge.toString() == "15" ? "15" : "19" + "세 이상] 나이제한 상품입니다.\n제한 나이가 넘었으나 상품을 확인할 수 없는 고객님께서는 다시 로그인 후 이용해 주세요.");
2029        } else {
2030            alert("[" + limitAge.toString() == "15" ? "15" : "19" + "세 이상] 나이제한 상품입니다.");
2031        }
2032    }
2033}
2034
2035function open_urllayerAddGap(url, obj, gapX, gapY) {
2036    if ($('#popGoodsDigitalMoney').length == 0) {
2037        var layer = document.createElement("div");
2038        document.body.appendChild(layer);
2039        $(layer).css("position", "absolute");
2040        $(layer).hide();
2041
2042        var x, y;
2043        x = get_objx(obj) + (gapX);
2044        y = get_objy(obj) + (gapY);
2045
2046        $(layer).html("<iframe frameborder='0' width='445' height='540' margin='0' padding='0' src='" + url + "'>");
2047        set_layerxy($(layer), x, y);
2048        $(layer).show();
2049    }
2050}
2051function close_urllayerAddGap() {
2052    $('#popGoodsDigitalMoney').parent().remove();
2053}
2054function get_objx(obj) {
2055    return $(obj).offset().left + $(obj).width() / 2;
2056}
2057function get_objy(obj) {
2058    return $(obj).offset().top + $(obj).height();
2059}
2060function set_layerxy(obj, x, y) {
2061    $(obj).css("top", y);
2062    $(obj).css("left", x - $(obj).width() / 2);
2063}
2064
2065function openPreviewForDisplay(goodsid, querystring) {
2066
2067    var popleftgap = 0;
2068    var poptopgap = 0;
2069    var owinwidth = 0;
2070    var owinheight = 0;
2071
2072    if (screen.width >= screen.height) {
2073        if (screen.width <= 1024 || screen.height <= 768) {
2074            popleftgap = 50;
2075            poptopgap = 30;
2076            owinwidth = screen.availWidth - 100;
2077            owinheight = screen.availHeight - 90;
2078        } else {
2079            popleftgap = 100;
2080            poptopgap = 30;
2081            owinwidth = screen.availWidth - 200;
2082            owinheight = screen.availHeight - 90;
2083        }
2084    } else {
2085        popleftgap = 30;
2086        poptopgap = 30;
2087        owinwidth = screen.availWidth - 60;
2088        owinheight = screen.availHeight - 190;
2089    }
2090    if (querystring) {
2091        if (querystring.indexOf("?") < 0) {
2092            querystring = "?" + querystring;
2093        }
2094        window.open('/Product/Viewer/Preview/' + goodsid + querystring, 'yes24preview', 'menubar=no,status=no,toolbar=no,resizable=yes,top=' + poptopgap + ',left=' + popleftgap + ',width=' + owinwidth + ',height=' + owinheight);
2095    } else {
2096        window.open('/Product/Viewer/Preview/' + goodsid, 'yes24preview', 'menubar=no,status=no,toolbar=no,resizable=yes,top=' + poptopgap + ',left=' + popleftgap + ',width=' + owinwidth + ',height=' + owinheight);
2097    }
2098    return false;
2099}
2100
2101// !!!
2102var yes24GU = new GoodsUtil();
2103
2104//배송예정일 조회:리스트UI
2105function getDeliveryPlannedDateFrom24(zipCd, zipSeq, buMngNo, type) {
2106    //상품영역 Wrapper: 공통모듈 호출하는 부분
2107    var goodsItem = $(".clearfix > li");
2108    if (type == "SpecialDisplay") {
2109        goodsItem = $(".list > tbody > tr");
2110    }
2111    var delvTextArea = $("[name=delvTextArea]");
2112    var arrGoodsNoList = [];
2113    var goodsNos = '';
2114    var SSL_API_PATH = "https://sslapi.yes24.com";
2115
2116    if (PAYMENT_API_URL) {
2117        SSL_API_PATH = PAYMENT_API_URL;
2118    }
2119
2120    if (goodsItem.length > 0 && delvTextArea.length > 0) {
2121        //상품번호 파라미터 생성
2122        goodsItem.each(function () {
2123            if (this.dataset.goodsNo) {
2124                arrGoodsNoList.push(this.dataset.goodsNo);
2125            }
2126        });
2127        goodsNos = arrGoodsNoList.join(",");
2128
2129        var ajaxParam = {
2130            goodsNos: goodsNos,
2131            goodsSeq: 1,
2132            goodsCnt: 1,
2133            _partBookSeq: 0,
2134            zipCd: zipCd,
2135            zipSeq: zipSeq,
2136            buMngNo: buMngNo
2137        };
2138
2139        $.ajax({
2140            type: 'POST',
2141            url: SSL_API_PATH + '/DelvTraceInfo/GetDelvDateV2List',
2142            data: ajaxParam,
2143            dataType: 'json',
2144            cache: false,
2145            success: function (data) {
2146                setGoodsDeliveryPlanFrom24(data, type);
2147            },
2148            error: function (x, e) { }
2149        });
2150    }
2151}
2152
2153//배송예정일 영역 업데이트
2154function setGoodsDeliveryPlanFrom24(data, type) {
2155    for (var i = 0; i < data.length; i++) {
2156        var item = data[i];
2157        var currnetGoodsItem = $("li[data-goods-no=" + item.GoodsNo + "]")
2158        if (type == "SpecialDisplay") {
2159            currnetGoodsItem = $("tr[data-goods-no=" + item.GoodsNo + "]")
2160        }
2161        if (item.deliBoxRowFullText != '') {
2162            var delvText = String.Format('<span class="deli_des">{0} ', item.deliBoxRowText2);
2163            delvText += String.Format('<strong class="deli_act">{0}</strong> {1} </span>', item.deliBoxRowText3, item.deliBoxRowText4);
2164            currnetGoodsItem.find("[name=delvTextArea]").html(delvText);
2165        }
2166    }
2167}

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.