PageSourceSearch

https://funwood.co.kr/app/javascript/js/common.js?dummy=20261006123138

js funwood.co.kr collected 2026-10-06 03:31:58 UTC 22,274 bytes, 593 lines download raw bytes

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

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.