PageSourceSearch

https://www.incrob.com/js/site_member.js?1790056326

js incrob.com collected 2026-09-24 14:45:26 UTC 103,780 bytes, 3,151 lines download raw bytes

1var _jn='';
2var _jid='';
3var _ag='';
4var _gd='';
5var m_ag='';
6var m_gd='';
7var m_jn='';
8var m_jid='';
9var m_id='';
10var _id='';
11var SITE_MEMBER = function(){
12	var member_profile_id = 'member_profile';
13	var $member_profile, $join_form;
14	var address_format;
15
16	//중복 클릭으로 인해 두번 액션 되는 것을 방지 하기 위한 flag
17	var join_processing = false;
18
19	var authRedirectProcessing = false;
20
21	var terms_agree = false;
22	var _third_party, _marketing_sms_agree, _marketing_email_agree;
23
24	var policyConfirm = function(){
25	};
26
27	var openFindPassword = function(){
28		$.cocoaDialog.close();
29		$.ajax({
30			type: 'POST',
31			data: {d: 'd'},
32			url: ('/dialog/find_password.cm'),
33			dataType: 'html',
34			async: true,
35			cache: false,
36			success: function(html){
37				var $html = $(html);
38				$.cocoaDialog.open({type: 'site_find_password', custom_popup: $html, hide_event:function(){
39						$(window).unbind('keydown');
40					}});
41			}
42		});
43	};
44
45
46    // 브라우저에는 회원 식별자 대신 현재 찾기 작업과 결과 순번만 보관한다.
47    var getRecoverySelection = function() {
48        if ($('#find_step_1').length && !$('#recovery_id').val()) {
49            alert('찾기 화면이 업데이트됐습니다. 페이지를 새로고침한 뒤 다시 시도해주세요.');
50            return null;
51        }
52        return {
53            recovery_id: $('#recovery_id').val() || '',
54            account_index: $('#recovery_account').val() || $('._one_member_account_index').val() || ''
55        };
56    };
57	var findSubmit  = function(step){
58        if (!getRecoverySelection()) return;
59		if(step=='find'){
60			var status_find_id  	   = !($('._find_id').hasClass('hidden'));		   // 아이디 찾기 상태
61			var status_find_password   = !($('._find_password').hasClass('hidden'));   // 비밀번호 찾기 상태
62
63			var email_wrap = $('._find_id_email_wrap');			// 가입한 이메일로 찾기 영역
64			var nick_wrap  = $('._find_id_nick_wrap');			// 가입한 휴대폰으로 찾기 영역
65
66			var find_id_first_result_wrap   = $('#find_step2_info_1');
67			var find_id_second_result_wrap  = $('#find_step2_info_2');
68
69			var only_email	  	 = $('._find_id_only_input_email').val(); // 가입한 이메일로 찾기만 있을 경우 입력되는 값
70			var is_find_id_only_email = false;
71
72			var find_id_send_email_wrap = $('._find_id_send_email_wrap'); // 아이디, 비밀번호 재설정 메일 발송 영역
73
74			var email 	 	  = $('._find_id_input_email').val();		// 아이디 찾기 이메일 입력값
75			var nick  	 	  = $('._find_id_input_nick').val();		// 아이디 찾기 이름 입력값
76			var	call_num 	  = $('._find_id_input_call_num').val();	// 아이디 찾기 전화번호 입력값
77
78			var regex = /[^0-9]/g; // 숫자가 아닌 문자열을 선택하는 정규식
79			if(call_num) call_num = call_num.replace(regex, "");
80
81			var find_pw_email = $('._find_pw_input_email').val(); 		// 비밀번호 찾기 이메일 입력값
82
83			var is_auth_input = false;
84			var is_auth_dream_seucrity = $('._auth_dream_security_input').length;
85			var is_auth_mobilians 	   = $('._auth_mobilians_input').length;
86			var is_auth_inicis 		   = $('._auth_inicis_input').length;
87			if(is_auth_dream_seucrity > 0 || is_auth_mobilians > 0 || is_auth_inicis > 0){ // 본인인증 수단 한개라도 사용하고 있을 경우
88				is_auth_input = true;
89			}
90
91			if(only_email != undefined){ // 가입한 이메일로 찾기만 존재할 경우
92				is_find_id_only_email = true;
93				email = only_email;
94			}
95
96			if(status_find_id){
97				find_pw_email = ''; // 비밀번호 찾기에서 입력된 값 초기화
98				if(email_wrap.css('display') == 'block'){ // 가입한 이메일로 찾기 입력 데이터 이외의 값 초기화
99					nick = '';
100					call_num = '';
101				}else if(nick_wrap.css('display') == 'block'){ // 가입한 휴대폰으로 찾기 입력 데이터 이외의 값 초기화
102					email = '';
103				}
104			}else if(status_find_password){
105				nick = '';
106				call_num = '';
107				email = '';
108
109				email = find_pw_email;
110			}
111
112			var data = {recovery_id: $('#recovery_id').val()};
113			data.is_find_id_only_email = is_find_id_only_email; // 가입한 이메일로 찾기만 존재할 경우 true
114			data.status_find_id  	   = status_find_id;  // 비밀번호 찾기인지 확인
115			data.email 	  		  	   = email;
116			data.nick  	  		  	   = nick;
117			data.call_num 		  	   = call_num;
118
119			$.ajax({
120				type:'POST',
121				data:{data:data, step:1},
122				url:('/ajax/find_pass.cm'),
123				dataType:'json',
124				async:false,
125				cache:false,
126				success:function(res){
127						if(res.msg =='SUCCESS'){
128                            // 구 서버의 계정 토큰 응답을 사용하지 않는다. 혼합 배포에서는 재시작한다.
129                            if (Object.prototype.hasOwnProperty.call(res, 'token')) {
130                                alert('찾기 화면이 업데이트됐습니다. 페이지를 새로고침한 뒤 다시 시도해주세요.');
131                                return;
132                            }
133                            $('._one_member_account_index, ._one_member_login_type, ._one_member_asterisk_email, ._one_member_asterisk_uid, ._member_list_radio').remove();
134							$('#recovery_account').val(res.account_index || '');											// 본인인증에 사용되는 값
135							$('._result_find_data_uid').text(res.result_find_data_uid);
135			// 아이디 결과값 입력
136							$('._result_find_data_email').text(res.result_find_data_email);		// 이메일 정보 결과값 입력
137							var normalizeMemberValue = function(target){
138								if(target === null || typeof target === 'undefined'){
139									return '';
140								}
141								return String(target);
142							};
143							var invalid_member_data_detected = false;
144							var alertInvalidMemberData = function(){
145								if(invalid_member_data_detected){
146									return;
147								}
148								invalid_member_data_detected = true;
149								alert('찾기 결과를 처리할 수 없습니다. 페이지를 새로고침한 뒤 다시 시도해주세요.');
150							};
151							var hasUnsafeCharacter = function(target){
152								return /[<>'"`]/.test(target);
153							};
154							var isValidMemberData = function(value){
155								if(!value || typeof value !== 'object' || $.isArray(value)){
156									return false;
157								}
158								var masked_uid = normalizeMemberValue(value.display_id);
159								var account_index = normalizeMemberValue(value.account_index);
160								var login_type = (value.has_email ? 'Y' : 'N');
161								var asterisk_email = normalizeMemberValue(value.display_email);
162								if(masked_uid === '' || !/^[1-9][0-9]{0,5}$/.test(account_index) || typeof value.has_email !== 'boolean'){
163									return false;
164								}
165								if(hasUnsafeCharacter(masked_uid) || hasUnsafeCharacter(account_index) || hasUnsafeCharacter(asterisk_email)){
166									return false;
167								}
168								if(login_type !== 'Y' && login_type !== 'N'){
169									return false;
170								}
171								return true;
172							};
173							var validateMemberDataOrAlert = function(value){
174								if(!isValidMemberData(value)){
175									alertInvalidMemberData();
176									return false;
177								}
178								return true;
179							};
180
181							if(res.result_find_data_email == undefined){
182								// 회원 이메일 정보 없을 경우,
183								find_id_send_email_wrap.hide();
184							if($('input:radio[name="findIdStep03"]')[1] != undefined) $('input:radio[name="findIdStep03"]')[1].click();
185						}else{
186							find_id_send_email_wrap.show();
187						}
188
189						// 조회 결과가 하나일 경우,
190						// STEP 2로 이동
191						if($('#find_step_1').css('display') == 'block' && res.member_data == undefined){
192							if(status_find_id){
193								$('#find_step_1').hide();
194								$('#find_step_2').show();
195								$('#find_step_3').hide();
196								if(res.is_use_only_id && !is_auth_input){ 	   // 가입 및 그룹 이메일 사용 X, 본인인증 사용 X, 회
196원정보 이메일 정보 없을 경우
197									if(res.result_find_data_email == undefined){
198										find_id_first_result_wrap.hide();
199										find_id_second_result_wrap.show();
200									}else{
201										find_id_first_result_wrap.show();
202										find_id_second_result_wrap.hide();
203									}
204								}else{
205									find_id_first_result_wrap.show();
206									find_id_second_result_wrap.hide();
207								}
208							}else if(status_find_password){ // 비밀번호 찾기일 경우 STEP 3 이동
209								if(res.is_use_only_id && !is_auth_input){ 	   // 가입 및 그룹 이메일 사용 X, 본인인증 사용 X, , 회원정보 이메일 정보 없을 경우
210									if(res.result_find_data_email == undefined){
211										find_id_first_result_wrap.hide();
212										find_id_second_result_wrap.show();
213									}else{
214										find_id_first_result_wrap.show();
215										find_id_second_result_wrap.hide();
216									}
217
218									$('#find_step_1').hide();
219									$('#find_step_2').show();
220									$('#find_step_3').hide();
221								}else{
222									find_id_first_result_wrap.show();
223									find_id_second_result_wrap.hide();
224
225									$('#find_step_1').hide();
226									$('#find_step_2').hide();
227									$('#find_step_3').show();
228								}
229							}
230								}else if($('#find_step_1').css('display') == 'block' && res.member_data != undefined){ // 가입한 휴대폰으로 찾기
231									if(res.is_one_member_data){
232									// 조회 결과가 한개만 존재할 경우
233									$.each(res.member_data, function(index, value){
234										if(!validateMemberDataOrAlert(value)){
235											return false;
236										}
237										if(value.has_email){
238											find_id_send_email_wrap.show();
239											$('input:radio[name="findIdStep03"]')[0].click();
240									}else{
241										if(!is_auth_input){ 	   // 본인인증 사용 X, 회원정보 이메일 정보 없을 경우
242											$('#find_step_1').hide();
243											$('#find_step_2').show();
244											$('#find_step_3').hide();
245
246											find_id_first_result_wrap.hide();
247											find_id_second_result_wrap.show();
248										}
249										}
250									});
251									if(invalid_member_data_detected){
252										return;
253									}
254								}
255							}
256
257							// 조회 결과가 다수일 경우,
258							// STEP 2로 이동
259							if(res.member_data){
260							$('#find_step_1').hide();
261							$('#find_step_2').show();
262							$('#find_step_3').hide();
263
264							if(res.is_use_only_id && !is_auth_input){ 	   // 가입 및 그룹 이메일 사용 x, 본인인증 사용 x
265								find_id_first_result_wrap.hide();
266								find_id_second_result_wrap.show();
267							}else{
268								find_id_first_result_wrap.show();
269								find_id_second_result_wrap.hide();
270							}
271
272								var add_member_list = $(".text-ultra-bold.mt16._result_find_data_uid").parent();
273								add_member_list.show();
274								add_member_list.children().hide();
275
276								if(res.is_one_member_data){
277									// 조회 결과가 한개만 존재할 경우
278									$.each(res.member_data, function(index, value){
279										if(!validateMemberDataOrAlert(value)){
280											return false;
281										}
282										var masked_uid = normalizeMemberValue(value.display_id);
283										var account_index = normalizeMemberValue(value.account_index);
284										var login_type = (value.has_email ? 'Y' : 'N');
285										var asterisk_email = normalizeMemberValue(value.display_email);
286										add_member_list.append($('<input>', {
287											type: 'hidden',
288											'class': '_one_member_account_index'
289									}).val(account_index));
290									add_member_list.append($('<input>', {
291										type: 'hidden',
292										'class': '_one_member_login_type'
293									}).val(login_type));
294									add_member_list.append($('<input>', {
295										type: 'hidden',
296										'class': '_one_member_asterisk_email'
297									}).val(asterisk_email));
298									add_member_list.append($('<span>', {
299										'class': 'text-ultra-bold mt16 _result_find_data_uid _one_member_asterisk_uid'
300									}).text(masked_uid));
301									if(!value.has_email && !is_auth_input){
302										if(!is_auth_input){ 	   // 본인인증 사용 X, 회원정보 이메일 정보 없을 경우
303											$('#find_step_1').hide();
304											$('#find_step_2').show();
305											$('#find_step_3').hide();
306
307											find_id_first_result_wrap.hide();
308											find_id_second_result_wrap.show();
309										}
310									}
311
312									});
313									if(invalid_member_data_detected){
314										return;
315									}
316								}else{ // 조회 결과가 다수일 경우
317									if(res.is_use_only_id && !is_auth_input){
318									// (가입 및 그룹) 이메일 사용 x, 본인인증 x
319									// 비밀번호 재설정, 정확한 아이디 기억나지 않아요! 수단 이용할 수 없음
320									// 결과 바로 출력
321									find_id_first_result_wrap.hide();
322									find_id_second_result_wrap.show();
323
324										$.each(res.member_data, function(index, value){
325											if(!validateMemberDataOrAlert(value)){
326												return false;
327											}
328											var masked_uid = normalizeMemberValue(value.display_id);
329											add_member_list.append(
330												$('<div>', {
331													'class': 'pw_search mt8'
332											}).append($('<span>', {
333												'class': 'text-ultra-bold mt16 _result_find_data_uid _one_member_asterisk_uid'
334												}).text(masked_uid))
335											);
336										});
337										if(invalid_member_data_detected){
338											return;
339										}
340
341									}else{
342										$.each(res.member_data, function(index, value){
343											if(!validateMemberDataOrAlert(value)){
344												return false;
345											}
346											var masked_uid = normalizeMemberValue(value.display_id);
347											var account_index = normalizeMemberValue(value.account_index);
348											var login_type = (value.has_email ? 'Y' : 'N');
349											var asterisk_email = normalizeMemberValue(value.display_email);
350											var member_list_label = $('<label>');
351											member_list_label.append($('<input>', {
352												type: 'hidden',
353											'class': '_asterisk_email'
354										}).val(asterisk_email));
355										member_list_label.append($('<input>', {
356											type: 'hidden'
357										}).val(login_type));
358										member_list_label.append($('<input>', {
359											type: 'radio',
360											name: 'findIdMemberList'
361										}).val(account_index));
362										member_list_label.append($('<span>').text(masked_uid));
363
364										add_member_list.append(
365											$('<div>', {
366												'class': 'select_tit radio radio-styled mt0 mb0 _member_list_radio'
367												}).append(member_list_label)
368											);
369										});
370										if(invalid_member_data_detected){
371											return;
372										}
373										$('input:radio[name="findIdMemberList"]').first().prop("checked", true);
374									}
375								}
376						}
377					}else{
378						alert(res.msg);
379					}
380				}
381			});
382		}else if(step=='send'){
383			var status_find_id   = current_find_tab === "findId" ? "Y" : "N";
384
385			$.ajax({
386				type:'POST',
387				data:$.extend(getRecoverySelection(), {status_find_id:status_find_id, step:2}),
388				url:('/ajax/find_pass.cm'),
389				dataType:'json',
390				async:false,
391				cache:false,
392				success:function(res){
393					if(res.msg =='SUCCESS'){
394
395						$('#find_step_1').hide();
396						$('#find_step_2').hide();
397						$('#find_step_3').hide();
398						$('#find_step_4').show();
399
400						$('_result_find_data').text(res.result_find_data);
401					}else{
402						alert(res.msg);
403					}
404				}
405			});
406		}else if(step=='update_password'){
407			var data = $.extend($('#find_password_form').serializeObject(), getRecoverySelection());
408
409			$.ajax({
410				type:'POST',
411				data:{data:data,step:3},
412				url:('/ajax/find_pass.cm'),
413				dataType:'json',
414				async:false,
415				cache:false,
416				success:function(res){
417					if(res.msg =='SUCCESS'){
418						alert(LOCALIZE.설명_비밀번호변경이완료되었습니다());
419						location.href="/?mode=login";
420					}else{
421						if(res.error == -2){
422							alert(LOCALIZE.설명_동일한암호로입력하시기바랍니다());
423						}else if(res.error == -3){
424							alert(LOCALIZE.설명_정상적인암호로입력하시기바랍니다());
425						}else if(res.error == -4){
426							alert(LOCALIZE.설명_비밀번호재설정링크유효기간만료());
427						}else if(res.error == -5){
428							alert(LOCALIZE.설명_변경가능시간을초과하였습니다());
429						}else if(res.error == -6){
430							alert(res.error_detail);
431						}else{
432							alert(res.msg);
433						}
434					}
435				}
436			});
437		}
438	};
439
440	var openChangePassword = function(c,r,s, type){
441		$.cocoaDialog.close();
442		$.ajax({
443			type: 'POST',
444			data: {c: c, r : r, s : s, type : type},
445			url: ('/dialog/change_password.cm'),
446			dataType: 'html',
447			async: true,
448			cache: false,
449			success: function(html){
450				var $html = $(html);
451				$.cocoaDialog.open({type: 'site_change_password', custom_popup: $html});
452			}
453		});
454
455	};
456
457	var changePassword = function(){
458		var data = $('#find_password_form').serializeObject();
459		$.ajax({
460			type:'POST',
461			data:data,
462			url:('/backpg/change_password.cm'),
463			dataType:'json',
464			async:false,
465			cache:false,
466			success:function(res){
467				if(res.msg =='SUCCESS'){
468					alert(LOCALIZE.설명_비밀번호변경이완료되었습니다());
469					location.href="/?mode=login";
470				}else{
471					if(res.error == -2){
472						alert(LOCALIZE.설명_동일한암호로입력하시기바랍니다());
473					}else if(res.error == -3){
474						alert(LOCALIZE.설명_정상적인암호로입력하시기바랍니다());
475					}else if(res.error == -4 || res.error == -14){
476						alert(LOCALIZE.설명_비밀번호재설정링크유효기간만료());
477					}else if(res.error == -5){
478						alert(LOCALIZE.설명_변경가능시간을초과하였습니다());
479					}else if(res.error == -6){
480						alert(res.error_detail);
481					}else{
482						alert(LOCALIZE.설명_잘못된접근입니다());
483					}
484				}
485			}
486		});
487
488	};
489
490	var editProfile = function(back_url){
491		$.cocoaDialog.close();
492		$.ajax({
493			type: 'POST',
494			data: {'back_url': back_url},
495			url: ('/dialog/join.cm'),
496			dataType: 'html',
497			async: true,
498			cache: false,
499			success: function(html){
500				var $html = $(html);
501				var $join_btn = $html.find('._join_btn');
502
503				$join_btn.off('click').on('click', function(e){
504					joinSubmit();
505					e.preventDefault();
506					return false;
507				});
508
509				$.cocoaDialog.open({type: 'site_join', custom_popup: $html});
510			}
511		});
512	};
513
514	var checkRequireOption = function(){
515		if($('._requireOption').length > 0 || $('._requireInputOption').length > 0){		// 필수옵션이 존재할 때
516			if($('._selected_require_option').length == 0) return false;		// 선택된 필수옵션이 없는 경우
517		}
518
519		return true;
520	};
521
522	/**
523	 *
524	 * @param back_url
525	 * @param type
526	 * @param callback
527	 * @param used_login_btn 로그인 버튼을 직접 클릭해서 들어왔을 경우 'Y', 'Y'일 때만 로그인 후 설정된 메뉴로 이동
528	 * @param page_type 호출된 페이지, 현재 payment 에서만 사용 중
529	 */
530	var openLogin = function(back_url,type,callback,used_login_btn, page_type){
531		var param = {};
532		if ( page_type == 'payment' ) { // 호출된 페이지가 payment 일 경우
533			// 필수옵션 선택 유효성 검사 실행
534			if ( ! checkRequireOption() ) {
535				alert(LOCALIZE.설명_필수옵션이모두선택되어있지않습니다());
536				return false;
537			}
538			// 배송국가 param 세팅
539			param.country_code = $(".countryList").val();
540		}
541
542		var back_url = typeof back_url == 'undefined' ? '':back_url;
543		$.cocoaDialog.close();
544		$.ajax({
545			type: 'POST',
546			data: {back_url:back_url,'type':type,'used_login_btn':used_login_btn, 'param' : param},
547			url: ('/dialog/login.cm'),
548			dataType: 'html',
549			async: true,
550			cache: false,
551			success: function(html){
552				var $html = $(html);
553				$html.find('._guest_payment').on('click',function(){
554					if(typeof callback == 'function')
555						callback();
556				});
557
558				if(type === 'adult'){
559					$('._login_auth_btn').hide();
560					$.cocoaDialog.open({
561						type : 'site_login', custom_popup : $html, 'close_block':true, hide_event : function(){
562							$('._login_auth_btn').show();
563						}
564					});
565				}else{
566					$.cocoaDialog.open({type: 'site_login', custom_popup: $html});
567				}
568			}
569		});
570	};
571	var openGuestLogin = function(back_url){
572		var back_url = typeof back_url == 'undefined' ? '':back_url;
573		$.cocoaDialog.close();
574		$.ajax({
575			type: 'POST',
576			data: {back_url:back_url },
577			url: ('/dialog/guest_login.cm'),
578			dataType: 'html',
579			async: true,
580			cache: false,
581			success: function(html){
582				var $html = $(html);
583				$.cocoaDialog.open({type: 'site_login', custom_popup: $html});
584			}
585		});
586	};
587
588	var joinSubmit = function(is_social){
589		if(join_processing)
590			return false;
591		join_processing = true;
592		var birth_form = $('._item._birth');
593		var data = $join_form.serializeObject();
594		var inactive_year = 0;//$('#inactive_year:checked').val();
595		if($('.is_change_all_admin').length > 0 ){
596			$.extend(data, {is_change_all_admin: $('.is_change_all_admin').prop('checked')});
597		}
598		if(birth_form.find('#birth_y').prop("disabled")){
599			$.extend(data, {
600				birth_y: birth_form.find('#birth_y').val(),
601				birth_m: birth_form.find('#birth_m').val(),
602				birth_d: birth_form.find('#birth_d').val()
603			});
604		}
605		//$.extend(data, {inactive_year: inactive_year});
606		$.extend(data, {is_social: is_social ? 'Y' : 'N'});
607		$.ajax({
608			type:'POST',
609			data:data,
610			url:('/backpg/join.cm'),
611			dataType:'json',
612			cache:false,
613			success:function(res){
614				if(res.msg === 'SUCCESS'){
615					setCookie('join_back_url', '', -1);
616
617					if (typeof window.sessionStorage !== 'undefined') {
618						window.sessionStorage.removeItem('imweb_site_auth_token');
619					}
620
621					var asyncTasks = [];
622
623					switch ( res.mode ) {
624						case 'add':
625							if ( typeof FB_PIXEL != 'undefined' && res.fb_registration_check == 'N')FB_PIXEL.CompleteRegistration('join',res.currency,res.join_id);
626							if ( typeof NP_LOG != 'undefined' ) NP_LOG.CompleteJoin();
627							if ( typeof DAUM_CTS != 'undefined' ) DAUM_CTS.CompleteJoin();
628							if ( typeof ACE_COUNTER != 'undefined' ) {
629								ACE_COUNTER.setType(res['ace_counter_type']);
630								ACE_COUNTER.CompleteJoin(res.join_id);
631                if(res['use_join_confirm']){
632                  ACE_COUNTER.CompleteLogin(res.join_id);
633                }
634							}
635							if ( typeof KAKAO_PIXEL != 'undefined' ) KAKAO_PIXEL.CompleteJoin();
636							// if ( typeof CHANNEL_PLUGIN != 'undefined') CHANNEL_PLUGIN.CompleteJoin();
637							if ( typeof GOOGLE_ADWORDS_TRACE != 'undefined' && res.google_join_check) GOOGLE_ADWORDS_TRACE.EtcTrace(res.google_join_id);
638							if ( typeof ACE_COUNTER_PARTNER != 'undefined'){
639								if(res.ace_counter_partner_type == 'mweb'){
640									m_jn = 'join';
641									m_jid = res.join_id;
642									if(res.age > 0){
643										m_ag = res.age;
644									}
645									if(res.gender !== ''){
646										m_gd = res.gender === 'F' ? 'woman' : 'man';
647									}
648									if(res.use_join_confirm !==''){
649										m_id = res.join_id;
650									}
651									try{
652										AM_PL('/join_complete.php');
653									}catch(e){
654									}
655								}else{
656									_jn = 'join';
657									_jid = res.join_id;
658									if(res.age > 0){
659										_ag = res.age;
660									}
661									if(res.gender !== ''){
662										_gd = res.gender === 'F' ? 'woman' : 'man';
663									}
664									if(res.use_join_confirm !==''){
665										_id = res.join_id;
666									}
667									try{
668										_PL(window.location.hostname+'/join_complete.php');
669									}catch(e){
670									}
671								}
672							}
673							if(res.useChannelTalk === 'Y') {
674								localStorage.setItem('channelTalkJoinFlag', 'true');
675							}
676
677							if (typeof TIKTOK_PIXEL != 'undefined') {
678								TIKTOK_PIXEL.track('CompleteRegistration', {
679									event_id: res.join_id,
680									currency: res.currency,
681									content_id: res.join_id,
682									value: 1,
683								});
684							}
685
686							if (typeof CRM_ONSITE != 'undefined') {
687								CRM_ONSITE.track({ name: 'SIGNUP' });
688							}
689
690							if(typeof parent.Nachocode !== 'undefined' && res.nachocode_api_key != '' && res.nachocode_api_key != 'temp-api-key') {
691								asyncTasks.push(
692									(async function() {
693										try {
694											await parent.Nachocode.initAsync(res.nachocode_api_key);
695
696											if (parent.Nachocode.env.isApp()) {
697												await parent.Nachocode.user.setUserId(res.join_id);
698											}
699										} catch (error) {
700											console.error('Nachocode 에러:', error);
701										}
702									})()
703								);
704							}
705
706							break;
707						case 'edit':
708							if ( typeof CHANNEL_PLUGIN != "undefined" ) CHANNEL_PLUGIN.updateChannelProfileAttr('member');
709							break;
710					}
711
712					terms_agree = true;
713					if ( res['use_join_confirm'] ) {
714						if(res['join_confirm_type'] === 'confirm_admin'){
715							alert(LOCALIZE.설명_가입승인되지않은아이디입니다());
716						}
717					}
718
719					if(res.advanced_trace_data != null){
720						if(res.advanced_trace_data.header != ''){
721							$('head').append(res.advanced_trace_data.header);
722						}
723						if(res.advanced_trace_data.body != ''){
724							$('body').append(res.advanced_trace_data.body);
725						}
726						if(res.advanced_trace_data.footer != ''){
727							$('footer').append(res.advanced_trace_data.footer);
728						}
729					}
730
731					Promise.race([
732						Promise.all(asyncTasks),
733						new Promise(function(resolve) { setTimeout(resolve, 3000); })
734					]).then(function() {
735						if(res.back_url != ''){
736							window.location.href = window.location.protocol + '//' + window.location.host + res.back_url;
737						}else{
738							window.location.href = '/';
739						}
740					}).catch(function(error) {
741						if(res.back_url != ''){
742							window.location.href = window.location.protocol + '//' + window.location.host + res.back_url;
743						}else{
744							window.location.href = '/';
745						}
746					});
747				}else{
748					if(res.code > 0){
749						alert(res.msg);
750						if(res.code === 4){
751							window.location.href = '/';
752						}
753					}else{
754						var $obj = $join_form.find('._' + res.flag);
755						$join_form.find('._item').toggleClass('active', false);
756						$join_form.find('._item').toggleClass('triangle', false);
757						$.each(res.accept, function(e, v){
758							var $acc_obj = $join_form.find('._' + v);
759							$acc_obj.toggleClass('active', true);
760						});
761
762						$obj.toggleClass('triangle', true);
763						$obj.find('input').focus();
764						if ($obj[0]) $obj[0].scrollIntoView({ behavior: 'smooth', block: 'center' });
765
766						// 중복 문구 방지
767						const doubleCheck = $obj.find('._msg').first().text() === res.msg;
768						if (!doubleCheck) $obj.find('._msg').first().text(res.msg);
769
770						$join_form.find('._' + res.flag).toggleClass('active', false);
771						if(res.flag === 'passwd') $('._passwd_confirm').toggleClass('active', false);
772					}
773				}
774
775				join_processing = false;
776			},
777			error: function(xhr, status, error) {
778				join_processing = false;
779				if (xhr.status === 504 && typeof TEST_SERVER !== 'undefined' && TEST_SERVER) {
780					alert('[TEST] 회원가입 요청 504 Gateway Timeout');
781				}
782			}
783		});
784	};
785
786	/**
787	 * 팝업형 소셜 회원가입 시 소셜에서 제공된 정보가 충분한 경우 약관동의 창에서 추가정보 받지 않고 바로 가입 처리
788	 */
789	var joinSubmitByAgree = function(){
790		var policy_agree = $('#policy_agree').is(':checked') ? 'ok' : '';
791		var privacy_agree = $('#privacy_agree').is(':checked') ? 'ok' : '';
792		var third_party_agree = $('#third_party_agree').is(':checked') ? 'ok' : '';
793		var marketing_sms_agree = $('#marketing_sms_agree').is(':checked') ? 'ok' : '';
794		var marketing_email_agree = $('#marketing_email_agree').is(':checked') ? 'ok' : '';
795		var limit_join_agree = $('#limit_join_agree').is(':checked') ? 'ok' : '';
796		var join_type_code = $('#type_code').val();
797		var inactive_year = 0;//$('#inactive_year:checked').val();
798
799		$.ajax({
800			type : 'POST',
801			data : {
802				policy_agree: policy_agree,
803				privacy_agree: privacy_agree,
804				third_party_agree: third_party_agree,
805				marketing_sms_agree: marketing_sms_agree,
806				marketing_email_agree: marketing_email_agree,
807				limit_join_agree: limit_join_agree,
808				//inactive_year: inactive_year,
809				is_social: 'Y',
810				required_data: 'N',
811				use_login_popup: 'Y',
812				type_code : join_type_code
813			},
814			url : ('/backpg/join_agree.cm'),
815			dataType : 'json',
816			async : false,
817			cache : false,
818			success : function(res){
819				if(res.msg === 'SUCCESS'){
820					// 나쵸코드 앱 푸시 토큰 등록
821					if(typeof parent.Nachocode !== 'undefined' && res.uid && res.nachocode_api_key) {
822						parent.Nachocode.event.on('init', function() {
823							if (parent.Nachocode.env.isApp()) {
824								parent.Nachocode.user.setUserId(res.uid)
825									.then(function() {
826										location.href = res.url;
827									}, function() {
828										location.href = res.url;
829									});
830							} else {
831								location.href = res.url;
832							}
833						});
834						parent.Nachocode.init(res.nachocode_api_key);
835					} else {
836						location.href = res.url;
837					}
838				}else{
839					if(res.msg === 'NEED_ADMIN_CONFIRM'){
840						alert(getLocalizeString('설명_가입승인되지않은아이디입니다', '', '가입승인 대기 중입니다. 운영자의 승인 후 이용하실 수 있습니다.'));
841						location.href = res.url;
842					}else{
843						alert(res.msg);
844					}
845				}
846			}
847		});
848	};
849
850	/**
851	 * 소셜 회원가입 시 소셜에서 제공된 정보가 충분한 경우 가입유형 선택창에서 추가정보 받지 않고 바로 가입 처리
852	 */
853	var joinSubmitByJoinPattern = function(join_type_code){
854		$.ajax({
855			type : 'POST',
856			data : {
857				policy_agree: 'ok',
858				privacy_agree: 'ok',
859				is_social: 'Y',
860				required_data: 'N',
861				use_login_popup: 'Y',
862				type_code : join_type_code
863			},
864			url : ('/backpg/join_agree.cm'),
865			dataType : 'json',
866			async : false,
867			cache : false,
868			success : function(res){
869				if(res.msg === 'SUCCESS'){
870					// 나쵸코드 앱 푸시 토큰 등록
871					if(typeof parent.Nachocode !== 'undefined' && res.uid && res.nachocode_api_key) {
872						parent.Nachocode.event.on('init', function() {
873							if (parent.Nachocode.env.isApp()) {
874								parent.Nachocode.user.setUserId(res.uid)
875									.then(function() {
876										location.href = res.url;
877									}, function() {
878										location.href = res.url;
879									});
880							} else {
881								location.href = res.url;
882							}
883						});
884						parent.Nachocode.init(res.nachocode_api_key);
885					} else {
886						location.href = res.url;
887					}
888				}else{
889					if(res.msg === 'NEED_ADMIN_CONFIRM'){
890						alert(getLocalizeString('설명_가입승인되지않은아이디입니다', '', '가입승인 대기 중입니다. 운영자의 승인 후 이용하실 수 있습니다.'));
891						location.href = res.url;
892					}else{
893						alert(res.msg);
894					}
895				}
896			}
897		});
898	};
899
900	var openJoinWithoutTerms = function(__third_party,__marketing_sms_agree,__marketing_email_agree, back_url, type_code){
901		_third_party = __third_party;
902		_marketing_sms_agree = __marketing_sms_agree;
903		_marketing_email_agree = __marketing_email_agree;
904		terms_agree = true;
905		openJoin(back_url, '', type_code);
906	};
907
908	var openJoin = function(back_url, type, type_code){
909    var third_party_agree = $('#third_party_agree').is(':checked') ? 'Y' : 'N';
910    var marketing_sms_agree = $('#marketing_sms_agree').is(':checked') ? 'Y' : 'N';
911    var marketing_email_agree = $('#marketing_email_agree').is(':checked') ? 'Y' : 'N';
912    var limit_join_agree = $('#limit_join_agree').is(':checked') ? 'Y' : 'N';
913    var inactive_year = 0;//$('#inactive_year:checked').val();
914		$.cocoaDialog.close();
915		if(!terms_agree){
916			$.ajax({
917				type: 'POST',
918				data: {d: 'd', type : type, back_url: back_url, type_code:type_code},
919				url: ('/dialog/join_policy.cm'),
920				dataType: 'json',
921				async: true,
922				cache: false,
923				success: function(res){
924					if(res.msg === 'SUCCESS'){
925						var $html = $(res.html);
926						var $policy_check_all = $html.find('._check_all');
927						var $agree_list = $html.find('._join_agree');
928						var $join_btn = $html.find('._join_btn');
929
930						$policy_check_all.off('click').on('click', function(){
931							$agree_list.prop('checked', $(this).prop('checked'));
932						});
933
934						$agree_list.off('click').on('click', function(){
935							if($(this).prop('checked') === false && $policy_check_all.prop('checked')) $policy_check_all.prop('checked', false);
936
937							var is_all_checked = true;
938							$agree_list.each(function(idx){
939								if($agree_list.eq(idx).prop('checked') === false) is_all_checked = false;
940							});
941							if(is_all_checked) $policy_check_all.prop('checked', true);
942						});
943
944						$join_btn.off('click').on('click', function(){
945							var missing_agree_cnt = $html.find(".require_agreement:checkbox:not(:checked)").length;
946							var third_party_agree = $html.find("#third_party_agree").length;
947
948							if($html.find("#limit_join_agree").length > 0){
949								if(!$html.find("#limit_join_agree").is(":checked")){
950									alert(getLocalizeString('설명_만14세미만은가입이불가합니다오류', '', '"만 14세 미만은 가입이 불가합니다.만 14세 이상임을 확인해주세요'));
951
952									return false;
953								}
954							}
955
956
957							// 필수항목 동의 누락이 있을 경우
958							if(missing_agree_cnt > 0){
959								if(third_party_agree > 0){
960									// 개인정보 제3자 제공 동의 필수인 경우
961									alert(getLocalizeString('설명_이용약관및개인정보처리방침및개인정보제3자동의', '', '이용약관 및 개인정보 처리방침 및 개인정보 제3자 제공에 동의하셔야 가입이 가능합니다.'));
962								}else{
963									alert(getLocalizeString('설명_동의해주세요', '', '이용약관 및 개인정보 처리방침에 동의하셔야 가입이 가능합니다.'));
964								}
965							}else{
966								terms_agree = true;
967								openJoin(back_url, '', type_code);
968							}
969							event.stopPropagation();
970							return false;
971						});
972
973						$.cocoaDialog.open({type : 'site_join_policy', custom_popup : $html});
974					}else if(res.msg === 'pass'){
975						terms_agree = true;
976						openJoin(back_url, '', type_code);
977					}
978				}
979			});
980		}else{
981			terms_agree = false;
982      
983			if(_third_party !== undefined){
984				third_party_agree = _third_party;
985			}
986			if(_marketing_sms_agree !== undefined){
987				marketing_sms_agree = _marketing_sms_agree;
988			}
989			if(_marketing_email_agree !== undefined){
990				marketing_email_agree = _marketing_email_agree;
991			}
992			$.ajax({
993				type: 'POST',
994				data: {d: 'd',
995					'third_party_agree'    : third_party_agree,
996					'marketing_sms_agree'  : marketing_sms_agree,
997					'marketing_email_agree': marketing_email_agree,
998					'inactive_year'		   : inactive_year,
999					back_url 			   : back_url,
1000					type_code 			   : type_code,
1001					limit_join_agree	   :limit_join_agree,
1002				},
1003				url: ('/dialog/join.cm'),
1004				dataType: 'html',
1005				async: true,
1006				cache: false,
1007				success: function(html){
1008					var $html = $(html);
1009					var $join_btn = $html.find('._join_btn');
1010
1011					$join_btn.off('click').on('click', function(e){
1012						joinSubmit();
1013						e.preventDefault();
1014						return false;
1015					});
1016
1017					$.cocoaDialog.open({type: 'site_join', custom_popup: $html});
1018				}
1019			});
1020		}
1021
1022	};
1023
1024	var openJoinPatternChoice = function(back_url, request_page,social_type){
1025		$.ajax({
1026			type: 'POST',
1027			data: {back_url : back_url, request_page : request_page, social_type : social_type},
1028			url: ('/dialog/join_pattern_choice.cm'),
1029			dataType: 'json',
1030			async: true,
1031			cache: false,
1032			success: function(res){
1033				if(res.msg === 'SUCCESS'){ // 가입 유형이 복수일때
1034					$.cocoaDialog.close();
1035					$.cocoaDialog.open({type: 'site_join', custom_popup: res.html});
1036				}else{ // 가입유형이 복수가 아닐때
1037					openJoinTypeChoice(back_url,request_page);
1038				}
1039			}
1040		});
1041	};
1042
1043	var openJoinTypeChoice = function(back_url, request_page, type_code){
1044		$.ajax({
1045			type: 'POST',
1046			data: {back_url: back_url, request_page : request_page, type_code : type_code},
1047			url: ('/dialog/join_type_choice.cm'),
1048			dataType: 'json',
1049			async: true,
1050			cache: false,
1051			success: function(res){
1052				if(res.msg === 'SUCCESS'){ // 소셜, 일반 회원가입 선택 모달
1053					$.cocoaDialog.close();
1054					$.cocoaDialog.open({type: 'site_join', custom_popup: res.html});
1055				}else{ // 바로 약관동의 모달로
1056					openJoin(back_url, request_page, type_code);
1057				}
1058			}
1059		});
1060	};
1061
1062	/**
1063	 * 소셜 가입 버튼을 숨기고 ID/PW 회원가입 입력폼 노출시킴
1064	 */
1065	var showJoinForm = function(){
1066		if(!$join_form) $join_form = $('#join_form');
1067		var $sns_login_wrap = $('._sns_login_wrap');
1068		$sns_login_wrap.hide();
1069		$join_form.show();
1070
1071	};
1072	/**
1073	 * 앱에서 프로필 호출할때 로그인여부 체크해서 분기처리
1074	 * [DATE] 2016 11 29
1075	 * @param isLogin
1076	 */
1077	var openAppAction = function (isLogin) {
1078		if(!isLogin) openLogin();
1079		else editProfile();
1080
1081	};
1082
1083	/***
1084	 * 현재 로그인상태를 확인해서 로그인 창 또는 정보수정 다이얼로그를 뛰움
1085	 */
1086	var openLoginOrModifyDialogByLoginStatus = function(){
1087		$.ajax({
1088			type: 'POST',
1089			url: ('/ajax/check_login.cm'),
1090			dataType: 'json',
1091			async: true,
1092			cache: false,
1093			success: function(res){
1094				if(res.is_login == "Y"){
1095					//쇼핑/예약 사이트인경우 마이페이지로
1096					if(res.is_shop == "Y"){
1097						location.href="/shop_mypage";
1098					}else{
1099						editProfile();
1100					}
1101
1102				}else{
1103					location.href = '/login';
1104					//openLogin();
1105				}
1106			}
1107		});
1108	};
1109
1110	/**
1111	 * 다이얼로그가 실행되어있는지 체크해서 분기처리
1112	 * [DATE] 2016 11 29
1113	 */
1114	var isDialogOpen = function () {
1115		if($.cocoaDialog.isOpen())
1116			$.cocoaDialog.close();
1117		else
1118			window.dozAndroidBridge.dialogClose();
1119	};
1120
1121	var positionMemberProfile = function($obj){
1122		var $window = $(window);
1123		var $body = $('body');
1124		var fixed = $body.hasClass('fixed_menu');
1125		if(fixed){
1126			$obj = $('#doz_header_wrap .fixed_header').find('.profile');
1127		}
1128		var body_width = $('body').width();
1129		var body_height = $('body').height();
1130		var window_height = $window.height();
1131
1132		var top = $obj.offset().top;
1133		var left = $obj.offset().left;
1134		var width = $obj.outerWidth();
1135		var height = $obj.outerHeight();
1136
1137		var layer_width = $member_profile.outerWidth();
1138		var layer_height = $member_profile.outerHeight();
1139
1140		var result_top = 0;
1141		var result_left = 0;
1142
1143		result_left = left+width-layer_width;
1144		//TODO 아래의 경우에만 처리된 이유가 있는것인지..
1145		//아래와 같이 처리뢰면 메뉴바 확장을 사용안할 경우 프로필 레이아웃 위치 계산이 안됨
1146		//			if(body_width < left+layer_width){
1147		//				result_left = left+width-layer_width;
1148		//			}
1149
1150		//if(window_height < top+layer_height){
1151		//	result_top = top-height-layer_height;
1152		//}else{
1153		result_top = top+height+10;
1154		//}
1155
1156
1157		if(left <= layer_width){
1158			//프로필 팝업이 화면밖으로 나가는 경우 프로필 영역 가운데 정렬처리
1159			if(body_width < left+layer_width){
1160				$member_profile.css({
1161					'margin':'0 auto'
1162				});
1163				result_left = 0;
1164			}else{
1165				result_left = left;
1166			}
1167
1168		}
1169
1170		$member_profile.css({
1171			left : result_left,
1172			top : result_top
1173		});
1174	};
1175
1176	var showMemberProfile = function($obj){
1177		if(typeof $member_profile == 'undefined') return false;
1178		positionMemberProfile($obj);
1179		$member_profile.show();
1180		var is_click = true;
1181		$('body').off('click.show_member_profile').on('click.show_member_profile',function(e){
1182			var $target = $(e.target);
1183			var is_profile = $target.closest('#'+member_profile_id).length>0;
1184			if(!is_profile && !is_click) {
1185				closeMemberProfile();
1186			}
1187			is_click = false;
1188		});
1189		$(window).off('scroll.show_member_profile').on('scroll.show_member_profile',function(e){
1190			positionMemberProfile($obj);
1191		});
1192
1193	};
1194	var closeMemberProfile = function($obj){
1195		$member_profile.hide();
1196		$('body').off('click.show_member_profile');
1197		$(window).off('scroll.show_member_profile');
1198	};
1199
1200	/**
1201	 * 드림 시큐리티 v2 본인인증 표준창 호출
1202	 */
1203	var openDreamSecurityV2Window = function() {
1204
1205		authRedirectProcessing = false;
1206
1207
1208        var recoverySelection = getRecoverySelection();
1209        if (!recoverySelection) return;
1210
1211		if (typeof MOBILEOK !== 'undefined') {
1212
1213			$.ajax({
1214				type: 'POST',
1215				data: {
1216					'account_index': recoverySelection.account_index,
1217					'recovery_id': recoverySelection.recovery_id
1218				},
1219				url: '/ajax/set_dream_security_v2_tokens.cm',
1220				dataType: 'json',
1221				cache: false,
1222				success: function(res) {
1223					if (res.msg === 'SUCCESS') {
1224						var userAgent = navigator.userAgent || '';
1225						var isInAppBrowser =
1226								userAgent.indexOf('Instagram') > -1 ||
1227								userAgent.indexOf('FBAN') > -1 ||
1228								userAgent.indexOf('Line') > -1 ||
1229								userAgent.indexOf('KAKAOTALK') > -1 ||
1230								userAgent.indexOf('Kakaotalk') > -1;
1231
1232						var isSafari = userAgent.indexOf('Safari') > -1 && userAgent.indexOf('Chrome') === -1;
1233						try {
1234							if (IS_ANDROID_APP == 'Y' || IS_IOS_APP == 'Y' || isInAppBrowser || isSafari ) {
1235								MOBILEOK.process('/adult/set_auth_service_dream_security_v2_session.cm','MB','');
1236							} else {
1237								window.dreamSecurityV2result = function(data) {
1238
1239									if (typeof data === 'string') {
1240										var htmlParser = parseAuthResultHTML(data);
1241
1242										if (htmlParser.success) {
1243											// 인증 성공 - 모드별 처리
1244											processParsedAuthResult(htmlParser);
1245										} else {
1246											handleAuthFailure(htmlParser);
1247										}
1248										return;
1249									}
1250
1251									console.error('Unexpected response type:', typeof data, data);
1252								};
1253
1254								MOBILEOK.process('/adult/set_auth_service_dream_security_v2_session.cm','WB','dreamSecurityV2result');
1255							}
1256						} catch (e) {
1257							console.error('DreamSecurity V2 process error:', e);
1258							alert("인증 처리 중 오류가 발생했습니다. 다시 시도해주세요.");
1259						}
1260					} else {
1261						alert(res.msg);
1262					}
1263				},
1264				error: function() {
1265					alert("인증 처리 중 오류가 발생했습니다. 다시 시도해주세요.");
1266				}
1267				
1268			});
1269		} else {
1270			alert("인증 서버 오류입니다. 고객지원에 문의해주세요.");
1271		}
1272	};
1273
1274	var openDreamSecurityV2ForFindId = function() {
1275		openDreamSecurityV2Window();
1276	};
1277
1278	var openDreamSecurityV2ForAdult = function() {
1279		openDreamSecurityV2Window();
1280	};
1281
1282	/**
1283	 * auth_service_result.cm 응답 파싱
1284	 */
1285	var parseAuthResultHTML = function(htmlString) {
1286		var result = {
1287			success: false,
1288			data: {},
1289			errorMsg: null,
1290			mode: 'join_form',
1291			hasOpener: false,
1292			redirectUrl: null,
1293			isConfirm: false
1294		};
1295
1296		result.hasOpener = htmlString.indexOf('have_opener') > -1;
1297
1298		if (htmlString.indexOf('인증에 성공하였습니다') > -1) {
1299			result.success = true;
1300
1301			var authModeMatch = htmlString.match(/var AUTH_MODE = '([^']+)'/);
1302			if (authModeMatch) {
1303				result.mode = authModeMatch[1];
1304			} else {
1305				result.mode = 'join_form';
1306			}
1307
1308			if (result.mode === 'prod_adult') {
1309				var backUrlMatch = htmlString.match(/_location\.href='([^']*)'/);
1310				if (backUrlMatch) result.data.back_url = backUrlMatch[1];
1311			} else if (result.mode === 'adult_auth_npay') {
1312				var npayBackUrlMatch = htmlString.match(/var ADULT_AUTH_NPAY_BACK_URL = ([^;]*);/);
1313				if (npayBackUrlMatch) {
1314					try {
1315						result.data.back_url = JSON.parse(npayBackUrlMatch[1]);
1316					} catch (e) {
1317						result.data.back_url = null;
1318					}
1319				}
1320			} else if (result.mode === 'find_id') {
1321				var dreamDiMatch = htmlString.match(/dream_security_di\s*:\s*'([^']*)'/);
1322				if (dreamDiMatch) result.data.dream_security_di = dreamDiMatch[1];
1323
1324				var encryptCiMatch = htmlString.match(/encrypt_ci\s*:\s*'([^']*)'/);
1325				if (encryptCiMatch) result.data.encrypt_ci = encryptCiMatch[1];
1326
1327				var nameMatch = htmlString.match(/name\s*:\s*'([^']*)'/);
1328				if (nameMatch) result.data.name = nameMatch[1];
1329
1330				var birthdayMatch = htmlString.match(/birthday\s*:\s*'([^']*)'/);
1331				if (birthdayMatch) result.data.birthday = birthdayMatch[1];
1332
1333                var recoveryMatch = htmlString.match(/var RECOVERY_SELECTION = ([^;]+);/);
1334                if (recoveryMatch) {
1335                    try { result.data.recovery = JSON.parse(recoveryMatch[1]); } catch (e) { result.data.recovery = null; }
1336                }
1337			} else if (result.mode === 'join_form') {
1338
1339				var birthYMatch = htmlString.match(/_document\.find\('#birth_y'\)\.val\('([^']*)'\)/);
1340				var birthMMatch = htmlString.match(/_document\.find\('#birth_m'\)\.val\('([^']*)'\)/);
1341				var birthDMatch = htmlString.match(/_document\.find\('#birth_d'\)\.val\('([^']*)'\)/);
1342
1343				if (birthYMatch) result.data.birth_y = birthYMatch[1];
1344				if (birthMMatch) result.data.birth_m = birthMMatch[1];
1345				if (birthDMatch) result.data.birth_d = birthDMatch[1];
1346
1347				var nameMatch = htmlString.match(/_document\.find\('#join_name'\)\.val\('([^']*)'\)/);
1348				if (nameMatch) result.data.name = nameMatch[1];
1349
1350				var callnumMatch = htmlString.match(/_document\.find\('#join_callnum'\)\.val\('([^']*)'\)/);
1351				if (callnumMatch) result.data.callnum = callnumMatch[1];
1352
1353				var genderMMatch = htmlString.match(/_document\.find\('#gender_M'\)\.attr\('checked', true\)/);
1354				var genderFMatch = htmlString.match(/_document\.find\('#gender_F'\)\.attr\('checked', true\)/);
1355				if (genderMMatch) result.data.gender = 'M';
1356				else if (genderFMatch) result.data.gender = 'F';
1357
1358				var limitJoinMatch = htmlString.match(/checkLimitJoin\('([^']*)'[^)]*\)/);
1359				if (limitJoinMatch) {
1360					result.data.is_adult = limitJoinMatch[1] === 'Y';
1361				}
1362
1363				result.data.auth_info_save = htmlString.indexOf("attr('readonly', true)") > -1;
1364
1365				var joinRedirectMatch = htmlString.match(/_location\.href='([^']*site_join[^']*)'/);
1366				if (joinRedirectMatch) result.redirectUrl = joinRedirectMatch[1];
1367			}
1368
1369		} else {
1370			result.success = false;
1371
1372			var alertMatch = htmlString.match(/alert\(['"]([^'"]+)['"]\)/);
1373			if (alertMatch && alertMatch[1] !== '인증에 성공하였습니다') {
1374				result.errorMsg = alertMatch[1].replace(/\\n/g, '\n');
1375			}
1376
1377			var confirmMatch = htmlString.match(/confirm\(['"]([^'"]+)['"]\)/);
1378			if (confirmMatch) {
1379				result.errorMsg = confirmMatch[1].replace(/\\n/g, '\n');
1380				result.isConfirm = true;
1381			}
1382
1383			var failRedirectMatch = htmlString.match(/_location\.href='([^']*)'/);
1384			if (failRedirectMatch) result.redirectUrl = failRedirectMatch[1];
1385		}
1386
1387		return result;
1388	};
1389
1390	/**
1391	 * 파싱된 결과 모드별 처리
1392	 */
1393	var processParsedAuthResult = function(htmlParser) {
1394		// 이미 처리 중이면 중복 실행 방지
1395		if (authRedirectProcessing) {
1396			return;
1397		}
1398		authRedirectProcessing = true;
1399
1400		var mode = htmlParser.mode;
1401		var data = htmlParser.data;
1402
1403		var hasOpener = false;
1404		try {
1405			if (window.opener && typeof window.opener.NOT_APP_PAGE !== 'undefined') {
1406				hasOpener = true;
1407			}
1408		} catch (e) {
1409			hasOpener = false;
1410		}
1411
1412		alert('인증에 성공하였습니다.');
1413		switch(mode) {
1414			case 'adult_page': // 성인인증 인트로페이지
1415				if (hasOpener) {
1416					window.opener.location.reload();
1417					window.close();
1418				} else {
1419					location.href = '/';
1420				}
1421				break;
1422
1423			case 'unauth_member': // 미인증 회원 로그인처리
1424				if (hasOpener) {
1425					window.opener.location.reload();
1426					window.close();
1427				} else {
1428					location.href = '/';
1429				}
1430				break;
1431
1432			case 'join_form': // 가입 폼 처리
1433				if (hasOpener) {
1434					updateJoinFormFields(data);
1435					window.close();
1436				} else {
1437					if ($('#auth_success_wrap').length > 0 || $('#join_name').length > 0) {
1438						updateJoinFormFields(data);
1439					} else if (htmlParser.redirectUrl) {
1440						location.href = htmlParser.redirectUrl;
1441					}
1442				}
1443				break;
1444
1445			case 'prod_adult': // 미성년자구매불가 상품
1446				if (hasOpener) {
1447					if (data.back_url) {
1448						window.opener.location.href = data.back_url;
1449					} else {
1450						window.opener.location.reload();
1451					}
1452					window.close();
1453				} else {
1454					if (data.back_url) {
1455						location.href = data.back_url;
1456					} else {
1457						location.reload();
1458					}
1459				}
1460				break;
1461
1462			case 'adult_auth_npay': // 네이버페이 구매 시 성인인증
1463				if (hasOpener) {
1464					if (data.back_url) {
1465						window.opener.location.href = data.back_url;
1466					} else {
1467						window.opener.location.reload();
1468					}
1469					window.close();
1470				} else {
1471					if (data.back_url) {
1472						location.href = data.back_url;
1473					} else {
1474						location.reload();
1475					}
1476				}
1477				break;
1478
1479		case 'find_id': // 아이디/비밀번호 찾기
1480			processFindIdInDialog(data);
1481			break;
1482
1483			default:
1484				location.reload();
1485				break;
1486		}
1487	};
1488
1489	var updateJoinFormFields = function(data) {
1490		$('#auth_success_wrap').show();
1491		$('#prevention_screen').hide();
1492		$('#auth_fail_wrap').hide();
1493		$('#auth_btn_wrap').hide();
1494		$('._auth_before_success_button').hide();
1495		$('.auth_completed').show();
1496
1497		if (data.birth_y) {
1498			$('#birth_y').val(data.birth_y).attr('disabled', true).css('cursor', 'default');
1499		}
1500		if (data.birth_m) {
1501			$('#birth_m').val(data.birth_m).attr('disabled', true).css('cursor', 'default');
1502		}
1503		if (data.birth_d) {
1504			$('#birth_d').val(data.birth_d).attr('disabled', true).css('cursor', 'default');
1505		}
1506		$('#prevention_screen_birth').show();
1507
1508		if (data.auth_info_save) {
1509			if (data.name) {
1510				$('#join_name').val(data.name).attr('readonly', true);
1511				$('#join_name').attr('onclick', "alert('본인인증으로 저장된 회원정보는 재인증을 통해서만 수정 가능합니다.')");
1512			}
1513
1514			if (data.gender) {
1515				$('#gender_' + data.gender).prop('checked', true);
1516				var opposite_gender = data.gender === 'M' ? 'F' : 'M';
1517				$('#gender_' + opposite_gender).attr('disabled', true);
1518				$('#gender_' + opposite_gender).parent('label').attr('onclick',
1519					"alert('본인인증으로 저장된 회원정보는 재인증을 통해서만 수정 가능합니다.')");
1520				$('#gender_' + data.gender).siblings('span').addClass('gender_readonly');
1521				$('#gender_' + opposite_gender).siblings('span').addClass('gender_readonly');
1522			}
1523
1524			if (data.callnum) {
1525				$('#join_callnum').val(data.callnum).attr('readonly', true);
1526				$('#join_callnum').attr('onclick', "alert('본인인증으로 저장된 회원정보는 재인증을 통해서만 수정 가능합니다.')");
1527			}
1528		}
1529
1530		if (typeof checkLimitJoin === 'function' && data.is_adult !== undefined) {
1531			// 나이 계산
1532			var age = data.birth_y ? new Date().getFullYear() - parseInt(data.birth_y) : 0;
1533			checkLimitJoin(data.is_adult, 'auth', age);
1534		}
1535	};
1536
1537	var handleAuthFailure = function(htmlParser) {
1538		// 이미 처리 중이면 중복 실행 방지
1539		if (authRedirectProcessing) {
1540			return;
1541		}
1542		authRedirectProcessing = true;
1543
1544		// 실제 opener 존재 여부 체크
1545		var hasOpener = false;
1546		try {
1547			if (window.opener && typeof window.opener.NOT_APP_PAGE !== 'undefined') {
1548				hasOpener = true;
1549			}
1550		} catch (e) {
1551			hasOpener = false;
1552		}
1553
1554		if (htmlParser.errorMsg) {
1555			if (htmlParser.isConfirm) {
1556				if (confirm(htmlParser.errorMsg)) {
1557					if (hasOpener) {
1558						window.opener.location.href = '/?mode=find_id';
1559						window.close();
1560					} else {
1561						location.href = '/?mode=find_id';
1562					}
1563				} else {
1564					if (hasOpener) {
1565						window.opener.location.href = '/';
1566						window.close();
1567					} else {
1568						location.href = '/';
1569					}
1570				}
1571				return; // confirm 처리 후 바로 리턴
1572			} else {
1573				alert(htmlParser.errorMsg);
1574				if (hasOpener) {
1575					window.close();
1576				}
1577			}
1578		}
1579
1580		if (hasOpener) {
1581			if ($(window.opener.document).find('#auth_fail_wrap').length > 0) {
1582				$(window.opener.document).find('#auth_fail_wrap').show();
1583			}
1584		} else {
1585			if ($('#auth_fail_wrap').length > 0) {
1586				$('#auth_fail_wrap').show();
1587			}
1588		}
1589
1590		if (htmlParser.redirectUrl && !htmlParser.isConfirm) {
1591			if (hasOpener) {
1592				window.opener.location.href = htmlParser.redirectUrl;
1593				window.close();
1594			} else {
1595				location.href = htmlParser.redirectUrl;
1596			}
1597		}
1598	};
1599
1600
1601	var processFindIdInDialog = function(data) {
1602		var check_step_1 = $('#find_step_1').css('display');
1603		var check_step_3 = $('#find_step_3').css('display');
1604		var check_id_title = $('._find_id').css('display') === 'block';
1605		var check_pw_title = $('._find_password').css('display') === 'block';
1606
1607        // 인증을 시작한 작업을 그대로 사용한다. 뒤늦은 콜백으로 다른 창의 선택을 바꾸지 않는다.
1608        var selection = data.recovery;
1609        if (!selection || selection.recovery_id !== $('#recovery_id').val()) {
1610            alert('찾기 정보가 변경됐습니다. 처음부터 다시 시도해주세요.');
1611            return;
1612        }
1613        var ajaxData = $.extend({}, selection, {
1614            encrypt_ci: data.encrypt_ci || '',
1615            name: data.name || '',
1616            birthday: data.birthday || ''
1617        });
1618
1619		if (data.dream_security_di) {
1620			ajaxData.dream_security_di = data.dream_security_di;
1621		}
1622
1623		$.ajax({
1624			type: 'POST',
1625			data: {data: ajaxData, step: 1},
1626			url: '/ajax/find_pass.cm',
1627			dataType: 'json',
1628			cache: false,
1629			success: function(res) {
1630				if (res.msg === 'SUCCESS') {
1631					$('._one_member_account_index, ._one_member_login_type, ._one_member_asterisk_email, ._one_member_asterisk_uid').remove();
1632					$('._result_find_data_uid').text(res.result_find_data_uid);
1633					$('#recovery_account').val(res.account_index || '');											// 본인인증에 사용되는 값
1634
1635					if (check_step_1 === 'block') {
1636						$('#find_step_1').hide();
1637						$('#find_step_2').show();
1638						$('#find_step_3').hide();
1639						$('._find_id_detail').hide();
1640
1641						if (!res.is_use_only_id) {
1642							$('._result_find_data_email').text(res.result_find_data_email);
1643						}
1644						$('#recovery_account').val(res.account_index || '');
1645					}
1646
1647					if (res.is_use_only_id) {
1648						$('._find_id_send_email_wrap').hide();
1649					} else {
1650						$('._find_id_send_email_wrap').show();
1651					}
1652
1653					if (check_step_3 === 'block') {
1654						if (check_id_title) {
1655							$('._member_list_radio').hide();
1656							$('._result_find_data_uid').show();
1657
1658							$('#find_step_1').hide();
1659							$('#find_step_2').show();
1660							$('#find_step_3').hide();
1661
1662							$('#find_step2_info_1').hide();
1663							$('#find_step2_info_2').show();
1664						} else if (check_pw_title) {
1665							$('#find_step_1').hide();
1666							$('#find_step_2').hide();
1667							$('#find_step_3').hide();
1668							$('#find_step_4').show();
1669
1670							$('._result_update_password_wrap').show();
1671							$('._result_sending_email_wrap').hide();
1672						}
1673					}
1674				} else {
1675					alert(res.msg);
1676				}
1677			},
1678			error: function() {
1679				alert('처리 중 오류가 발생했습니다.');
1680			}
1681		});
1682	};
1683
1684	var openDRMOKWindow = function(req_info, cpid, rtn_url){ // 성인/본인 인증 팝업창\
1685
1686        var recoverySelection = getRecoverySelection();
1687        if (!recoverySelection) return;
1688    $.ajax({
1689      type: 'POST',
1690      data: {'return_url' : rtn_url, 'account_index': recoverySelection.account_index, 'recovery_id' : recoverySelection.recovery_id},
1691      url: ('/ajax/set_auth_service_session.cm'),
1692      dataType: 'json',
1693      async: true,
1694      cache: false,
1695      success: function(res){
1696        if(res.msg === 'SUCCESS'){
1697          if(IS_APP || IS_MOBILE){
1698            var url = "https://www.mobile-ok.com/popup/hscert.jsp?req_info="+req_info+"&rtn_url="+rtn_url+"&cpid="+cpid+"";
1699            var urlInfo = parseUri(url);
1700            var $form = $("<form />");
1701
1702            $form.attr("method","post");
1703            $form.attr("action", urlInfo.protocol+"://"+urlInfo.authority+urlInfo.path);
1704
1705            for ( var i in urlInfo.queryKey ) {
1706              var $input = $("<input />");
1707              $input.attr("type", "hidden");
1708              $input.attr("name", i);
1709              $input.attr("value", urlInfo.queryKey[i]);
1710              $form.append($input);
1711            }
1712            var $body = $('body');
1713
1714            $body.append($form);
1715            $form.submit();
1716
1717            event.returnValue = false;
1718            event.cancelBubble = true;
1719          }else{
1720	          windowOpen('DRMOKWindow', 'https://www.mobile-ok.com/popup/hscert.jsp?req_info=' + req_info + '&rtn_url=' + rtn_url + '&cpid=' + cpid, 425, 550, 'no', 'post');
1721          }
1722
1723
1724        }
1725      }
1726    });
1727	};
1728
1729	var openMOBILIANSWindow = function(CI_SVCID, Tradeid, Okurl, call_back_data){ // 본인인증, 성인인증 (KG파이낸셜) 팝업창
1730		var Keygb   = '1';
1731		var Cryptyn = 'Y';
1732		var CI_Mode = '61';
1733		var MSTR	= call_back_data;
1734		var Siteurl = 'www.mobilians.co.kr';
1735		var auth_url = 'https://auth.mobilians.co.kr/goCashMain.mcash?CASH_GB=CI&CI_SVCID='+CI_SVCID+'&Siteurl='+Siteurl+'&Tradeid='+Tradeid+'&Okurl='+Okurl+'&Keygb='+Keygb+'&Cryptyn='+Cryptyn+'&CI_Mode='+CI_Mode+'&MSTR='+MSTR;
1736
1737
1738        var recoverySelection = getRecoverySelection();
1739        if (!recoverySelection) return;
1740    $.ajax({
1741      type: 'POST',
1742      data: {'return_url' : Okurl, 'account_index': recoverySelection.account_index, 'recovery_id' : recoverySelection.recovery_id},
1743      url: ('/ajax/set_auth_service_session.cm'),
1744      dataType: 'json',
1745      async: true,
1746      cache: false,
1747      success: function(res){
1748        if(res.msg === 'SUCCESS'){
1749	        // 안드로이드에서 인스타그램 인앱브라우저로 접근 시 본인인증이 끝나고 이전 창으로 돌아가지 못하는 문제가 있어 예외처리
1750	        const isAndroidInstagramBrowser =
1751			        navigator.userAgent.includes('Android') && navigator.userAgent.includes('Instagram');
1752	        if (IS_APP || (IS_MOBILE && !isAndroidInstagramBrowser)) {
1753            var urlInfo = parseUri(auth_url);
1754            var $form = $("<form />");
1755
1756            $form.attr("method","post");
1757            $form.attr("action", urlInfo.protocol+"://"+urlInfo.authority+urlInfo.path);
1758
1759            for ( var i in urlInfo.queryKey ) {
1760              var $input = $("<input />");
1761              $input.attr("type", "hidden");
1762              $input.attr("name", i);
1763              $input.attr("value", urlInfo.queryKey[i]);
1764              $form.append($input);
1765            }
1766            var $body = $('body');
1767
1768            $body.append($form);
1769            $form.submit();
1770
1771            event.returnValue = false;
1772            event.cancelBubble = true
1773          }else{
1774            windowOpen('MOBILIANSWindow',auth_url,450,750,'yes','post', 'euc-kr');
1775          }
1776        }
1777      }
1778    });
1779	};
1780
1781	// 신규 인증창 방식 (서버방식) - KG파이낸셜 휴대폰 본인확인
1782	var openMOBILIANSWindow2 = function(CI_SVCID, Tradeid, Okurl, call_back_data, Notiurl, Cryptstring){
1783		var Keygb   = '1';
1784		var Cryptyn = 'Y';
1785		var CI_Mode = '61';
1786		var MSTR    = call_back_data;
1787		var Siteurl = window.location.hostname;
1788		// KG파이낸셜 Siteurl은 20byte 제한이 있어 초과시 잘라냄
1789		if (Siteurl.length > 20) {
1790			Siteurl = Siteurl.substring(0, 20);
1791		}
1792		var PAY_MODE = '10';
1793
1794		var authParams = {
1795			'CASH_GB': 'CI',
1796			'CI_SVCID': CI_SVCID,
1797			'PAY_MODE': PAY_MODE,
1798			'Okurl': Okurl,
1799			'Notiurl': Notiurl || '',
1800			'Cryptyn': Cryptyn,
1801			'Keygb': Keygb,
1802			'Cryptstring': Cryptstring,
1803			'Siteurl': Siteurl,
1804			'Tradeid': Tradeid,
1805			'CI_Mode': CI_Mode,
1806			'MSTR': MSTR,
1807			'LOGO_YN': 'N',
1808			'CALL_TYPE': 'P',
1809			'Sendtype': 'POST',
1810		};
1811
1812
1813        var recoverySelection = getRecoverySelection();
1814        if (!recoverySelection) return;
1815
1816        var sessionData = {'return_url': Okurl, 'account_index': recoverySelection.account_index, 'recovery_id': recoverySelection.recovery_id};
1817        if (recoverySelection.recovery_id !== '') {
1818            sessionData.auth_type = 'mobilians_v2';
1819            sessionData.trade_id = Tradeid;
1820        }
1821
1822		$.ajax({
1823			type: 'POST',
1824			data: sessionData,
1825			url: ('/ajax/set_auth_service_session.cm'),
1826			dataType: 'json',
1827			async: true,
1828			cache: false,
1829			timeout: 10000,
1830			success: function(res){
1831				if(res.msg === 'SUCCESS'){
1832                    if (recoverySelection.recovery_id !== '') {
1833                        if (typeof res.okurl !== 'string' || !res.okurl || typeof res.cryptstring !== 'string' || !res.cryptstring) {
1834                            alert('인증 정보가 변경됐습니다. 페이지를 새로고침한 뒤 다시 시도해주세요.');
1835                            return;
1836                        }
1837                        authParams.Okurl = res.okurl;
1838                        authParams.Cryptstring = res.cryptstring;
1839                    }
1840					var loadMobiliansScript = function() {
1841						if (typeof window.IMWEB_MOBILIANS_AUTH_PAYMENT === 'function') {
1842							executeMobiliansAuth(window.IMWEB_MOBILIANS_AUTH_PAYMENT);
1843							return;
1844						}
1845
1846						var script = document.createElement('script');
1847						script.src = 'https://auth.mobilians.co.kr/js/ext/v2/ext_inc_comm.js';
1848						script.onload = function() {
1849							if (typeof AUTH_PAYMENT !== 'function') {
1850								alert('KG파이낸셜 인증 모듈 로드에 실패했습니다. 잠시 후 다시 시도해주세요.');
1851								return;
1852							}
1853							window.IMWEB_MOBILIANS_AUTH_PAYMENT = AUTH_PAYMENT;
1854							executeMobiliansAuth(window.IMWEB_MOBILIANS_AUTH_PAYMENT);
1855						};
1856						script.onerror = function() {
1857							alert('KG파이낸셜 인증 모듈 로드에 실패했습니다. 잠시 후 다시 시도해주세요.');
1858						};
1859						document.head.appendChild(script);
1860					};
1861
1862					var executeMobiliansAuth = function(authPayment) {
1863						// 기존 form 제거 (재시도 대응)
1864						var existingForm = document.getElementById('mobiliansAuthForm');
1865						if (existingForm) {
1866							existingForm.parentNode.removeChild(existingForm);
1867						}
1868
1869						var form = document.createElement('form');
1870						form.name = 'mobiliansAuthForm';
1871						form.id = 'mobiliansAuthForm';
1872						form.method = 'post';
1873						form.action = 'https://auth.mobilians.co.kr/goAuthMain.mcash';
1874						form.acceptCharset = 'euc-kr';
1875
1876						for (var key in authParams) {
1877							if (authParams.hasOwnProperty(key)) {
1878								var input = document.createElement('input');
1879								input.type = 'hidden';
1880								input.name = key;
1881								input.value = authParams[key];
1882								form.appendChild(input);
1883							}
1884						}
1885
1886						document.body.appendChild(form);
1887
1888						// DOM에 추가된 후 딜레이를 두고 AUTH_PAYMENT 호출
1889						setTimeout(function() {
1890							try {
1891								authPayment(form);
1892							} catch(e) {
1893								console.error('AUTH_PAYMENT 호출 실패:', e);
1894								alert('인증 요청에 실패했습니다. 잠시 후 다시 시도해주세요.');
1895							}
1896						}, 500);
1897					};
1898
1899					loadMobiliansScript();
1900				} else {
1901					alert('인증 세션 설정에 실패했습니다. 잠시 후 다시 시도해주세요.');
1902				}
1903			},
1904			error: function(xhr, status, error) {
1905				console.error('AJAX Error:', {status: status, error: error, xhr: xhr});
1906				alert('네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.');
1907			},
1908			complete: function() {
1909				console.log('AJAX 요청 완료 (openMOBILIANSWindow2)');
1910			}
1911		});
1912	};
1913
1914
1915	var openINICISWindow = function(mid, Tradeid, Okurl, call_back_data){ // 본인인증, 성인인증 (이니시스) 팝업창
1916		var MSTR	= call_back_data;
1917		var Siteurl = 'www.inicis.com';
1918		var auth_url ='https://cas.inicis.com/casapp/ui/cardauthreq?mid=' + mid + '&Siteurl=' + Siteurl + '&Tradeid=' + Tradeid + '&Closeurl=' + Okurl + '&Okurl=' + Okurl + '&MSTR=' + MSTR + '&encryptYN=Y';
1919
1920
1921        var recoverySelection = getRecoverySelection();
1922        if (!recoverySelection) return;
1923		$.ajax({
1924			type: 'POST',
1925			data: {'return_url' : Okurl, 'account_index': recoverySelection.account_index, 'recovery_id' : recoverySelection.recovery_id},
1926			url: ('/ajax/set_auth_service_session.cm'),
1927			dataType: 'json',
1928			async: true,
1929			cache: false,
1930			success: function(res){
1931				if(res.msg === 'SUCCESS'){
1932					if(IS_APP || IS_MOBILE){
1933						var urlInfo = parseUri(auth_url);
1934						var $form = $("<form />");
1935
1936						$form.attr("method","post");
1937						$form.attr("action", urlInfo.protocol+"://"+urlInfo.authority+urlInfo.path);
1938
1939						for ( var i in urlInfo.queryKey ) {
1940							var $input = $("<input />");
1941							$input.attr("type", "hidden");
1942							$input.attr("name", i);
1943							$input.attr("value", urlInfo.queryKey[i]);
1944							$form.append($input);
1945						}
1946						var $body = $('body');
1947
1948						$body.append($form);
1949						$form.submit();
1950
1951						event.returnValue = false;
1952						event.cancelBubble = true;
1953					}else{
1954						windowOpen('INICISWindow', auth_url, 450, 750, 'yes', 'post');
1955					}
1956				}
1957			}
1958		});
1959	};
1960
1961	var openCOMBINATIONAUTHTYPESWindow = function(mid, mTxId, return_url, auth_hash){ // 본인인증, 성인인증 (통합 본인인증) 팝업창
1962
1963		// reqSvcCd : 요청 구분 코드 (01:간편인증, 02:전자서명)
1964
1965		var auth_url ='https://sa.inicis.com/auth?mid=' + mid + '&reqSvcCd=01' + '&mTxId=' + mTxId + '&successUrl=' + return_url + '&failUrl=' + return_url + '&flgFixedUser=N' + '&authHash=' + auth_hash + '&reservedMsg=isUseToken=Y';
1966
1967
1968        var recoverySelection = getRecoverySelection();
1969        if (!recoverySelection) return;
1970		$.ajax({
1971			type: 'POST',
1972			data: {'return_url' : return_url, 'account_index': recoverySelection.account_index, 'recovery_id' : recoverySelection.recovery_id},
1973			url: ('/ajax/set_auth_service_session.cm'),
1974			dataType: 'json',
1975			async: true,
1976			cache: false,
1977			success: function(res){
1978				if(res.msg === 'SUCCESS'){
1979					if(IS_APP || IS_MOBILE){
1980						var urlInfo = parseUri(auth_url);
1981						var $form = $("<form />");
1982
1983						$form.attr("method","post");
1984						$form.attr("action", urlInfo.protocol+"://"+urlInfo.authority+urlInfo.path);
1985
1986						for ( var i in urlInfo.queryKey ) {
1987							var $input = $("<input />");
1988							$input.attr("type", "hidden");
1989							$input.attr("name", i);
1990							$input.attr("value", urlInfo.queryKey[i]);
1991							$form.append($input);
1992						}
1993						var $body = $('body');
1994
1995						$body.append($form);
1996						$form.submit();
1997
1998						event.returnValue = false;
1999						event.cancelBubble = true
2000					}else{
2001						windowOpen('COMBINATIONAUTHTYPESWindow', auth_url, 600, 620, 'yes', 'post');
2002					}
2003				}
2004			}
2005		});
2006	};
2007
2008	var openAgreeSocialJoin = function(back_url, type_code, type){
2009		$.cocoaDialog.close();
2010		$.ajax({
2011			type: 'POST',
2012			data: {'is_social': 'Y', 'back_url': back_url, 'type_code' : type_code, 'type' : type},
2013			url: ('/dialog/join_policy.cm'),
2014			dataType: 'json',
2015			async: true,
2016			cache: false,
2017			success: function(res){
2018				var $html = $(res.html);
2019				var $policy_check_all = $html.find('._check_all');
2020				var $agree_list =  $html.find('._join_agree');
2021				var $join_btn = $html.find('._join_btn');
2022
2023				$policy_check_all.off('click').on('click', function(){
2024					$agree_list.prop('checked',$(this).prop('checked'));
2025				});
2026
2027				$agree_list.off('click').on('click', function(){
2028					if($(this).prop('checked') === false && $policy_check_all.prop('checked')) $policy_check_all.prop('checked', false);
2029
2030
2031					var is_all_checked = true;
2032					$agree_list.each(function(idx){
2033						if($agree_list.eq(idx).prop('checked') === false) is_all_checked = false;
2034					});
2035					if(is_all_checked) $policy_check_all.prop('checked', true);
2036				});
2037
2038				$join_btn.off('click').on('click', function(){
2039					var missing_agree_cnt = $html.find(".require_agreement:checkbox:not(:checked)").length;
2040					var third_party_agree = $html.find("#third_party_agree").length;
2041					// 필수항목 동의 누락이 있을 경우
2042					if(missing_agree_cnt > 0 ){
2043						if(third_party_agree > 0){
2044							// 개인정보 제3자 제공 동의 필수인 경우
2045							alert(getLocalizeString('설명_이용약관및개인정보처리방침및개인정보제3자동의', '', '이용약관 및 개인정보 처리방침 및 개인정보 제3자 제공에 동의하셔야 가입이 가능합니다.'));
2046						}else{
2047							alert(getLocalizeString('설명_동의해주세요', '', '이용약관 및 개인정보 처리방침에 동의하셔야 가입이 가능합니다.'));
2048						}
2049					} else {
2050						openSocialJoin(back_url, type_code);
2051					}
2052					//event.stopPropagation();
2053					return false;
2054				});
2055
2056				$.cocoaDialog.open({type: 'site_join_policy', custom_popup: $html, close_block : true});
2057			}
2058		});
2059	};
2060
2061	var openSocialJoin = function(back_url, type_code,social_type){		// 소셜 가입 시 추가정보 다이얼로그를 띄움
2062		$.cocoaDialog.close();
2063		var third_party_agree = $('#third_party_agree').is(':checked') ? 'Y' : 'N';
2064		var marketing_sms_agree = $('#marketing_sms_agree').is(':checked') ? 'Y' : 'N';
2065		var marketing_email_agree = $('#marketing_email_agree').is(':checked') ? 'Y' : 'N';
2066		var limit_join_agree = $('#limit_join_agree').is(':checked') ? 'Y' : 'N';
2067		var inactive_year = 0;//$('#inactive_year:checked').val();
2068		$.ajax({
2069			type: 'POST',
2070			data: {'is_social': 'Y', 'back_url' : back_url, 'third_party_agree' : third_party_agree,'marketing_sms_agree': marketing_sms_agree, 'marketing_email_agree' : marketing_email_agree, 'type_code' : type_code, 'social_type' : social_type, 'limit_join_agree' : limit_join_agree,'inactive_year':inactive_year},
2071			url: ('/dialog/join.cm'),
2072			dataType: 'html',
2073			async: true,
2074			cache: false,
2075			success : function(html){
2076				var $html = $(html);
2077				var $join_btn = $html.find('._join_btn');
2078
2079				$join_btn.off('click').on('click', function(e){
2080					$join_btn
2081					joinSubmit(true);
2082					e.preventDefault();
2083					return false;
2084				});
2085
2086				$.cocoaDialog.open({type : 'site_join', custom_popup : $html, hide_event : function(e){
2087						if(confirm(getLocalizeString('설명_가입중단경고', '', '추가정보 중 필수항목을 모두 입력해 주셔야 가입이 완료됩니다. 가입을 중단할까요?'))){
2088							clearOAuthData();
2089						}else{
2090							e.preventDefault();		// 다이얼로그 닫기 중단
2091							return false;
2092						}
2093					}});
2094			}
2095		});
2096	};
2097
2098	var clearOAuthData = function(){		// 소셜 가입 취소 시 세션에서 OAuthData 삭제
2099		$.ajax({
2100			type: 'POST',
2101			url: ('/oauth/clear.cm'),
2102			async: true,
2103			cache: false,
2104			success: function(res){
2105				location.href = '/';
2106			}
2107		});
2108	};
2109
2110	var disconnectOAuth = function(type,back_url){
2111		var $join_form = $('#join_form');
2112		$.ajax({
2113			type:'POST',
2114			data:{'type' : type},
2115			url:('/ajax/disconnect_oauth.cm'),
2116			dataType:'json',
2117			async:false,
2118			cache:false,
2119			success:function(res){
2120				if(res.msg =='SUCCESS'){
2121					$join_form.find('._'+type+'_disconnect').hide();
2122					$join_form.find('._'+type+'_connect').show();
2123				}else{
2124					alert(res.msg);
2125				}
2126			}
2127		});
2128	};
2129
2130	var openGoodbye = function(){
2131		$.ajax({
2132			type: 'POST',
2133			data: {d: 'd'},
2134			url: ('/dialog/goodbye.cm'),
2135			dataType: 'html',
2136			async: true,
2137			cache: false,
2138			success: function(html){
2139				var $html = $(html);
2140				$.cocoaDialog.open({type: 'site_goodbye', custom_popup: $html});
2141			}
2142		});
2143	};
2144
2145	var goodbye = function(rand){
2146		$.ajax({
2147			type: 'POST',
2148			data: {'rand': rand},
2149			url: ('/ajax/goodbye.cm'),
2150			dataType: 'json',
2151			async: true,
2152			cache: false,
2153			success: function(res){
2154				if(res.msg == 'SUCCESS'){
2155					if ( typeof ACE_COUNTER_PARTNER != 'undefined' ){
2156						if(res.ace_counter_partner_kind == 'mweb'){
2157							m_jn = 'withdraw';
2158							try{
2159								AM_PL('withdraw_complete.php');
2160							}catch(e){
2161							}
2162						}else{
2163							_jn = 'withdraw';
2164							try{
2165								_PL(window.location.hostname+'/withdraw_complete.php');
2166							}catch(e){
2167							}
2168						}
2169					}
2170
2171					if(typeof parent.Nachocode !== 'undefined' && res.uid != '' && res.nachocode_api_key != '' && res.nachocode_api_key != 'temp-api-key') {
2172						(async function() {
2173							await parent.Nachocode.initAsync(res.nachocode_api_key);
2174							parent.Nachocode.user.withdrawUser()
2175							.then(function() {
2176								window.location.href='/logout.cm';
2177							}, function() {
2178								window.location.href='/logout.cm';
2179							});
2180						})();
2181					}else {
2182						window.location.href='/logout.cm';
2183					}
2184				}else {
2185					alert(res.msg);
2186				}
2187			}
2188		});
2189	};
2190	var openInactive = function(back_url,is_social){
2191		$.cocoaDialog.close();
2192		$.ajax({
2193			type: 'POST',
2194			data: {},
2195			url: ('/dialog/member_login_inactive.cm'),
2196			dataType: 'json',
2197			async: true,
2198			cache: false,
2199			success: function(res){
2200				if(res.msg == 'SUCCESS'){
2201					var $html = $(res.html);
2202					$ianctive_login_form = $html.find("._inactive_btn");
2203					$ianctive_login_form.click(function(){
2204						$.ajax({
2205							type : 'POST',
2206							data : {
2207								'back_url' : back_url,
2208								'is_social' : is_social
2209							},
2210							url : ('/ajax/member_inactive.cm'),
2211							dataType : 'json',
2212							async : true,
2213							cache : false,
2214							success : function(res){
2215								if(res.msg == 'SUCCESS'){
2216									alert(getLocalizeString('설명_휴면상태완료', '', '휴면해제 완료 되었습니다.'));
2217									if(back_url != 'Y'){
2218										if (is_social === 'Y') {
2219											if (res.site_back_url != '') {
2220												window.parent.location.href = res.site_back_url;
2221											} else {
2222												location.reload();
2223											}
2224										}else{
2225											$html.append(res.form);
2226											var $admin_form = $html.find('#inactive_login_form');
2227											$admin_form.submit();
2228										}
2229									}else{
2230										if(res.site_back_url != '') {
2231											window.parent.location.href = res.site_back_url;
2232										}else{
2233											location.reload();
2234										}
2235									}
2236								}else{
2237									alert(res.msg);
2238								}
2239							}
2240						});
2241					});
2242					$.cocoaDialog.open({
2243						type : 'inactive_login', custom_popup : $html, hide_event : function(e){
2244							if(confirm(getLocalizeString('설명_휴면상태로그아웃', '', '휴면 상태를 유지하고 로그아웃 합니다.'))){
2245								SITE_TWO_FACTOR_LOGIN.clearTwoFactorLoginData();
2246							}else{
2247								e.preventDefault();	// 다이얼로그 닫기 중단
2248								return false;
2249							}
2250						}
2251					});
2252				}else{
2253					alert(res.msg);
2254					SITE_TWO_FACTOR_LOGIN.clearTwoFactorLoginData();
2255				}
2256			}
2257		});
2258	}
2259	var initJoinForm = function(country){
2260		$join_form = $('#join_form');
2261		if ( typeof country != "undefined" ) {
2262			$join_form.find('select[name="addr_country"]').val(country);
2263			changeCountry(country);
2264		}
2265	};
2266
2267	var changeCountry = function(compare_country){
2268		if ( $join_form.find('select[name="addr_country"]').length == 0) return false;
2269
2270		// 회원정보 수정일 때 선택한 국가에 맞게 안 나오는 에러 임시 처리용
2271		if ( compare_country.trim() === '' ) {
2272			compare_country = $join_form.find('select[name="addr_country"]').val();
2273			if ( compare_country === "") {
2274				changeAddressForm('');
2275				return false;
2276			}
2277		}
2278
2279		$.ajax({
2280			"url": "/ajax/get_site_address_format.cm",
2281			"data": {"country_code": compare_country },
2282			"type": "POST",
2283			"dataType": "json",
2284			"success": function(res){
2285				changeAddressForm(res["format"]);
2286			}
2287		});
2288	};
2289
2290	var changeAddressForm = function(format){
2291		var $kr_addr_form_wrap = $join_form.find('#kr_addr_form_wrap');
2292		var $jp_addr_form_wrap = $join_form.find('#jp_addr_form_wrap');
2293		var $en_addr_form_wrap = $join_form.find('#en_addr_form_wrap');
2294		var $tw_addr_form_wrap = $join_form.find('#tw_addr_form_wrap');
2295		var $vn_addr_form_wrap = $join_form.find('#vn_addr_form_wrap');
2296		var $hk_addr_form_wrap = $join_form.find('#hk_addr_form_wrap');
2297
2298		if ( address_format !== format || true ) {
2299			address_format = format;
2300			$join_form.find('._addr_form_wrap').hide();
2301
2302			switch(address_format) {
2303				case "KR":
2304					$kr_addr_form_wrap.show();
2305					break;
2306				case "TW":
2307					$tw_addr_form_wrap.show();
2308					break;
2309				case "3":
2310					$jp_addr_form_wrap.show();
2311					break;
2312				case 'VN':
2313					$vn_addr_form_wrap.show();
2314					break;
2315				case 'HK':
2316					$hk_addr_form_wrap.show();
2317					break;
2318				case "5":
2319					$en_addr_form_wrap.show();
2320					break;
2321			}
2322		}
2323	};
2324
2325	var itemFileUpload = function($obj, code){
2326
2327		$obj.fileupload({
2328			url : '/ajax/member_join_file_upload.cm',
2329			dataType : 'json',
2330			limitMultiFileUploads : 1,
2331			dropZone : null,
2332			maxFileSize : 20000000, //20mb
2333			limitMultiFileUploadSize : 100000000, //110 mb
2334			formData : {'code' : code},
2335			add : function(e, data){
2336				if(data.files[0].size > 50000000){
2337					alert(LOCALIZE.설명_최대업로드용량안내());
2338					return false;
2339				}else{
2340					data.submit();
2341				}
2342			},
2343			start : function(e, data){
2344				dozProgress.start();
2345			},
2346			progress : function(e, data){
2347			},
2348			done : function(e, data){
2349				dozProgress.done();
2350				var form_file = '';
2351				form_file = 'form_file_' + code;
2352				if(data.result[form_file][0].error){
2353					alert(data.result[form_file][0].error);
2354				}else{
2355					if(data.result[form_file][0].tmp_idx > 0){
2356						$obj.find('._form_file_list').show();
2357						$obj.find('._holder').hide();
2358						$obj.find('._filename').text(data.result[form_file][0].org_name);
2359						$obj.find('._filesize').text('(' + GetFileSize(data.result[form_file][0].size) + ')');
2360						$obj.find('._temp_file').val(data.result[form_file][0].tmp_idx);
2361						$obj.find('._upload_file').val('');
2362						$obj.find('._download_link').removeAttr("href");
2363						if(data.result[form_file][0].type.substring(0 ,5) === "image"){
2364							$obj.find('._image').show();
2365							$obj.find('._image_src').attr('src', CDN_UPLOAD_URL+data.result[form_file][0].url);
2366						}
2367					}
2368				}
2369			},
2370			fail : function(e, data){
2371			}
2372		})
2373			.find('._fileremove').click(function(){
2374			$obj.find('._form_file_list').hide();
2375			$obj.find('._holder').show();
2376			$obj.find('._temp_file').val('');
2377			$obj.find('._upload_file').val('');
2378			$obj.find('._image').hide();
2379		});
2380	};
2381
2382
2383	var init = function(){
2384		$member_profile = $('#'+member_profile_id);
2385	};
2386
2387	var sendJoinMailAuth = function(){
2388		$.ajax({
2389			type: 'POST',
2390			data: '',
2391			url: ('/ajax/send_join_mail_auth.cm'),
2392			dataType: 'json',
2393			async: true,
2394			cache: false,
2395			success: function(res){
2396				if(res.msg === 'SUCCESS'){
2397					alert(getLocalizeString('설명_인증메일발송완료', '', '인증메일을 발송하였습니다.'));
2398				}else{
2399					alert(res.msg);
2400				}
2401			}
2402		});
2403	};
2404
2405	var getSiteMemberCustomData = function(data, callback) {
2406		$.ajax({
2407			type: 'POST',
2408			url: ('/ajax/get_custom_data.cm'),
2409			data: {data: data},
2410			dataType: 'json',
2411			async: true,
2412			cache: false,
2413			success: callback || function (res) {
2414				console.log(res);
2415			}
2416		});
2417	};
2418
2419
2420	var current_find_tab = 'findId';
2421	var step = function(){
2422		$('.btn_find').off('click').on('click', function(){
2423			var tab_id = $(this).attr('data-tab');
2424			current_find_tab = tab_id;
2425			$('.btn_find').removeClass('active');
2426			$('._find_tit').addClass('hidden');
2427			$('._step').addClass('hidden');
2428
2429			$(this).addClass('active');
2430			$('.'+tab_id).removeClass('hidden');
2431			$('#'+tab_id).removeClass('hidden');
2432
2433			if(tab_id == 'findId'){
2434				$('._find_id').removeClass('hidden');
2435				$('._find_password').addClass('hidden');
2436			}else if(tab_id == 'findPassword'){
2437				$('._find_password').removeClass('hidden');
2438				$('._find_id').addClass('hidden');
2439			}
2440		});
2441	};
2442
2443	var updateFindIdStatus = function (){
2444		$('._update_status').off('click').on('click', function(){
2445			var tab_name = $(this).attr('data-tab');
2446
2447			if(tab_name == 'find_id'){
2448				$('._find_id').removeClass('hidden');
2449				$('._find_password').addClass('hidden');
2450			}else if(tab_name == 'find_password'){
2451				$('._find_password').removeClass('hidden');
2452				$('._find_id').addClass('hidden');
2453			}
2454		});
2455	};
2456
2457	var initFindId = function(obj){ // 비밀번호 찾기 필요값 초기화
2458
2459		// step 1
2460		$('input:radio[name=findIdStep01]').change(function(){
2461			// 가입한 이메일로 찾기 비활성화
2462			$('._step01_find_id_email_input_wrap').hide();
2463			$('._find_id_input_email').val('');
2464
2465			// 가입한 휴대폰으로 찾기 비활성화
2466			$('._step01_find_id_name_and_phone_input_wrap').hide();
2467			$('._find_id_input_nick').val('');
2468			$('._find_id_input_call_num').val('');
2469
2470			var find_id_step_01_btn_wrap = $('._find_id_step_01_btn_wrap'); // 버튼 링크 설정
2471			var checked_radio_val = $('input:radio[name=findIdStep01]:checked').val();
2472			find_id_step_01_btn_wrap.children().remove();
2473			switch(checked_radio_val){
2474				case 'find_id_email':
2475					$('._step01_find_id_email_input_wrap').show(); // 가입한 이메일로 찾기 영역 활성화
2476					$('._find_id_input_nick').val('');			   // 가입한 이메일로 찾기 입력폼의 데이터만 입력되게 나머지 값 초기화
2477					$('._find_id_input_call_num').val('');		   // 가입한 이메일로 찾기 입력폼의 데이터만 입력되게 나머지 값 초기화
2478
2479					find_id_step_01_btn_wrap.append("<button class='btn btn-primary _update_status' data-tab='find_id' onclick=SITE_MEMBER.findSubmit('find');>"+LOCALIZE.버튼_아이디찾기()+"</button>");
2480					break;
2481				case 'find_id_name_and_phone':
2482					$('._step01_find_id_name_and_phone_input_wrap').show(); // 가입한 휴대폰 찾기 영역 활성화
2483					$('._find_id_input_email').val('');						// 가입한 휴대폰 찾기 영역 입력폼의 데이터만 입력되게 나머지 값 초기화
2484
2485					find_id_step_01_btn_wrap.append("<button class='btn btn-primary _update_status' data-tab='find_id' onclick=SITE_MEMBER.findSubmit('find');>"+LOCALIZE.버튼_아이디찾기()+"</button>");
2486					break;
2487				case 'find_id_dream_security':
2488					if(obj.use_dream_security_v2){
2489						// v2
2490						find_id_step_01_btn_wrap.append("<button class='btn btn-primary' onclick='SITE_MEMBER.openDreamSecurityV2ForFindId();'>"+LOCALIZE.버튼_아이디찾기()+"</button>");
2491					}else{
2492						find_id_step_01_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.dream_security+">"+LOCALIZE.버튼_아이디찾기()+"</button>");
2493					}
2494					break;
2495				case 'find_id_mobilians':
2496					find_id_step_01_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.mobilians+">"+LOCALIZE.버튼_아이디찾기()+"</button>");
2497					break;
2498				case 'find_id_inicis':
2499					find_id_step_01_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.inicis+">"+LOCALIZE.버튼_아이디찾기()+"</button>");
2500					break;
2501				case 'find_id_combination':
2502					find_id_step_01_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.combination+">"+LOCALIZE.버튼_아이디찾기()+"</button>");
2503					break;
2504			}
2505		});
2506
2507		// step3
2508		$('input:radio[name=findIdStep03]').change(function(){
2509			var find_id_step_03_btn_wrap = $('._find_id_step_03_btn_wrap'); // 버튼 링크 설정
2510			var checked_radio_val = $(':input:radio[name=findIdStep03]:checked').val();
2511
2512			find_id_step_03_btn_wrap.children().remove();
2513			$('._step04_select_input.step04_select_input_id.mb0').hide();
2514			switch(checked_radio_val){
2515				case 'find_id_send_email':
2516					find_id_step_03_btn_wrap.append("<button class='btn btn-primary' onclick=SITE_MEMBER.findSubmit('send');>"+LOCALIZE.버튼_계속()+"</button>");
2517					$('._step04_select_input.step04_select_input_id.mb0').show();
2518					break;
2519				case 'find_id_dream_security':
2520					if(obj.use_dream_security_v2){
2521						// v2
2522						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' onclick='SITE_MEMBER.openDreamSecurityV2ForFindId();'>"+LOCALIZE.버튼_계속()+"</button>");
2523					}else{
2524						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.dream_security+">"+LOCALIZE.버튼_계속()+"</button>");
2525					}
2526					break;
2527				case 'find_id_mobilians':
2528					find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.mobilians+">"+LOCALIZE.버튼_계속()+"</button>");
2529					break;
2530				case 'find_id_inicis':
2531					find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.inicis+">"+LOCALIZE.버튼_계속()+"</button>");
2532					break;
2533				case 'find_id_combination':
2534					find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.combination+">"+LOCALIZE.버튼_계속()+"</button>");
2535					break;
2536			}
2537		});
2538
2539		$('._find_id_reset_password').off('click').on('click', function(){ // 비밀번호 재설정
2540			current_find_tab = 'findPassword';
2541
2542			$('#find_step_1').hide();
2543			$('#find_step_2').hide();
2544			$('#find_step_3').show();
2545			if($('._member_list_radio').css('display') == 'block'){ // 가입한 이메일로 찾기, 가입한 휴대폰으로 찾기 다수 결과 나올 경우 해당 영역 활성화 됨
2546				var check_member_list_radio 	  = $('input:radio[name="findIdMemberList"]:checked'); // 클라이언트가 라디오 버튼 선택한값
2547				var check_member_list_is_email	  = check_member_list_radio.prev().val(); 			   // 이메일 정보 있는지
2548				var asterisk_email = check_member_list_radio.prev().prev().val();
2549				var check_member_list_asterisk_id = check_member_list_radio.next().text();
2550
2551				if(check_member_list_radio.val() != undefined){
2552					$('#recovery_account').val(check_member_list_radio.val());
2553
2554					$('._result_find_data_uid').text(check_member_list_asterisk_id);
2555					$('._result_find_data_email').text(asterisk_email);
2556
2557					if(check_member_list_is_email == 'Y'){
2558						$('._find_id_send_email_wrap').show();
2559
2560						$('input:radio[name="findIdStep03"]')[0].click();
2561					}else if($('input:radio[name="findIdStep03"]')[1] == undefined){
2562						$('#find_step_1').hide();
2563						$('#find_step_2').show();
2564						$('#find_step_3').hide();
2565
2566						$('#find_step2_info_1').hide();
2567						$('#find_step2_info_2').show();
2568
2569						$('._result_find_data_uid').show();
2570						$('._member_list_radio').hide();
2571					}
2572				}
2573			}else if($('._one_member_login_type').length > 0){ // 조회 결과 한개만 존재하는 경우
2574                $('#recovery_account').val($('._one_member_account_index').val());
2575				if($('._one_member_login_type').val() === 'N'){ // 이메일 정보 없음
2576					$('._find_id_send_email_wrap').hide();
2577					if($('input:radio[name="findIdStep03"]')[1] != undefined){
2578						$('input:radio[name="findIdStep03"]')[1].click();
2579					}else{
2580						$('#find_step_1').hide();
2581						$('#find_step_2').show();
2582						$('#find_step_3').hide();
2583
2584						$('#find_step2_info_1').hide();
2585						$('#find_step2_info_2').show();
2586					}
2587				}else{
2588					$('#recovery_account').val($('._one_member_account_index').val());
2589
2590					$('._result_find_data_uid').text($('._one_member_asterisk_uid').text());
2591					$('._result_find_data_email').text($('._one_member_asterisk_email').val());
2592				}
2593			}else{
2594				if($('#recovery_account').val() != ''){ // 본인인증으로 넘어왔을 경우에는 바로 비밀번호 설정창으로 이동
2595					$('#find_step_1').hide();
2596					$('#find_step_2').hide();
2597					$('#find_step_3').hide();
2598					$('#find_step_4').show();
2599
2600					$('._result_sending_email_wrap').hide();
2601					$('._result_update_password_wrap').show();
2602				}
2603			}
2604
2605			if($('input:radio[name="findIdStep03"]')[1] != undefined && $('input:radio[name="findIdStep03"]')[1].checked){
2606				var find_id_step_03_btn_wrap = $('._find_id_step_03_btn_wrap'); // 버튼 링크 설정
2607				var checked_radio_val = $(':input:radio[name=findIdStep03]:checked').val();
2608
2609				find_id_step_03_btn_wrap.children().remove();
2610				switch(checked_radio_val){
2611					case 'find_id_send_email':
2612						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' onclick=SITE_MEMBER.findSubmit('send');>"+LOCALIZE.버튼_계속()+"</button>");
2613						break;
2614					case 'find_id_dream_security':
2615						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.dream_security+">"+LOCALIZE.버튼_계속()+"</button>");
2616						break;
2617					case 'find_id_mobilians':
2618						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.mobilians+">"+LOCALIZE.버튼_계속()+"</button>");
2619						break;
2620					case 'find_id_inicis':
2621						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.inicis+">"+LOCALIZE.버튼_계속()+"</button>");
2622						break;
2623					case 'find_id_combination':
2624						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.combination+">"+LOCALIZE.버튼_계속()+"</button>");
2625						break;
2626				}
2627			}
2628
2629			$('._find_password').addClass('active');
2630			$('._find_password').removeClass('hidden');
2631
2632			$('._find_id').addClass('hidden');
2633			$('._find_id').removeClass('active');
2634
2635		});
2636
2637		$('._find_id_detail').off('click').on('click', function(){ // 정확한 아이디가 기억나지 않아요! 영역
2638			current_find_tab = 'findId';
2639
2640			$('#find_step_1').hide();
2641			$('#find_step_2').hide();
2642			$('#find_step_3').show();
2643			if($('._member_list_radio').css('display') == 'block'){ // 가입한 이메일로 찾기, 가입한 휴대폰으로 찾기 다수 결과 나올 경우 해당 영역 활성화 됨
2644				var check_member_list_radio = $('input:radio[name="findIdMemberList"]:checked'); // 가입한 휴대폰으로 찾기로 생성된 라디오 버튼
2645				var check_member_list_is_email = check_member_list_radio.prev().val(); 			   // 이메일 정보 있는지
2646				var asterisk_email = check_member_list_radio.prev().prev().val();
2647				var check_member_list_asterisk_id = check_member_list_radio.next().text();
2648
2649				if(check_member_list_radio.val() != undefined){
2650					$('#recovery_account').val(check_member_list_radio.val());
2651
2652					$('._result_find_data_uid').text(check_member_list_asterisk_id);
2653					$('._result_find_data_email').text(asterisk_email);
2654
2655					if(check_member_list_is_email == 'Y'){
2656						$('._find_id_send_email_wrap').show();
2657
2658						$('input:radio[name="findIdStep03"]')[0].click();
2659
2660					}else if($('input:radio[name="findIdStep03"]')[1] == undefined){
2661						$('#find_step_1').hide();
2662						$('#find_step_2').show();
2663						$('#find_step_3').hide();
2664
2665						$('#find_step2_info_1').hide();
2666						$('#find_step2_info_2').show();
2667
2668						$('._result_find_data_uid').show();
2669						$('._member_list_radio').hide();
2670					}
2671				}
2672			}else if($('._one_member_login_type').length > 0){ // 조회 결과 한개만 존재하는 경우
2673                $('#recovery_account').val($('._one_member_account_index').val());
2674				if($('._one_member_login_type').val() === 'N'){ // 이메일 정보 없음
2675					$('._find_id_send_email_wrap').hide();
2676					if($('input:radio[name="findIdStep03"]')[1] != undefined){
2677						$('input:radio[name="findIdStep03"]')[1].click();
2678		
2678			}else{
2679						$('#find_step_1').hide();
2680						$('#find_step_2').show();
2681						$('#find_step_3').hide();
2682
2683						$('#find_step2_info_1').hide();
2684						$('#find_step2_info_2').show();
2685					}
2686				}else{
2687					$('#recovery_account').val($('._one_member_account_index').val());
2688
2689					$('._result_find_data_uid').text($('._one_member_asterisk_uid').text());
2690					$('._result_find_data_email').text($('._one_member_asterisk_email').val());
2691				}
2692			}else{
2693				if($('#recovery_account').val() != ''){ // 본인인증으로 넘어왔을 경우에는 바로 비밀번호 설정창으로 이동
2694					$('#find_step_1').hide();
2695					$('#find_step_2').hide();
2696					$('#find_step_3').hide();
2697					$('#find_step_4').show();
2698
2699					$('._result_sending_email_wrap').hide();
2700					$('._result_update_password_wrap').show();
2701				}
2702			}
2703
2704			if($('input:radio[name="findIdStep03"]')[1] != undefined && $('input:radio[name="findIdStep03"]')[1].checked){
2705				var find_id_step_03_btn_wrap = $('._find_id_step_03_btn_wrap'); // 버튼 링크 설정
2706				var checked_radio_val = $(':input:radio[name=findIdStep03]:checked').val();
2707
2708				find_id_step_03_btn_wrap.children().remove();
2709				switch(checked_radio_val){
2710					case 'find_id_send_email':
2711						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' onclick=SITE_MEMBER.findSubmit('send');>"+LOCALIZE.버튼_계속()+"</button>");
2712						break;
2713					case 'find_id_dream_security':
2714						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.dream_security+">"+LOCALIZE.버튼_계속()+"</button>");
2715						break;
2716					case 'find_id_mobilians':
2717						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.mobilians+">"+LOCALIZE.버튼_계속()+"</button>");
2718						break;
2719					case 'find_id_inicis':
2720						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.inicis+">"+LOCALIZE.버튼_계속()+"</button>");
2721						break;
2722					case 'find_id_combination':
2723						find_id_step_03_btn_wrap.append("<button class='btn btn-primary' "+obj.auth_anchor_list.combination+">"+LOCALIZE.버튼_계속()+"</button>");
2724						break;
2725				}
2726			}
2727
2728			$('._find_id').addClass('active');
2729			$('._find_id').removeClass('hidden');
2730
2731			$('._find_password').addClass('hidden');
2732			$('._find_password').removeClass('active');
2733
2734		});
2735
2736		// 모바일로 본인인증 했을 경우
2737		if(obj.use_mobile_auth == 'Y'){
2738			$('._result_find_data_uid').text(obj.result_email);			// 아이디 결과값 입력
2739
2740			$('#find_step_1').hide();
2741			$('#find_step_2').show();
2742			$('#find_step_3').hide();
2743
2744			$('._find_id_detail').hide();
2745		}
2746	};
2747
2748	var createRecommendCode = function(callback){
2749		var is_create_recommend_code = false;
2750		if(!is_create_recommend_code){
2751			$.ajax({
2752				type : 'POST',
2753				url : ('/ajax/create_recommend_code.cm'),
2754				dataType : 'json',
2755				async : true,
2756				cache : false,
2757				success : function(res){
2758					is_create_recommend_code = true;
2759					if(res.msg === 'SUCCESS'){
2760						callback(res.recommend_code);
2761					}else{
2762						alert(res.msg)
2763					}
2764				}
2765			});
2766		}
2767
2768	};
2769
2770	var setSyncJoinInterLock = function(){
2771		var $interlock_form = $("#interlock_form");
2772		var progress = false;
2773		$interlock_form.find("._sync_btn").click(function(){
2774
2775			if(!progress){
2776				progress = true;
2777				var data = $interlock_form.serializeObject();
2778				$.ajax({
2779					type : 'POST',
2780					data : data,
2781					url : ('/ajax/sync_join_interlock.cm'),
2782					dataType : 'json',
2783					async : true,
2784					cache : false,
2785					success : function(res){
2786						progress = false;
2787						if(res.msg === 'SUCCESS'){
2788							location.reload();
2789						}else{
2790							alert(res.msg)
2791						}
2792					}
2793				});
2794			}
2795
2796		});
2797
2798
2799	};
2800
2801	var kakaoSyncJoin = function(join_type_code,back_url){
2802		$.ajax({
2803			type : 'POST',
2804			data : {
2805				type_code : join_type_code,
2806				back_url  : back_url
2807			},
2808			url : ('/backpg/kakao_sync_join.cm'),
2809			dataType : 'json',
2810			async : false,
2811			cache : false,
2812			success : function(res){
2813				if(res.msg === 'SUCCESS'){
2814					// 나초코드 앱인 경우 푸시토큰 등록
2815					if(typeof parent.Nachocode !== 'undefined' && res.nachocode_api_key != '' && res.nachocode_api_key != 'temp-api-key') {
2816						(async function() {
2817							try {
2818								await parent.Nachocode.initAsync(res.nachocode_api_key);
2819
2820								if (parent.Nachocode.env.isApp()) {
2821									await parent.Nachocode.user.setUserId(res.nachocode_uid);
2822								}
2823							} catch (error) {
2824								console.error('Nachocode 에러:', error);
2825							}
2826
2827							// 토큰 등록 후 리다이렉트
2828							location.href = res.url;
2829						})();
2830					} else {
2831						// 나초코드 앱이 아니면 바로 리다이렉트
2832						location.href = res.url;
2833					}
2834				}else{
2835					if(res.msg === 'NEED_ADMIN_CONFIRM'){
2836						alert(getLocalizeString('설명_가입승인되지않은아이디입니다', '', '가입승인 대기 중입니다. 운영자의 승인 후 이용하실 수 있습니다.'));
2837						location.href = res.url;
2838					}else{
2839						alert(res.msg);
2840					}
2841				}
2842			}
2843		});
2844	};
2845		var unauthMemberModal = function(){
2846			$.ajax({
2847				type: 'POST',
2848				data: {},
2849				url: ('/dialog/unauth_member_processing.cm'),
2850				dataType: 'html',
2851				async: false,
2852				cache: false,
2853				success: function (res) {
2854					var $html = $(res);
2855					$.cocoaDialog.open({type:'site_join',custom_popup:$html, close_block :'undefined'});
2856				}
2857			});
2858		};
2859		var nachocodeNativeSocialLogin = function(service, api_key, back_url, used_login_btn, merge = false, t
2859ype_code = ''){
2860			const serviceList = ['naver', 'kakao', 'kakao_sync', 'google', 'facebook', 'apple'];
2861			const loginFailMessage = getLocalizeString('설명_로그인에실패했습니다', '', '로그인에 실패 했습니다.');
2862			
2863			const showErrorAndReturn = (errorCode) => {
2864				alert(loginFailMessage + (errorCode ? ' [' + errorCode + ']' : ''));
2865				return false;
2866			};
2867
2868			const handleLoginSuccess = (token, user = null) => {
2869				const params = new URLSearchParams();
2870				params.append('service', service);
2871				params.append('token', token || '');
2872				params.append('back_url', back_url || '');
2873				params.append('used_login_btn', used_login_btn === 'Y' ? 'Y' : 'N');
2874				params.append('merge', merge ? 'merge' : '');
2875				params.append('type_code', type_code || '');
2876
2877				if (user) {
2878					params.append('user_data', JSON.stringify(user));
2879				}
2880
2881				fetch('/oauth/native_nachocode.cm?' + params.toString())
2882					.then(response => response.json())
2883					.then(data => {
2884						if (data.success) {
2885							window.location.href = data.redirect_url;
2886						} else {
2887							showErrorAndReturn('E008');
2888						}
2889					})
2890					.catch(error => {
2891						showErrorAndReturn('E009');
2892					});
2893			};
2894
2895			const createCallback = (tokenExtractor, userExtractor = null) => {
2896				return (result, data) => {
2897					if (result?.status === 'success') {
2898						const token = tokenExtractor(data);
2899						if (token) {
2900							const user = userExtractor ? userExtractor(data) : null;
2901							handleLoginSuccess(token, user);
2902						} else {
2903							showErrorAndReturn('E004');
2904						}
2905					} else {
2906						alert(result?.message);
2907						showErrorAndReturn('E007');
2908					}
2909				};
2910			};
2911
2912			const serviceConfigs = {
2913				naver: {
2914					method: 'naver',
2915					params: [],
2916					tokenExtractor: (data) => data?.accessToken
2917				},
2918				kakao: {
2919					method: 'kakao', 
2920					params: [],
2921					tokenExtractor: (data) => data?.accessToken
2922				},
2923				kakao_sync: {
2924					method: 'kakao',
2925					params: [],
2926					tokenExtractor: (data) => data?.accessToken
2927				},
2928				google: {
2929					method: 'google',
2930					params: [],
2931					tokenExtractor: (data) => data
2932				},
2933				facebook: {
2934					method: 'facebook',
2935					params: [['email', 'public_profile']],
2936					tokenExtractor: (data) => data
2937				},
2938				apple: {
2939					method: 'apple',
2940					params: [['email', 'fullName']],
2941					tokenExtractor: (data) => data?.token,
2942					userExtractor: (data) => {
2943						if (data?.userData?.name) {
2944							return {
2945								name: {
2946									firstName: data.userData.name.givenName || '',
2947									lastName: data.userData.name.familyName || ''
2948								}
2949							};
2950						}
2951						return null;
2952					}
2953				}
2954			};
2955			
2956			if (api_key == '' || typeof api_key === 'undefined' || !serviceList.includes(service)) {
2957				return showErrorAndReturn('E001');
2958			}
2959			
2960			(async () => {
2961				if (typeof parent.Nachocode === "undefined") {
2962					return showErrorAndReturn('E002');
2963				}
2964				
2965				try {
2966					await parent.Nachocode.initAsync(api_key);
2967					
2968					if (!parent.Nachocode.env.isApp()) {
2969						return showErrorAndReturn('E003');
2970					}
2971					
2972					const config = serviceConfigs[service];
2973					if (!config) {
2974						return showErrorAndReturn('E005');
2975					}
2976					
2977					const serviceMethod = parent.Nachocode[config.method];
2978					const callback = createCallback(config.tokenExtractor, config.userExtractor);
2979
2980					if (config.params.length > 0) {
2981						serviceMethod.login(...config.params, callback);
2982					} else {
2983						serviceMethod.login(callback);
2984					}
2985					
2986				} catch (error) {
2987					return showErrorAndReturn('E006');
2988				}
2989			})();
2990		};
2991	return {
2992		init : function(){
2993			init();
2994		},
2995		unauthMemberModal : function(type){
2996			unauthMemberModal(type);
2997		},
2998		showMemberProfile : function(o){
2999			showMemberProfile(o);
3000		},
3001		checkRequireOption : function(){
3002			return checkRequireOption();
3003		},
3004		openLogin : function(back_url, type, callback, used_login_btn, page_type){
3005			openLogin(back_url, type, callback, used_login_btn, page_type);
3006		},
3007		openGuestLogin : function(back_url){
3008			openGuestLogin(back_url);
3009		},
3010		openJoin : function(back_url, type, type_code){
3011			openJoin(back_url, type, type_code);
3012		},
3013		openJoinWithoutTerms : function(third_party, marketing_sms_agree, marketing_email_agree, back_url, type_code){
3014			openJoinWithoutTerms(third_party, marketing_sms_agree, marketing_email_agree, back_url, type_code);
3015		},
3016		openJoinPatternChoice : function(back_url, request_page, social_type){
3017			openJoinPatternChoice(back_url, request_page, social_type);
3018		},
3019		openJoinTypeChoice : function(back_url, request_page, type_code){
3020			openJoinTypeChoice(back_url, request_page, type_code);
3021		},
3022		joinSubmit : function(is_social){
3023			joinSubmit(is_social);
3024		},
3025		joinSubmitByAgree : function(){
3026			joinSubmitByAgree();
3027		},
3028		joinSubmitByJoinPattern : function(join_type_code){
3029			joinSubmitByJoinPattern(join_type_code);
3030		},
3031		editProfile : function(backurl){
3032			editProfile(backurl);
3033		},
3034		openFindPassword : function(){
3035			openFindPassword();
3036		},
3037		findSubmit : function(s){
3038			findSubmit(s);
3039		},
3040		openChangePassword : function(c, r, s, type){
3041			openChangePassword(c, r, s, type);
3042		},
3043		changePassword : function(){
3044			changePassword();
3045		},
3046		openDreamSecurityV2Window : function(){
3047			openDreamSecurityV2Window();
3048		},
3049
3050		openDRMOKWindow : function(req_info, cpid, rtn_url){
3051			openDRMOKWindow(req_info, cpid, rtn_url);
3052		},
3053
3054		openMOBILIANSWindow : function(CI_SVCID, Tradeid, Okurl, call_back_data){
3055			openMOBILIANSWindow(CI_SVCID, Tradeid, Okurl, call_back_data);
3056		},
3057
3058		// 신규 인증창 방식 (서버방식)
3059		openMOBILIANSWindow2 : function(CI_SVCID, Tradeid, Okurl, call_back_data, Notiurl, Cryptstring){
3060			openMOBILIANSWindow2(CI_SVCID, Tradeid, Okurl, call_back_data, Notiurl, Cryptstring);
3061		},
3062
3063		openINICISWindow : function(mid, Tradeid ,Okurl, call_back_data){
3064			openINICISWindow(mid, Tradeid ,Okurl, call_back_data);
3065		},
3066
3067		openCOMBINATIONAUTHTYPESWindow : function(mid, mTxId, return_url, auth_hash){
3068			openCOMBINATIONAUTHTYPESWindow(mid, mTxId, return_url, auth_hash);
3069		},
3070
3071		showJoinForm : function(){
3072			showJoinForm();
3073		},
3074		openAppAction : function(isLogin){
3075			openAppAction(isLogin);
3076		},
3077		openLoginOrModifyDialogByLoginStatus : function(){
3078			openLoginOrModifyDialogByLoginStatus();
3079		},
3080		isDialogOpen : function(){
3081			isDialogOpen();
3082		},
3083		openAgreeSocialJoin : function(back_url, type_code, type){
3084			openAgreeSocialJoin(back_url, type_code, type);
3085		},
3086		openSocialJoin : function(back_url, type_code,social_type){
3087			openSocialJoin(back_url, type_code, social_type);
3088		},
3089		clearOAuthData : function(){
3090			clearOAuthData();
3091		},
3092		'disconnectOAuth' : function(type,back_url){
3093			disconnectOAuth(type,back_url);
3094		},
3095		'openGoodbye' : function(){
3096			openGoodbye();
3097		},
3098		'goodbye' : function(rand){
3099			goodbye(rand);
3100		},
3101		'openInactive' : function(back_url,is_social){
3102			openInactive(back_url,is_social);
3103		},
3104		'initJoinForm' : function(country){
3105			initJoinForm(country);
3106		},
3107		'changeCountry' : function(compare_country){
3108			changeCountry(compare_country);
3109		},
3110		itemFileUpload : function($obj, code){
3111			itemFileUpload($obj, code);
3112		},
3113		'sendJoinMailAuth' : function(){
3114			sendJoinMailAuth();
3115		},
3116		'getSiteMemberCustomData': function(data, callback) {
3117			getSiteMemberCustomData(data, callback);
3118		},
3119		'step' : function(){
3120			step()
3121		},
3122		'updateFindIdStatus' : function(){
3123			updateFindIdStatus()
3124		},
3125		'initFindId' : function(obj){
3126			initFindId(obj)
3127		},
3128		'createRecommendCode' : function(callback){
3129			createRecommendCode(callback);
3130		},
3131		'setSyncJoinInterLock' : function(){
3132			setSyncJoinInterLock();
3133		},
3134		'kakaoSyncJoin' : function(join_type_code,back_url){
3135			kakaoSyncJoin(join_type_code,back_url);
3136		},
3137		'openDreamSecurityV2ForFindId' : function(){
3138			openDreamSecurityV2ForFindId();
3139		},
3140		'openDreamSecurityV2ForAdult' : function(){
3141			openDreamSecurityV2ForAdult();
3142		},
3143		'nachocodeNativeSocialLogin' : function(service, api_key, back_url, used_login_btn, merge = false, type_code = ''){
3144			nachocodeNativeSocialLogin(service, api_key, back_url, used_login_btn, merge, type_code);
3145		}
3146	};
3147}();
3148
3149$(function() {
3150	SITE_MEMBER.init();
3151});

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.