PageSourceSearch

https://miigong.com/app/javascript/js/common.js?dummy=20260925121318

js miigong.com collected 2026-09-25 03:13:36 UTC 22,195 bytes, 545 lines download raw bytes

1//ie8이하 start
2if(!Array.indexOf){
3 Array.prototype.indexOf = function(obj){
4  for(var i=0; i<this.length; i++){
5   if(this[i]==obj){
6    return i;
7   }
8  }
9  return -1;
10 }
11}
12
13if (!Object.keys) Object.keys = function(o) {
14 if (o !== Object(o))
15  throw new TypeError('Object.keys called on a non-object');
16 var k=[],p;
17 for (p in o) if (Object.prototype.hasOwnProperty.call(o,p)) k.push(p);
18 return k;
19}
20
21if(typeof String.prototype.trim !== 'function') {
22  String.prototype.trim = function() {
23    return this.replace(/^\s+|\s+$/g, ''); 
24  }
25}
26//ie8이하 end
27
28if	(typeof L10n != 'object')
29	document.write('<script type="text/javascript" src="/data/js/language/L10n_KR.js"></script>');
30
31// 함수부만 따로 호출
32document.write('<script type="text/javascript" src="/app/javascript/js/common-function.js?v=191205"></script>');
33
34$(function(){	
35	/* 스타일적용 */
36	apply_input_style();
37	
38	//상품디스플레이의 동영상클릭시 -> 동영상자동실행설정되어있어야함
39	$(".goodsDisplayVideoWrap").bind("click",function(e){
40		$(this).find("img").addClass("hide");
41		$(this).find(".thumbnailvideo").hide();
42		$(this).find(".mobilethumbnailvideo").hide();
43		$(this).find("iframe").removeClass("hide");
44		$(this).find("embed").removeClass("hide");
45	});
46	
47	//동영상넣기의 동영상클릭시-> 동영상자동실행설정되어있어야함
48	$(".DisplayVideoWrap").bind("click",function(e){
49		$(this).find("img").addClass("hide");
50		$(this).find(".thumbnailvideo").hide();
51		$(this).find(".mobilethumbnailvideo").hide();
52			$(this).find("iframe").removeClass("hide");
53			$(this).find("embed").removeClass("hide"); 
54	});
55
56	/* 동영상넣기/상품디스플레이 동영상이미지체크 */ 
57	$(".thumbnailvideo").each(function(){
58		var width = ($(this).attr("width"))?$(this).attr("width"):400;
59		var height = ($(this).attr("height"))?$(this).attr("height"):200;
60		$(this).css({'width':width});
61		$(this).css({'height':height});
62	});
63	
64	$(".mobilethumbnailvideo").each(function(){
65		var width = ($(this).attr("width"))?$(this).attr("width"):150;
66		var height = ($(this).attr("height"))?$(this).attr("height"):50;
67		$(this).css({'width':width});
68		$(this).css({'height':height});
69	});
70});
71
72$(window).load(function() {
73	/* 스타일적용 */
74	chk_small_goods_image();
75	/*	
76	$('img.small_goods_image').each(function() {	 
77		if (!this.complete ) {// image was broken, replace with your new image
78			this.src = '/data/icon/goods/error/noimage_list.gif';
79		}
80	});
81	*/
82	
83	/* 동영상넣기/상품디스플레이 동영상이미지체크 */ 
84	$(".thumbnailvideo").each(function(){
85		var width = ($(this).attr("width"))?$(this).attr("width"):400;
86		var height = ($(this).attr("height"))?$(this).attr("height"):200;
87		$(this).css({'width':width});
88		$(this).css({'height':height});
89	});
90	
91	$(".mobilethumbnailvideo").each(function(){
92		var width = ($(this).attr("width"))?$(this).attr("width"):150;
93		var height = ($(this).attr("height"))?$(this).attr("height"):50;
94		$(this).css({'width':width});
95		$(this).css({'height':height});
96	});
97
98});
99
100String.prototype.replaceAll = function (str1,str2){
101	var str    = this;     
102	var result   = str.replace(eval("/"+str1+"/gi"),str2);
103	return result;
104}
105
106//통계서버로 통계데이터 전달
107function statistics_firstmall(act,goods_seq,order_seq,review_point)
108{
109	var url = '/_firstmallplus/statistics';
110	var allFormValues = "act="+act+"&goods_seq="+goods_seq;
111	if( order_seq ) allFormValues += "&order_seq="+order_seq;
112	if( review_point ) allFormValues += "&review_point="+review_point;
113	
114	if(act == 'order' && !order_seq) return false;
115	if(act == 'review' && !review_point) return false;
116	if(!goods_seq) return false;
117	$.ajax({
118		cache:false,
119		timeout:1000,  
120		type:"POST",
121		url:url,
122		data:allFormValues,
123		error:function(){},
124		success:function(response){}
125	});
126	return true;
127}
128
129// 사은품 지급 조건 상세 2015-05-14 pjm
130$(".gift_log").bind('click', function(){
131	$.ajax({
132		type: "post",
133		url: "./gift_use_log",
134		data: "order_seq="+$(this).attr('order_seq')+"&item_seq="+$(this).attr('item_seq'),
135		success: function(result){
136			if	(result){
137				$("#gift_use_lay").html(result);
138				//사은품 이벤트 정보
139				openDialog(getAlert('mo023'), "gift_use_lay", {"width":"450","height":"250"});
140			}
141		}
142	});
143});
144
145
146//문자열 바이트 체크(utf-8도 가능)
147String.prototype.byteLength = function(mode){
148	mode	= (!mode) ? 'euc-kr' : mode;
149	text	= this;
150	byte	= 0;
151	switch(mode){
152		case	'utf-8' :
153			for(byte=i=0;char=text.charCodeAt(i++);byte+=char>>11?3:char>>7?2:1);
154			break;
155		
156		default :
157			for(byte=i=0;char=text.charCodeAt(i++);byte+=char>>7?2:1);
158		
159	}
160    return byte
161};
162
163//############################## 2019-10-16 [gcs] sdh : #3406 무료ë
163³´ì•ˆíŒ¨ì¹˜ ##############################
164/*
165 * form RSA 암호화 프로세스
166 *  - form 내에 file이 있을 경우 기존 프로세스에서도 file 데이터 전송은 동작하지 않았음.
167 * 확인된 submit 예외 사항
168 * - front script 레벨에서 form을 생성한 후 body에 추가하지 않고 submit
169 *  -> 이 경우는 https://www.w3.org/TR/html5/forms.html#constraints 4.10.22.3 를 위반하여 일부 브라우저에서 submit이 발생하지 않음.
170 * - ajax나 iframe을 통해 새로운 페이지를 생성한 후 document.sslForm.submit() 를 통해 submit
171 *  -> DOM 객체로 submit 호출과 동일
172 * - 스크립트 호출과 바인딩이 이루어지기 전 $(document).ready() 와 동시에 submit
173 */ 
174// RSA 전역 변수 선언
175var getPublicKeyUrl = ["/ssl/getRSAPublicKey","/RSA/ssl/getRSAPublicKey"];
176var handshakeUrl = ["/ssl/getRSAHandShake","/RSA/ssl/getRSAHandShake"];
177var arrCheckActions = ["/ssl/relayRsa?action=", "/RSA/ssl/setRSAReturnPost/"];
178var jcryptionReloadDelayTime = 500;	// 0.5 초 후 다시 리로드, 지연 발생 시 1초씩 증가
179var sGlAction		= '';
180// 동적 스크립트 호출
181$.loadScript = function (url, callback) {$.ajax({url: url,dataType: 'script',success: callback,async: true});}
182$(document).ready(function(){
183	// order_price_calculate 주문서 계산 함수에서 ssl 통신을 이용하고 있지 않고 현재 페이지가 주문서 작성 페이지라면 ssl_url로 치환
184	if( window.location.pathname.indexOf('/order/settle') > -1
185			&& order_price_calculate.toString().indexOf("/common/ssl_action")==-1){
186		console.log("order_price_calculate convert");
187		order_price_calculate = function () {
188			var f = $("form#orderFrm");
189			action = "/order/calculate?mode="+gl_mode;
190			// ssl 적용
191			$.ajax({
192				async: false,
193				'url'		: '/common/ssl_action',
194				'data'		: {'action':action},
195				'type'		: 'get',
196				'dataType'	: 'html',
197				'success'	: function(res) {
198					action = res;
199				}
200			});
201			f.attr("action",action);
202			f.attr("target","actionFrame");
203			// jCryption 재적용 스킨의 orderFrm 에 ssl 링크가 없기에 js 영역에서 재선언
204			moduleJcryption.resetJcryptionSubmit(f[0]);
205			f.submit();
206		};
207	}
208	
209    // jquery 버전이 1.7 이하 일경우 관리자에서 사용중이므로 https 강화를 제외한다.
210    if($().jquery >= "1.7"){
211        $.loadScript("/app/javascript/plugin/jcryption/jquery.jcryption.3.1.0_custom.js", function(){
212            initJcryption();
213        });
214    }
215	// ajax 호출 후 새로 생성된 form에도 적용
216	$(document).ajaxComplete(function() {
217		// 모든 폼 엘리먼트에 이벤트를 바인딩 한다
218		$("body form").each(function (){
219			var domEl = this;
220			moduleJcryption.convertJcryptionSubmit(domEl);
221		});
222	});
223});
224// 암호화 적용 기능 모듈화
225var moduleJcryption = {
226    // 폼에서 프로토콜을 포함한 host name을 얻는다.
227    getHostNameFromForm : function (formObj) {
228        var formActionUrl = formObj.attr("action");
229        return moduleJcryption.getHostNameFromUrl(formActionUrl);
230    }
231    , getHostNameFromUrl : function (url){
232        var arr = url.split("/");
233        var result = arr[0]+"//"+arr[2];
234        return result;
235    }
236    // SSL 적용 폼인지 여부 확인
237	, checkSSLForm : function (formObj){
238        var formActionUrl = formObj.attr("action");
239        if(formActionUrl){
240            for(var i in arrCheckActions){
241                if(formActionUrl.indexOf(arrCheckActions[i])>-1){
242                    return i;
243                }
244            }
245        }
246        return -1;
247    }
248    // 이벤트가 바인드 된 폼인지 확인
249    , checkBindEventForm : function (formObj){
250        var data = (formObj.data("jCryptionInit") === true);
251        if(data){
252            return true;
253        }
254        return false;
255    }
256    // 이벤트가 치환된 된 폼인지 확인
257    , checkBindEventJcryptionForm : function (formObj){
258        var data = (formObj.data("jCryptionAlready") === true);
259        if(data){
260            return true;
261        }
262        return false;
263    }
264    // 속성을 확인한다
265    , getAttributes : function ( $node ) {
266        var attrs = {};
267        $.each( $node[0].attributes, function ( index, attribute ) {
268            attrs[attribute.name] = attribute.value;
269        } );
270
271        return attrs;
272    }
273	, destroyJcryptionSubmit : function(domEl){
274		$(domEl).data("jCryptionInit",false);
275		$(domEl).data("jCryptionAlready",false);
276		$(domEl).off("submit");
277	}
278	, resetJcryptionSubmit : function(domEl){
279		moduleJcryption.destroyJcryptionSubmit(domEl);
280		moduleJcryption.convertJcryptionSubmit(domEl);
281	}
282	, convertJcryptionSubmit : function(domEl){
283		// 이미 치환된 폼은 중복 치환하지 않음.
284		if(moduleJcryption.checkBindEventJcryptionForm($(domEl))){
285			// console.log("already submit convert ", $(domEl));
286		}else{
287			// console.log("submit convert event binding!", $(domEl));
288            $(domEl).data("jCryptionAlready",true);
289			// URL 이 SSL 적용 폼인지 확인
290			// console.log($(domEl),$(domEl).attr("action"),moduleJcryption.checkSSLForm($(domEl)));
291			if(moduleJcryption.checkSSLForm($(domEl))>-1){
292				// 기본 dom 객체를 우선 치환한 후 jquery 객체 submit 이벤트 바인딩.
293				// jquery객체 서브밋이 발생한다면 preventDefault 로 인해 dom객체의 서브밋은 발생하지 않음.
294				domEl.submit = function (event){
295					// console.log("DOM el submit");
296					moduleJcryption.convertSubmit(domEl);
297				};
298				// validate 플러그인이 적용되어 있을 시 별도의 submithandle를 이용하므로 jquery 객체 바인딩 제외
299				if(typeof $(domEl).data("validator") !== "undefined"){
300				}else{
301					$(domEl).on("submit", function(event){
302						// console.log("jquery el submit");
303						event.preventDefault();
304						moduleJcryption.convertSubmit(domEl);
305					});
306				}
307			}
308		}
309	}
310	// 세션키 유지를 위한 action url 추가
311	, convertActionUrl : function ($formEl){
312        // console.log("convertActionUrl!", $formEl);
313        var action = $formEl.attr("action");
314        var sessionKey = $.jCryption.getAESSessionKey($formEl);
315		var actionDomain = moduleJcryption.getHostNameFromForm($formEl);
316		var domain = window.location.hostname;
317		if(domain.indexOf("m.")==0){
318			domain = domain.replace("m.","");
319		}
320		if(domain.indexOf("www.")==0){
321			domain = domain.replace("www.","");
322		}
323        if(actionDomain.indexOf(domain)==-1 && moduleJcryption.checkSSLForm($formEl)>-1 && action.indexOf(sessionKey)==-1){
324            action = action+"/"+sessionKey;
325        }
326
327		// firstmall ssl 사용시
328		var thisRegex = new RegExp('gabiafreemall');
329		if(	thisRegex.test(action) ){
330			var aPath		= action.split("/");
331			sGlAction		= aPath[6].replace("-", "+");
332			sGlAction		= sGlAction.replace("_", "/");
333			sGlAction		= window.atob(sGlAction);
334			action			= sGlAction;
335		}else{
336			sGlAction		= '';
337		}
338
339        $formEl.attr("action",action);
340	}
341	// 암호화 서브밋 처리
342    , convertSubmit : function(thisDom){
343        var $formEl = $(thisDom);
344        // submit 전용 폼인지 체크
345        if(moduleJcryption.checkBindEventForm($formEl)){
346            // console.log("already!", $formEl);
347            moduleJcryption.convertActionUrl($formEl);
348            return true;
349        }else{
350            // SSL 적용폼인지 체크
351            if(moduleJcryption.checkSSLForm($formEl)>-1){
352                // 스크립트가 로드되었는지 체크
353                if(typeof $.jCryption === "function"){
354                    // rsa 폼 삭제
355                    $(".rsaForm").remove();
356
357                    // 암호화 적용
358                    var AESEncryptionKey = $.jCryption.getAESEncryptionKey($formEl);
359                    // console.log(AESEncryptionKey);
360                    var hostName = moduleJcryption.getHostNameFromForm($formEl);
361
362                    var $submitElement = $formEl.find(":input:submit");
363                    var $encryptedElement = $("<input />",{
364                      type:'hidden',
365                      name:'jCryption'
366                    });
367
368                    // 암호화 submit 전용 form 
369                    var $submitRSAForm = $("<form class='rsaForm'/>");
370                    var formAttrs = moduleJcryption.getAttributes($formEl);
371                    for (var i in formAttrs){
372                        if(i!="id" && i!="name"){
373                            $submitRSAForm.attr(i,formAttrs[i]);
374                        }
375                    }
376                    var remakeHandshakeUrl = handshakeUrl[moduleJcryption.checkSSLForm($formEl)];
377                    if(moduleJcryption.checkSSLForm($formEl)!=0){
378                        remakeHandshakeUrl = remakeHandshakeUrl+"/"+$.jCryption.getAESSessionKey($submitRSAForm);
379                    }
380
381                    $.jCryption.authenticate(
382                        AESEncryptionKey, 
383                        hostName+getPublicKeyUrl[moduleJcryption.checkSSLForm($formEl)],
384                        hostName+remakeHandshakeUrl, 
385                        function(AESEncryptionKey) {
386                            var toEncrypt = $formEl.serialize();
387                            // console.log(toEncrypt);
388                            // console.log($formEl);
389                            if ($submitElement.is(":submit")) {
390                                toEncrypt = toEncrypt + "&" + $submitElement.attr("name") + "=" + $submitElement.val();
391                            }
392                            $encryptedElement.val($.jCryption.encrypt
392(toEncrypt, AESEncryptionKey));
393                            // console.log($submitRSAForm);
394                            $submitRSAForm.append($encryptedElement);
395                            $("body").append($submitRSAForm);
396                            $submitRSAForm.data("jCryptionInit",true);
397            				moduleJcryption.convertActionUrl($submitRSAForm);
398							if(sGlAction){
399								var $encryptionKeyElement = $("<input />",{
400									type:'hidden',
401									name:'encryptionKey',
402									value:AESEncryptionKey
403								});
404								$submitRSAForm.append($encryptionKeyElement);
405							}
406                            $submitRSAForm.submit();
407                        },
408                        function() {
409                            // Authentication with AES Failed ... sending form without protection
410                            confirm("Authentication with Server failed, are you sure you want to submit this form unencrypted?", function() {
411                                $formEl.submit();
412                            });
413                        }
414                    );
415                }else{
416					var delayTime = jcryptionReloadDelayTime;
417                    console.log("필수 스크립트가 로드되지 않았습니다. "+(delayTime/1000)+"초 후 다시 시도합니다.");
418                    setTimeout(function(){
419						console.log($formEl,"리로드"+delayTime);
420						moduleJcryption.resetJcryptionSubmit(thisDom);
421						$formEl.submit();
422					}, delayTime);
423					jcryptionReloadDelayTime += 1000;	// 1초씩 증가
424					// $formEl.submit();
425                }
426                return false;
427            }else{
428                return true;
429            }
430        }
431    }
432};
433
434// 암호화 적용
435var initJcryption = function(){
436    // 모든 폼 엘리먼트에 이벤트를 바인딩 한다
437	$("body form").each(function (){
438		var domEl = this;
439		moduleJcryption.convertJcryptionSubmit(domEl);
440	});
441    
442	// 아이디 체크의 경우 SSL 통신이 없었으므로 강제로 적용
443    function setupJoinMemberPageCheckId(){
444        var url = location.href;
445        var tmp_url = url.split("?");
446        var domain = moduleJcryption.getHostNameFromUrl(tmp_url[0]);
447        var sub_url = tmp_url[0].replace(domain,"");
448        
449        // 회원가입페이지 일 경우
450        if(sub_url=="/member/register"){
451            
452            // 현재 회원가입 폼의 action 을 통해 유료/무료 SSL을 확인한다.
453            var registFrmAction = $("#registFrm").attr("action");
454            var registFrmHost = moduleJcryption.getHostNameFromUrl(registFrmAction);
455            if(registFrmHost.indexOf("http")>-1){
456                var sslSubUrlIndex = 0;
457                if(registFrmHost == "https://ssl.gabiafreemall.com"){
458                    sslSubUrlIndex = 1;
459                }
460                var idCheckFormUrl = registFrmHost+arrCheckActions[sslSubUrlIndex];
461
462                var idCheckCallbackUrl = domain+"/member/"+"../member_process/id_chk";
463                var encodeIdCheckCallbackUrl = Base64.encode(idCheckCallbackUrl);
464                encodeIdCheckCallbackUrl = encodeIdCheckCallbackUrl.replace(/[\+]/g,"-");
465                encodeIdCheckCallbackUrl = encodeIdCheckCallbackUrl.replace(/[\/]/g,"_");
466                var idCheckFormAction = idCheckFormUrl+encodeIdCheckCallbackUrl;
467
468                $("input[name='userid']").unbind("blur");
469                $("input[name='userid']").blur(function() {
470
471                    if($(this).val()){
472                        // rsa 폼 삭제
473                        $("#idchkform").remove();
474                        $(".rsaForm").remove();
475                        $formEl = $("<form id='idchkform' method='post' target='actionFrame' action='"+idCheckFormAction+"'/>");
476                        var idval = $("<input type='hidden' name='userid' value='"+$(this).val()+"'>");
477                        $formEl.append(idval);
478                        $("body").append($formEl);
479
480                        // 암호화 적용
481                        var AESEncryptionKey = $.jCryption.getAESEncryptionKey($formEl);
482                        // console.log(AESEncryptionKey);
483                        var hostName = moduleJcryption.getHostNameFromForm($formEl);
484
485                        var $submitElement = $formEl.find(":input:submit");
486                        var $encryptedElement = $("<input />",{
487                          type:'hidden',
488                          name:'jCryption'
489                        });
490
491                        // 암호화 submit 전용 form 
492                        var $submitRSAForm = $("<form class='rsaForm'/>");
493                        var formAttrs = moduleJcryption.getAttributes($formEl);
494                        for (var i in formAttrs){
495                            if(i!="id" && i!="name"){
496                                $submitRSAForm.attr(i,formAttrs[i]);
497                            }
498                        }
499                        var remakeHandshakeUrl = handshakeUrl[moduleJcryption.checkSSLForm($formEl)];
500                        if(moduleJcryption.checkSSLForm($formEl)!=0){
501                            remakeHandshakeUrl = remakeHandshakeUrl+"/"+$.jCryption.getAESSessionKey($submitRSAForm);
502                        }
503
504                        $.jCryption.authenticate(
505                            AESEncryptionKey, 
506                            hostName+getPublicKeyUrl[moduleJcryption.checkSSLForm($formEl)],
507                            hostName+remakeHandshakeUrl, 
508                            function(AESEncryptionKey) {
509                                var toEncrypt = $formEl.serialize();
510                                // console.log(toEncrypt);
511                                // console.log($formEl);
512                                if ($submitElement.is(":submit")) {
513                                    toEncrypt = toEncrypt + "&" + $submitElement.attr("name") + "=" + $submitElement.val();
514                                }
515                                $encryptedElement.val($.jCryption.encrypt
515(toEncrypt, AESEncryptionKey));
516                                // console.log($submitRSAForm);
517                                $submitRSAForm.append($encryptedElement);
518                                $("body").append($submitRSAForm);
519                                $submitRSAForm.data("jCryptionInit",true);
520            					moduleJcryption.convertActionUrl($submitRSAForm);
521                                $submitRSAForm.submit();
522                            },
523                            function() {
524                                // Authentication with AES Failed ... sending form without protection
525                                confirm("Authentication with Server failed, are you sure you want to submit this form unencrypted?", function() {
526                                    $formEl.submit();
527                                });
528                            }
529                        );
530
531                    }
532                });
533            }
534        }
535    }
536    setupJoinMemberPageCheckId();
537}
538function callbackIdChk(json){
539    var response = $.parseJSON(json);
540    var text = response.return_result;
541    var userid = response.userid;
542    $("#id_info").html(text);
543    $("input[name='userid']").val(userid);
544}
545//############################## 2019-10-16 [gcs] sdh : #3406 무료보안패치 ##############################

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.